Agent skill

Flutter Tester

by FNOSP in FNOSP/FlyNarwhal

A skill your agent uses when creating, writing, fixing, or reviewing tests in a Flutter project.

AGPL-3.0Auto-check passedMobile

Install Flutter Tester

skills CLI
$ npx skills add FNOSP/FlyNarwhal --skill flutter-tester -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install FNOSP/FlyNarwhal flutter-tester --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/FNOSP/FlyNarwhal.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/flutter-tester .claude/skills/flutter-tester && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
flutter-tester
GitHub stars
495
Token cost
~1.4k tokens
SKILL.md length
405 words
Files
4 (incl. references)
Skills in repo
8
Repo updated
First seen
Licence
AGPL-3.0

At a glance

A skill your agent uses when creating, writing, fixing, or reviewing tests in a Flutter project.

  • Works in 3 steps: Layer Isolation → Given-When-Then Structure → Test Organisation
  • Reviewing tests in a Flutter project
  • SKILL.md covers Overview, Reference Files, Core Principles and Standard Test Setup, plus 4 more sections
  • Calls flutter and dart

What it does

Flutter Tester is an agent skill from FNOSP/FlyNarwhal. Use when creating, writing, fixing, or reviewing tests in a Flutter project. Covers unit tests, widget tests, integration tests, Riverpod provider testing, and Mockito mocking. Provides Given-When-Then patterns, layer isolation strategies, and test setup for GetIt, SharedPreferences, and FakeDatabase.

Its SKILL.md is about 1.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/layer_testing_patterns.md`, `references/riverpod_testing_guide.md` and `references/widget_testing_guide.md`). Compatibility notes: Requires a Flutter project with fluttertest. Works with Riverpod, Mockito, and GetIt. Run dart run buildrunner build to generate mocks after adding…

It sits in Mobile, covering Cross-platform mobile apps, Unit testing and Integration testing. It works with Flutter. The repository describes itself as: 基于 Flutter 框架开发的适用于飞牛影视的跨平台客户端. The licence is AGPL-3.0.

When your agent uses it

  • Reviewing tests in a Flutter project
  • Tasks that involve Cross-platform mobile apps
  • Tasks that involve Unit testing

Example prompts

  • “/flutter-tester”

Requirements

  • Compatibility (from SKILL.md): Requires a Flutter project with flutter_test. Works with Riverpod, Mockito, and GetIt. Run `dart run build_runner build` to generate mocks after adding @GenerateMocks annotations. Compatible with FVM.

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Layer Isolation
  2. Given-When-Then Structure
  3. Test Organisation

What it can do on your machine

Read from SKILL.md and the folder at commit c94d847. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • flutter
    • dart

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires a Flutter project with flutter_test. Works with Riverpod, Mockito, and GetIt. Run `dart run build_runner build` to generate mocks after adding @GenerateMocks annotations. Compatible with FVM.

    From compatibility in the SKILL.md frontmatter.

Context cost

Flutter Tester loads about 1.4k tokens when it runs, and up to ~14k if it reads all its reference files. Until then it costs about 79 tokens; SKILL.md has 405 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~79
When it runs · the whole SKILL.md, loaded when a task matches
~1.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~14k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from FNOSP/FlyNarwhal at commit c94d847, republished under its AGPL-3.0 licence (© FNOSP). 405 words, ~1,444 tokens.

Download SKILL.mdSave it as .claude/skills/flutter-tester/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
flutter-tester
description
Use when creating, writing, fixing, or reviewing tests in a Flutter project. Covers unit tests, widget tests, integration tests, Riverpod provider testing, and Mockito mocking. Provides Given-When-Then patterns, layer isolation strategies, and test setup for GetIt, SharedPreferences, and FakeDatabase.
compatibility
Requires a Flutter project with flutter_test. Works with Riverpod, Mockito, and GetIt. Run `dart run build_runner build` to generate mocks after adding @GenerateMocks annotations. Compatible with FVM.
metadata.author
harish
metadata.version
1.0.0

Flutter Tester

Overview

Test each architectural layer in isolation using Given-When-Then structure. Always test both success and error paths. Never mock providers — override their dependencies instead.

Reference Files

Load the relevant file based on what you're testing:

What you're testingReference file
Repository, DAO, Service logicreferences/layer_testing_patterns.md
Widget UI, interactions, dialogs, navigationreferences/widget_testing_guide.md
Riverpod provider state, mutations, lifecyclereferences/riverpod_testing_guide.md

Core Principles

1. Layer Isolation

Test each layer against its own mocked dependencies:

LayerWhat to testWhat to mock
RepositoryData coordination between sourcesDAOs, APIs, Logger
DAODatabase CRUD operationsUse real in-memory DB, mock Logger
ProviderState management and transitionsServices, Repositories
ServiceBusiness logic and workflowsRepositories, Network clients
WidgetUI behaviour and interactionsProvider dependencies (via overrides)
2. Given-When-Then Structure
dart
test('Given valid data, When fetchUsers called, Then returns user list', () async {
  // Arrange (Given)
  when(mockDAO.fetchAll()).thenAnswer((_) async => expectedUsers);

  // Act (When)
  final result = await repository.fetchUsers();

  // Assert (Then)
  expect(result, equals(expectedUsers));
  verify(mockDAO.fetchAll()).called(1);
});
3. Test Organisation
dart
group('UserRepository', () {
  group('fetchUsers', () {
    setUp(() { /* init mocks, register with GetIt */ });
    tearDown(() => GetIt.I.reset()); // Always reset GetIt

    test('Given success ... When ... Then ...', () { });
    test('Given error  ... When ... Then ...', () { });
  });
});

Standard Test Setup

Generate Mocks
dart
@GenerateMocks([IUserDAO, IUserAPI, ILogger])
void main() { ... }

Run dart run build_runner build after modifying @GenerateMocks.

Register with GetIt
dart
setUp(() {
  mockDAO = MockIUserDAO();
  mockLogger = MockILogger();
  GetIt.I
    ..registerSingleton<IUserDAO>(mockDAO)
    ..registerSingleton<ILogger>(mockLogger);
});

tearDown(() => GetIt.I.reset()); // Critical — always reset
Fakes vs Mocks
  • Fakes (class FakeLogger extends ILogger) — silent stubs; use when you don't need to verify calls
  • Mocks (MockILogger) — use when you need when(), verify(), or thenThrow()

Quick Reference

ScenarioKey pattern
Test a repositoryMock DAO + API → inject into repository constructor
Test a DAOFakeDatabase or openInMemoryDatabase() in setUp, delete table in tearDown
Test a Riverpod providercreateContainer(overrides: [serviceProvider.overrideWith(...)])
Test a widgetSet screen size, use find.byKey(), call pumpAndSettle()
Test a loading stateUse Completer, pump() to assert loading, complete, pump() again
Test platform-specific UIdebugDefaultTargetPlatformOverride = TargetPlatform.iOS — reset after
Test GoRouter navigationFakeGoRouter + MockGoRouterProvider

Running Tests

bash
flutter test --coverage                       # All tests with coverage
flutter test test/path/to/test.dart           # Specific file
flutter test --plain-name "Given valid data"  # Filter by name
genhtml coverage/lcov.info -o coverage/html   # Generate HTML coverage report
# Prefix any command with `fvm` if using Flutter Version Manager
Show full SKILL.md (164 more words)Show less

Common Mistakes

MistakeFix
Mocking a provider directlyOverride its dependencies: provider.overrideWith(...)
Missing GetIt.I.reset() in tearDownTests pollute each other — always reset
await Future.delayed() in testsUse await tester.pumpAndSettle() or Completer instead
Finding widgets by text stringUse find.byKey(const Key('name')) — stable across text changes
No screen size in widget testsAdd tester.view.physicalSize = const Size(1000, 1000)
Not resetting debugDefaultTargetPlatformOverrideSet to null at the end of the test
tearDown() without a lambdaWrite tearDown(() async { ... }) not tearDown() async { ... }

Test Checklist

Setup & Mocking:

  • Dependencies mocked (not providers)
  • SharedPreferences mocked if used
  • GetIt.I.reset() in tearDown
  • Streams closed in tearDown
  • Controllers disposed in tearDown

Widget Tests:

  • Keys added to source widgets and used in find.byKey()
  • Screen size set (physicalSize + devicePixelRatio)
  • Platform overrides reset (debugDefaultTargetPlatformOverride = null)
  • Navigation verified if applicable

Test Coverage:

  • Success and failure paths covered
  • Edge cases tested (null, empty, max values)
  • Loading and error states tested
  • Async handled correctly (no Future.delayed)

Code Quality:

  • Given-When-Then naming used
  • verify() or verifyNever() where appropriate
  • Tests are isolated and deterministic

© FNOSP, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (references) in .agents/skills/flutter-tester of FNOSP/FlyNarwhal.

  • SKILL.md
  • references/layer_testing_patterns.md
  • references/riverpod_testing_guide.md
  • references/widget_testing_guide.md

Open the folder on GitHubat commit c94d847

Compare with similar skills

Flutter Tester next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Flutter Tester compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Flutter Tester this skillFNOSP/FlyNarwhal495—~1.4kAutomated safety check: PassAGPL-3.0
Flutter TestingMADTeacher/mad-agents-skills110—~1.5kAutomated safety check: PassMIT
Flutter Testing Appsbtwld/superdeck130—~2.2kAutomated safety check: PassBSD-3-Clause
BlocVeryGoodOpenSource/vgv-ai-flutter-plugin169—~2kAutomated safety check: PassMIT
Flutter Testingmakifbaysal/tasktrooper109—~1.3kAutomated safety check: PassApache-2.0
TestingVeryGoodOpenSource/vgv-ai-flutter-plugin169—~3.2kAutomated safety check: PassMIT

Similar skills

  • Flutter Testing

    MADTeacher/mad-agents-skills

    Write, fix, review, debug, and validate Flutter tests for apps, packages, and plugins.

    110 GitHub stars~1.5k tokensUpdated 5 mo ago
    Testing & QAAuto-check passed
  • Flutter Testing Apps

    btwld/superdeck

    Implements unit, widget, and integration tests for a Flutter app.

    130 GitHub stars~2.2k tokensUpdated 10 days ago
    Testing & QAAuto-check passed
  • Bloc

    VeryGoodOpenSource/vgv-ai-flutter-plugin

    Best practices for Bloc state management in Flutter/Dart, covering Cubit versus Bloc, event and state naming, sealed classes with Equatable, the Page/View split with BlocProvider, BlocBuilder…

    169 GitHub stars~2k tokensUpdated 2 days ago
    MobileAuto-check passed
  • Flutter Testing

    makifbaysal/tasktrooper

    A skill your agent uses when testing Flutter code - unit tests for logic, widget tests for UI behavior, golden tests for appearance, the multi-size/text-scale/dark matrix, accessibility guidelines…

    109 GitHub stars~1.3k tokensUpdated today
    MobileAuto-check passed
  • Testing

    VeryGoodOpenSource/vgv-ai-flutter-plugin

    Best practices for Dart unit tests, Flutter widget tests, and golden file tests, covering group and test naming, setUp lifecycle and isolation, mocking with package:mocktail, and the shared pumpApp…

    169 GitHub stars~3.2k tokensUpdated 2 days ago
    MobileAuto-check passed
  • Testing Strategy

    bladeofgod/flutter-ai-harness

    适用:编写或审查 Dart 单测、Flutter Widget 测试、Route 测试、集成测试、Fake 或 Mocktail Mock。不适用:Kotlin/Swift 测试框架,也不替代生产实现。触发词:testWidgets、flutter test、Mocktail、Fake、Get.reset、integrationtest、coverage、flaky。

    116 GitHub stars~268 tokensUpdated 1 mo ago
    MobileAuto-check passed

More from FNOSP/FlyNarwhal

All 8 skills in this repo
  • GitHub Actions Creator

    FNOSP/FlyNarwhal

    A skill your agent uses when the user wants to create, generate, or set up a GitHub Actions workflow.

    495 GitHub starsUsed in 1 repo~2.4k tokens
    Auto-check passed
  • Automate GitHub workflows with AI assistance. An agent skill from FNOSP/FlyNarwhal.

    495 GitHub starsUsed in 8 repos~5.4k tokens
    Auto-check passed
  • Flutter Expert

    FNOSP/FlyNarwhal

    A skill your agent uses when building cross-platform applications with Flutter 3+ and Dart.

    495 GitHub starsUsed in 2 repos~758 tokens
    Auto-check passed
  • Release Publishing

    FNOSP/FlyNarwhal

    A skill your agent uses when publishing a new release of FlyNarwhal desktop.

    495 GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • Remote API Development

    FNOSP/FlyNarwhal

    A skill your agent uses when adding, modifying, or refactoring any remote/HTTP API call in this Flutter project.

    495 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed
  • Swift Expert

    FNOSP/FlyNarwhal

    A skill your agent uses when building iOS/macOS applications with Swift 5.9+, SwiftUI, or async/await concurrency.

    495 GitHub stars~813 tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Flutter Tester

What does Flutter Tester do?

A skill your agent uses when creating, writing, fixing, or reviewing tests in a Flutter project. Flutter Tester is an agent skill from FNOSP/FlyNarwhal. Use when creating, writing, fixing, or reviewing tests in a Flutter project.

When should I use Flutter Tester?

Flutter Tester fits situations like: reviewing tests in a Flutter project; tasks that involve Cross-platform mobile apps; tasks that involve Unit testing.

How do I install Flutter Tester in Claude Code?

Run `npx skills add FNOSP/FlyNarwhal --skill flutter-tester -a claude-code`. Or copy the skill folder (.agents/skills/flutter-tester in FNOSP/FlyNarwhal) into .claude/skills/flutter-tester in your project. Claude Code loads it when a task matches its description.

How do I install Flutter Tester in Codex?

Run `npx skills add FNOSP/FlyNarwhal --skill flutter-tester -a codex`. Or copy the skill folder (.agents/skills/flutter-tester in FNOSP/FlyNarwhal) into .agents/skills/flutter-tester in your project. Codex loads it when a task matches its description.

Can I use Flutter Tester in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add FNOSP/FlyNarwhal --skill flutter-tester -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/flutter-tester, .gemini/skills/flutter-tester, .github/skills/flutter-tester and .opencode/skills/flutter-tester in your project.

What does Flutter Tester need to run?

Going by SKILL.md and its folder, Flutter Tester needs the command-line tools its instructions call (flutter and dart). Compatibility (from SKILL.md): Requires a Flutter project with flutter_test. Works with Riverpod, Mockito, and GetIt. Run `dart run build_runner build` to generate mocks after adding @GenerateMocks annotations. Compatible with FVM..

Does Flutter Tester access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Flutter Tester safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Flutter Tester use?

Flutter Tester is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Flutter Tester use?

About 1.4k tokens (SKILL.md is roughly 5.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 12k tokens, read only when the agent opens those files.

What are the alternatives to Flutter Tester?

Skills that share tags, products or a category with Flutter Tester: Flutter Testing (MADTeacher/mad-agents-skills, 110 stars), Flutter Testing Apps (btwld/superdeck, 130 stars), Bloc (VeryGoodOpenSource/vgv-ai-flutter-plugin, 169 stars) and Flutter Testing (makifbaysal/tasktrooper, 109 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Flutter Tester?

FNOSP (a GitHub organization) maintains it in FNOSP/FlyNarwhal, which has 495 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 6, 2026.

Source: FNOSP/FlyNarwhal on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.