con un clic
flutter
// Flutter/Dart best practices with Riverpod, freezed, and feature-based architecture
// Flutter/Dart best practices with Riverpod, freezed, and feature-based architecture
Resume writing, LinkedIn profile optimization, cover letters, and professional bio creation. Use for career content involving ATS optimization, STAR method, action verbs, and personal branding.
Legal research, jurisdiction-aware analysis, regulatory compliance, case evaluation, license auditing, and structured legal findings. Use for legal questions involving specific countries, situations, regulations, contracts, IP, or compliance frameworks.
Validate agent config, instructions, and project setup for common issues
Concise content creation for tech, finance, and leadership blogging
Framework-based content review with scoring, criticism patterns, and quality standards
Run documentation quality checks and link validation guidance
| name | flutter |
| description | Flutter/Dart best practices with Riverpod, freezed, and feature-based architecture |
| license | MIT |
| compatibility | opencode |
| metadata | {"author":"shahboura","version":"2.0.0","audience":"developers","workflow":"development"} |
Use this when working on Flutter/Dart projects with Riverpod state management.
lib/core/, lib/features/<name>/{data,domain,presentation}/, lib/shared/StateNotifierProvider, ConsumerWidget) for app/shared state; use setState for simple local UI statefreezed) for domain/network DTOs; avoid mutable models unless justifiedResult<T> class: Success<T> and Error<T> — never throw across layersStatelessWidget and ConsumerWidget; only use StatefulWidget when absolutely necessaryconst wherever possible — the analyzer will catch missesgo_router for app-scale declarative routing; Navigator APIs are fine for simple/local flowsThemeExtension<T> for custom theme properties — never hardcode colors or spacingResult, not raw exceptionssuper.key in widget constructors (Dart 3+), not Key? key with super(key: key)PascalCase for classes/widgetscamelCase for methods/variablessnake_case.dart for file namesuserProfileProvider, checkoutNotifierProvider)Resultfinal userProvider = FutureProvider<Result<User>>((ref) async {
try {
final user = await ref.read(apiClientProvider).getUser();
return Result.success(user);
} catch (e) {
return Result.error('Failed to load user: $e');
}
});
// Result<T> is an app-defined sealed type used for cross-layer error handling.
Prefer project scripts when present; use defaults below otherwise.
flutter analyze
flutter test
flutter test --coverage
dart format --set-exit-if-changed .