FL

flutter-bloc-state-management

Standardizes BLoC/Cubit state management, async events, and UI integration in Flutter apps.

Install

mkdir -p .claude/skills/flutter-bloc-state-management && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/16136" && unzip -o skill.zip -d .claude/skills/flutter-bloc-state-management && rm skill.zip

Installs to .claude/skills/flutter-bloc-state-management

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Implement BLoC/Cubit state management correctly in Flutter. Use when writing, modifying, reviewing, or testing any BLoC, Cubit, state, or event file.
149 chars✓ has a “when” trigger
Intermediate

Key capabilities

  • Define events using @freezed
  • Define states using @freezed
  • Implement BLoC to map events to states
  • Connect UI using BlocBuilder for rebuilds
  • Connect UI using BlocListener for side effects
  • Test BLoC with blocTest

How it works

This skill guides the implementation of BLoC/Cubit state management in Flutter by defining events and states, mapping them in BLoC, and connecting to the UI for rendering and side effects.

Inputs & outputs

You give it
User actions or API responses (Events)
You get back
UI states (Initial, Loading, Data, Error) and side effects (navigation, snackbars)

When to use flutter-bloc-state-management

  • Implement BLoC state
  • Handle async UI events
  • Write bloc tests

About this skill

BLoC State Management

Priority: P0 (CRITICAL)

Role: Flutter State Management Expert. Design predictable, testable state flows.

State Design Workflow

  1. Define Events: What happens? (UserTap, ApiSuccess). Use @freezed.
  2. Define States: What needs to show? (Initial, Loading, Data, Error).
  3. Implement BLoC: Map Events to States using on<Event>.
  4. Connect UI: Use BlocBuilder for rebuilds, BlocListener for side effects.

Implementation Guidelines

  • States & Events: Use @freezed for union types (e.g., Initial, Loading, Success, Failure states).
  • Error Handling: Emit Failure states for UI-critical errors. For silent/background events, either let exceptions propagate naturally to global onError interceptor (e.g., in AppBlocObserver), or catch and call addError(e, st) without emitting error state.
  • Async Data: Use emit.forEach for streams or await with emit call.
  • Concurrency: Use transformer: restartable() from bloc_concurrency for search/typeahead to debounce and cancel previous requests.
  • UI Connectivity: Use BlocBuilder for UI rebuilds (e.g., loading spinner, data list, error message) and BlocListener for side effects (navigation, snackbars).
  • Testing: Use blocTest for ALL states and verify sequence of emitted states.

Verification Checklist (Mandatory)

  • Initial State: Defined and tested?
  • Test Coverage: blocTest used for ALL states?
  • UI Logic: No complex calculation in BlocBuilder?
  • Side Effects: Navigation/Snackbars in BlocListener (NOT Builder)?

Anti-Patterns

  • No .then(): Use await or emit.forEach() to emit.
  • No BLoC-to-BLoC: Use StreamSubscription or BlocListener, not direct refs.
  • No Logic in Builder: Move valid logic to BLoC.
  • No BlocBuilder without buildWhen: Heavy subtrees must declare buildWhen predicate to prevent unnecessary rebuilds.

Verification

  • Every BLoC has blocTest covering Initial → Loading → Success and Initial → Loading → Failure.
  • Side effects (navigation, snackbars) use BlocListener, not BlocBuilder.
  • Heavy BlocBuilder widgets declare buildWhen.
  • flutter test passes.

References

Event-handler correction

  • emit() is not a Future: Remove .then() from it, use await for asynchronous work, and register the event with an on<Event> handler.

Canonical response anchors

When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant:

  • Remove

When not to use it

  • For generic widget-only work
  • For complex calculations in BlocBuilder
  • For direct BLoC-to-BLoC communication

Limitations

  • Does not support direct BLoC-to-BLoC communication
  • Complex calculations should not be in BlocBuilder
  • Side effects must use BlocListener, not BlocBuilder

How it compares

This skill provides a structured workflow for BLoC implementation, ensuring predictable and testable state flows, unlike ad-hoc state management approaches.

Compared to similar skills

flutter-bloc-state-management side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
flutter-bloc-state-management (this skill)03moNo flagsIntermediate
flutter134moNo flagsIntermediate
flutter-development1,5555moNo flagsIntermediate
flutter-expert734moNo flagsAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry