Flutter error handling
Skill ComeOnOliver/skillshub/skills/HoangNguyen0403/agent-skills-standard/flutter-error-handling
Functional error handling with Either/Failure. ALWAYS consult when writing repositories, handling exceptions, defining failures, or using Either in any Flutter layer — not just when setting up error handling. (triggers: lib/domain/**, lib/infrastructure/**, Either, fold, Left, Right, Failure, dartz)From its SKILL.md
npx -y skills add ComeOnOliver/skillshub --skill flutter-error-handlingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
2.2 KB, 459 tokens by cl100k_base, as published. Nobody here has run it
Error Handling
Priority: P1 (HIGH)
Standardized functional error handling using dartz and freezed failures.
Implementation Guidelines
- Either Pattern: Return Either<Failure, T> from repositories. No exceptions in UI/BLoC.
- Failures: Define domain-specific failures using @freezed unions (e.g.,
UnauthorizedFailure,OutOfStockFailure). - Mapping: Infrastructure catches Exception (e.g.,
DioException) and returns Left(Failure). Never rethrow to UI. - Consumption: Use .fold(failure, success) in BLoC to emit corresponding states. Remove try/catch from BLoC.
- Typed Errors: Use
left(Failure())andright(Value())fromDartz. - Low-Cardinality Logging: Use stable message templates; pass variable data via metadata/context.
- Layer Restriction: try/catch only in Infrastructure. UI/Application/BLoC layers should not catch.
- Localization: Use
failure.failureMessage(returns TRObject or localized string) for UI-safe text. - Right/Left Restriction: Only Infrastructure may construct
Right()/Left(). - No Silent Catch: Never swallow errors without logging or a documented retry.
Reference & Examples
For Failure definitions and API error mapping: See references/REFERENCE.md.
Anti-Patterns
- ❌
try { … } catch (e) { emit(ErrorState()); }in BLoC — try/catch belongs only in Infrastructure; BLoC receivesEither, then folds - ❌
Left(Failure('Something went wrong'))using a plainString— define typed@freezedFailure subclasses for each domain error - ❌
catch (e) {}empty catch — always log and propagate; never swallow silently - ❌ Throwing
Exceptionfrom a repository — returnLeft(Failure)instead; exceptions must not cross the infrastructure boundary
Related Topics
layer-based-clean-architecture | bloc-state-management
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.