AgentStack
SKILL verified MIT Self-run

Dev Flutter Patterns

skill-aloisdeniel-skills-dev-flutter-patterns · by aloisdeniel

Common Flutter specific development patterns. Triggers: flutter, mobile, app, riverpod

No reviews yet
0 installs
14 views
0.0% view→install

Install

$ agentstack add skill-aloisdeniel-skills-dev-flutter-patterns

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Dev Flutter Patterns? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Flutter Development Patterns

This skill provides common Flutter development patterns to be used when developping Flutter apps with Riverpod.

Use const widgets instances whenever possible

return const Padding(
  padding: EdgeInsets.all(8.0),
  child: Icon(Icons.star),
);

Provide unique keys to widget instances in lists

ListView.builder(
  itemCount: items.length,
  itemBuilder: (context, index) {
    final item = items[index];
    return Tile(
      key: ValueKey(item.id), // Unique key based on item ID
      data: item,
    );
  },
);

Always prefix provider declarations with $

final $example = Provider((ref) {
  return Example();
});

For providers which needs initialization, create two providers: $load and $name

final $loadExample = FutureProvider((ref) async {
  // Async initialization logic
});

final $example = Provider((ref) {
  final asyncValue = ref.watch($loadExample);
  return switch (asyncValue) {
    AsyncData(value) => value,
    _ => throw Exception('Example is not initialized'),
  }

Use AsyncValue for asynchronous loading states

class ExampleNotifier extends AsyncNotifier {
  @override
  Future build() async {
    // Initial loading state
    return fetchData();
  }

  Future refresh() async {
    // Set loading state
    state = const AsyncValue.loading();
    try {
      final data = await fetchData();
      // Set data state
      state = AsyncValue.data(data);
    } catch (e, st) {
      // Set error state
      state = AsyncValue.error(e, st);
    }
  }
}

NEVER put hardcoded strings in the UI, create a ConsumerWidget and watch $l10n instead

class Example extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final l10n = ref.watch($l10n);
    return Text(l10n.exampleHelloWorld);
  }
}

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.