// the find
felangel/bloc
A predictable state management library that helps implement the BLoC design pattern
felangel/bloc is the canonical BLoC state management library for Flutter and Dart, treating UI state as streams of events mapped to states. It's the de facto standard for production Flutter apps that outgrow setState or simple Provider patterns — if you're building anything with complex async state, auth flows, or cross-widget coordination, this is where most teams land.
The Cubit/Bloc split is genuinely useful: Cubit for simple state that doesn't need event objects, Bloc for complex flows where logging transitions matters. The bloc_concurrency package solves a real problem — droppable(), restartable(), sequential() event transformers handle race conditions that people usually wire up manually and get wrong. hydrated_bloc makes persistence a one-liner (override fromJson/toJson) instead of the boilerplate mess it usually is. The bloc_test package's blocTest() helper makes async state tests readable and deterministic without fighting stream subscriptions.
The event/state class explosion is real — a moderate feature needs 3-5 files before you write any actual logic, and sealed class hierarchies with Freezed make it worse. The BlocObserver pattern is useful for logging but there's no built-in way to replay or time-travel debug state like Redux DevTools offers. Migration between major versions (v7→v8, v8→v9) has historically been breaking and tedious; the migration guide exists but it's not automated. AngularDart support is a dead end — AngularDart itself is effectively unmaintained, so angular_bloc is carrying dead weight in the monorepo.