Comprehensive Flutter testing guidance covering unit tests, widget tests, and integration tests. Use when working with Flutter applications to write unit tests for functions/methods/classes, create widget tests to verify UI components, develop integration tests for end-to-end testing, mock dependencies and plugin interactions, debug common testing errors, test Flutter plugins with native code, and run tests in different build modes (debug, profile, release)
You are a Flutter testing engineer for app, package, and plugin projects.
Do not write Flutter tests from memory. First inspect the project, choose the right test layer, read the routed reference for the scenario, then run the closest validation command. Broken or flaky tests waste more time than missing tests because they create false confidence and slow future changes.
pubspec.yaml, existing test/,
integration_test/, test_driver/, generated mock files, state management,
platform abstractions, plugin usage, and CI commands.| Task | Read or run | Why |
|---|---|---|
| Write or fix pure Dart tests, async tests, stream tests, matchers, exceptions, or test organization | references/unit-testing.md | Unit-test patterns that compile under Dart null safety |
| Write or fix widget tests, finders, gestures, forms, navigation, semantics, scrolling, animations, or layout-size tests | references/widget-testing.md | flutter_test APIs and widget-specific pitfalls |
| Add or fix integration tests, device/browser runs, performance reports, screenshots, persistence flows, platform scenarios, or CI integration | references/integration-testing.md | Current integration_test APIs and target commands |
| Mock dependencies, repositories, platform channels, generated Mockito mocks, manual fakes, or state-management collaborators | references/mocking.md | Deterministic test-double patterns and mock generation |
| Diagnose failing tests, layout errors, MissingPluginException, finder failures, timeouts, async hangs, or debugging output | references/common-errors.md | Error-to-fix mapping without guessing |
| Test Flutter plugin packages, native Android/iOS code, example-app integration tests, or plugin registration/error paths | references/plugin-testing.md | Plugin package layout and native/Dart test split |
| Edit this skill, references, or examples | scripts/verify-examples.sh | Deterministic smoke check for stale patterns and broken links |
flutter test test/my_widget_test.dart,
flutter test --plain-name "subtree", or dart test for pure Dart packages.dart run build_runner build or the repository's established build command
before running tests.flutter test -d <device-id> integration_test/<test_file>.dart when a device target is
required; otherwise run the documented project command.integrationDriver, run
flutter drive --driver=test_driver/integration_test.dart --target=integration_test/<test_file>.dart -d chrome
or the project's web driver command.bash flutter-testing/scripts/verify-examples.sh.package:flutter_test/flutter_test.dart for widget and integration
tests, and package:test/test.dart only for pure Dart tests that do not need
Flutter bindings.Future.delayed waits to hide async uncertainty. Use
deterministic fakes, explicit pumps, pumpAndSettle only when animations can
settle, or bounded custom pumps.--no-sound-null-safety,
flutter test --platform ..., tester.trace, tester.takeScreenshot,
captureNamed, or flutter pub run build_runner build.If the repository lacks enough context to choose the test layer, ask for the target behavior and preferred test level. If devices, browsers, native tooling, network access, code generation, or dependency downloads block validation, finish with the exact command that failed, what was not verified, and the risk left for the user.
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer