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
Integration tests verify complete user journeys and native plugin interactions on a live target device using package:integration_test.
Inspect pubspec.yaml, the Flutter SDK constraint, existing integration tests, flavors, entrypoints, and any native-capable harness before changing setup. Preserve an adequate existing test stack. When the task requires a durable Flutter integration test and the SDK package is absent, add integration_test under dev_dependencies:
dev_dependencies:
integration_test:
sdk: flutter
flutter_test:
sdk: flutterCreate test entrypoints inside the integration_test/ directory at the project root (e.g., integration_test/app_test.dart):
Inspect the imported entrypoint before choosing the startup call. The example below assumes the app exposes Future<void> main(). Await asynchronous initialization before the first pump. For a synchronous void main(), call it without await. If the app declares void main() async, prefer extracting initialization into an awaitable Future<void> bootstrap shared by production and tests so the test can observe completion.
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:my_app/main.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets('Complete checkout flow on target device', (tester) async {
await app.main(); // This example assumes Future<void> main().
await tester.pumpAndSettle();
// Interact with UI using standard finder and tap APIs
final startButton = find.byKey(const Key('start_checkout'));
expect(startButton, findsOneWidget);
await tester.tap(startButton);
await tester.pumpAndSettle();
// Verify destination behavior
expect(find.text('Order Summary'), findsOneWidget);
});
}Execute integration tests against a resolved target and pass the project's exact flavor, entrypoint, and non-secret defines. Inspect flutter test --help for the pinned SDK when syntax is uncertain:
flutter test integration_test/app_test.dart -d <device-id> --flavor stagingSome projects use a host driver for screenshots, response data, performance traces, web execution, or device-lab packaging. Preserve the established flutter test or flutter drive workflow instead of mechanically converting it. Record which command and build mode actually ran.
package:integration_test uses Flutter test APIs and cannot operate arbitrary native permission dialogs, notification trays, account pickers, or platform views as Flutter widgets.
integration_test with stable keys, text contracts, and semantic state.adb or simctl to prepare supported OS state only when the prompt itself is not under test.ValueKey is not automatically a native accessibility identifier. Check the pinned Flutter SDK before using version-specific semantics APIs.Directly granting a permission can prove Flutter behavior under that state, but it does not prove the system prompt, rationale, limited access, permanently-denied behavior, usage-description metadata, or user interaction with the dialog. Cover those boundaries separately when required.
ValueKey or explicit text rather than fragile relative coordinates or deep widget-tree paths.Future unawaited, and do not mechanically add await to a synchronous entrypoint.pumpAndSettle() only when the screen can actually settle. Prefer an explicit observable condition with a bounded timeout for periodic animations, asynchronous native transitions, or continuously updating screens. Do not use arbitrary sleeps as readiness checks.adb -s <device-id> shell am start -W -a android.intent.action.VIEW -d "myapp://product/123" <application-id>xcrun simctl openurl <device-id> "myapp://product/123"For a repeated cold/warm deep-link or notification-entry matrix, use lifecycle entry matrix and keep project-specific setup and assertions in test-owned hooks.
For performance measurements, run the appropriate established driver in profile mode on representative physical hardware and route attribution to flutter-performance; simulator or emulator timing is not release-performance evidence.
.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
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-text-rendering
references
flutter-ui-design
flutter-ui-patterns
flutter-visual-effects