Focused Agent Skills for complete Flutter and Dart app delivery.
72
90%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Use this reference when components overlap, clip, leave the visible region, or become unreachable only at particular sizes, text scales, locales, keyboard states, or content states.
Separate three kinds of evidence:
RenderFlex overflow identifies an incompatible constraint path.Preserve the first exception and inspect the constraint-owning ancestor before changing sizes. For silent visual overlap, identify the exact components and the product relationship they must satisfy.
Do not scan every render object and fail on any intersection. Parent and child boxes overlap by design, as do intentional Stack, badge, scrim, tooltip, floating-action, and decorative layers. Instead, assign stable keys or semantic finders to important components and define only relationships required by the screen:
After layout, WidgetTester.getRect provides an axis-aligned rectangle suitable for explicit disjoint, containment, and gap assertions. For example:
final fieldRect = tester.getRect(find.byKey(const ValueKey('last-field')));
final actionRect = tester.getRect(find.byKey(const ValueKey('checkout-action')));
expect(
fieldRect.overlaps(actionRect),
isFalse,
reason: 'The sticky action must not cover the final field',
);
expect(
find.byKey(const ValueKey('checkout-action')).hitTestable(),
findsOneWidget,
);getRect is an axis-aligned bounding box. Transforms, clipping, irregular shapes, opacity, and platform views can make rectangle intersection an incomplete or overly conservative signal. Pair geometry with the actual tap, focus, scroll, or keyboard behavior and with a rendered comparison when appearance matters. A center-point hitTestable check does not prove that the entire target is unobscured.
Build the matrix from product constraints rather than device model names. Include:
viewInsets states when they affect the failure;Before emitting or applying a runnable harness, inspect the project's pinned Flutter version, Dart constraint, and existing test helpers. Confirm that its SDK exposes the selected TestFlutterView, text-scaling, view-inset, and teardown APIs. When compatible APIs are supplied or confirmed, use them concretely in the harness. If the repository or SDK version is not supplied, label current-API snippets as conditional, name the compatibility inspection still required, and do not claim that they compile for the target project. Preserve an established compatible helper instead of introducing a second viewport harness. Run the focused test with the project's own Flutter SDK after implementation.
Set the test view explicitly and restore it after the test. Apply text scaling inside MaterialApp.builder so the fixture receives the same application shell while the scale varies:
final view = tester.view;
view.devicePixelRatio = 1;
view.physicalSize = const Size(320, 640);
addTearDown(view.reset);
await tester.pumpWidget(
MaterialApp(
builder: (context, child) => MediaQuery(
data: MediaQuery.of(context).copyWith(
textScaler: TextScaler.linear(2),
),
child: child!,
),
home: const CheckoutFixture.longContent(),
),
);
await tester.pump();
expect(tester.takeException(), isNull);Keep the logical size consistent with physicalSize / devicePixelRatio. Use APIs compatible with the project's Flutter SDK; older projects may expose test-window configuration differently.
Give the screen a fixture builder or existing dependency seams that can render relevant product states without network, wall-clock, random, or mutable global input. Prefer named fixtures such as typical, long localized content, loading, empty, validation error, and offline over one production-shaped mock graph.
Automate the high-risk combinations, not the full Cartesian product. For example, run typical content at every breakpoint, then pair the smallest viewport with long content, enlarged text, RTL, validation errors, and an open keyboard. Give each case a descriptive test name so a failure identifies its viewport and fixture.
For every case, assert the relevant contract:
Add a focused golden only when pixel output is a stable contract. Geometry tests prove selected spatial relationships; goldens or screenshots reveal unmodeled visual collisions; device tests prove system keyboard, platform view, safe-area, and OS chrome behavior. State which layer was actually exercised.
.tessl-plugin
skills
dart-concurrency
dart-language
flutter-accessibility
flutter-ai-integration
flutter-animation
flutter-app-workflow
flutter-architecture
flutter-authentication
flutter-background-execution
flutter-build-release
flutter-ci-cd
flutter-code-review
flutter-dependency-upgrades
flutter-device-testing
flutter-figma-workflow
flutter-in-app-purchases
flutter-localization
references
flutter-networking
references
flutter-notifications
flutter-observability
flutter-openapi-client
flutter-package-development
flutter-performance
flutter-persistence
references
flutter-platform-integration
flutter-product-analytics
flutter-responsive-layout
flutter-runtime-debugging
flutter-security
flutter-state-management
flutter-testing
flutter-ui-design
flutter-ui-patterns
flutter-visual-effects