bloc
A predictable state management library that helps implement the BLoC (Business Logic Component) design pattern.
9.2.1
1000K downloads/mo
#34 most downloaded on pub.dev
felangel/bloc
What this package is like to depend on
Last release 3 months ago
12 May 2026
Ships fairly regularly
a new release about every 4 months
Nearly every release is documented
notes for 84 of 84 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
115 releases · first in 2018
4 releases in the last 12 months
see the full history below
Release timeline
115 releases · Oct 2018 to May 2026
2019
2020
2021
2022
2023
2024
2025
2026
Releases
latest 60 of 115-
9.2.112 May 2026 -
9.2.001 Jan 2026Release notes
Open source → -
9.1.014 Oct 2025 -
9.0.126 Sep 2025 -
9.0.012 Jan 2025 -
8.1.424 Mar 2024Release notes
Open source →- docs: improve diagrams
- chore: update copyright year
- chore: update sponsors
-
8.1.312 Feb 2024 -
8.1.220 May 2023 -
8.1.105 Feb 2023 -
8.1.006 Aug 2022 -
8.0.328 Feb 2022 -
8.0.229 Dec 2021 -
8.0.119 Nov 2021 -
8.0.018 Nov 2021Release notes
Open source →- BREAKING: feat: introduce
BlocOverridesAPI (#2932)Bloc.observerremoved in favor ofBlocOverrides.runZonedandBlocOverrides.current.blocObserverBloc.transformerremoved in favor ofBlocOverrides.runZonedandBlocOverrides.current.eventTransformer
- BREAKING: refactor: make
BlocObserveran abstract class - BREAKING: feat:
addthrowsStateErrorwhen bloc is closed (#2912) - BREAKING: feat:
emitthrowsStateErrorwhen bloc is closed (#2913) - BREAKING: feat: improve error handling/reporting
BlocUnhandledErrorExceptionis removed- Uncaught exceptions are always reported to
onErrorand rethrown addErrorreports error toonErrorbut does not propagate as an uncaught exception
- BREAKING: feat: restrict scope of
emitinBlocandCubit- In
Cubit,emitisprotectedso it can only be used within theCubitinstance. - In
Bloc,emitisinternalso it cannot be used outside of the internal package implementation.
- In
- BREAKING: refactor: remove deprecated
TransitionFunction - BREAKING: refactor: remove deprecated
transformEvents - BREAKING: refactor: remove deprecated
mapEventToState - BREAKING: refactor: remove deprecated
transformTransitions - BREAKING: refactor: remove deprecated
listenonBlocBase - feat: throw
StateErrorif an event is added without a registered event handler
- BREAKING: feat: introduce
-
8.0.0-dev.514 Nov 2021 pre-releaseRelease notes
Open source →- BREAKING: feat: introduce
BlocOverridesAPI (#2932)Bloc.observerremoved in favor ofBlocOverrides.runZonedandBlocOverrides.current.blocObserverBloc.transformerremoved in favor ofBlocOverrides.runZonedandBlocOverrides.current.eventTransformer
- BREAKING: refactor: make
BlocObserveran abstract class - BREAKING: feat:
addthrowsStateErrorwhen bloc is closed (#2912) - BREAKING: feat:
emitthrowsStateErrorwhen bloc is closed (#2913)
- BREAKING: feat: introduce
-
8.0.0-dev.430 Oct 2021 pre-releaseRelease notes
Open source →- BREAKING: feat: improve error handling/reporting
BlocUnhandledErrorExceptionis removed- Uncaught exceptions are always reported to
onErrorand rethrown addErrorreports error toonErrorbut does not propagate as an uncaught exception
- BREAKING: feat: improve error handling/reporting
-
8.0.0-dev.313 Oct 2021 pre-releaseRelease notes
Open source →- BREAKING: feat: restrict scope of
emitinBlocandCubit- In
Cubit,emitisprotectedso it can only be used within theCubitinstance. - In
Bloc,emitisinternalso it cannot be used outside of the internal package implementation.
- In
- BREAKING: feat: restrict scope of
-
8.0.0-dev.229 Sep 2021 pre-release -
8.0.0-dev.129 Sep 2021 pre-releaseRelease notes
Open source →- BREAKING: refactor: remove deprecated
TransitionFunction - BREAKING: refactor: remove deprecated
transformEvents - BREAKING: refactor: remove deprecated
mapEventToState - BREAKING: refactor: remove deprecated
transformTransitions - feat: throw
StateErrorif an event is added without a registered event handler
- BREAKING: refactor: remove deprecated
-
7.2.126 Sep 2021Release notes
Open source →- fix:
on<E extends Event>should have anEventTransformer<E>instead ofEventTransformer<Event>
- fix:
-
7.2.021 Sep 2021Release notes
Open source →- feat: introduce
on<Event>API to register event handlers- by default events are processed concurrently
- feat: introduce
Bloc.transformerAPI to configure the defaultEventTransformer - feat: introduce
Emitter<State>to trigger state changescallto trigger a state change (alignment withCubit)forEachas an analogue forawait foronEachto simplify subscription managementisDoneto abort expensive async operations
- feat: throw
StateErrorifmapEventToStateis used in conjunction withon<Event> - feat: throw
StateErrorif duplicate event handlers are registered - feat: throw
AssertionErrorwhenemitis called in a completedEventHandler - feat: throw
AssertionErrorwhenemit.onEachandemit.forEachare unawaited - DEPRECATE: fix:
mapEventToStatedeprecated in favor ofon<Event> - DEPRECATE: fix:
transformEventsdeprecated in favor ofEventTransformer- use a built in
EventTransformeror define your own
- use a built in
- DEPRECATE: fix:
transformTransitionsdeprecated- override
Stream<State> get streamto modify the outbound stream
- override
- feat: introduce
-
7.2.0-dev.310 Sep 2021 pre-releaseRelease notes
Open source →- BREAKING: refactor: require
emit.forEachonDatato be synchronous - refactor: minor internal optimizations in
on<Event>implementation
- BREAKING: refactor: require
-
7.2.0-dev.209 Sep 2021 pre-releaseRelease notes
Open source →- BREAKING: refactor!: make
onDatacallback inemit.onEachandemit.forEachnamed - BREAKING: feat!: rename
emit.isCanceledtoemit.isDoneto encapsulate completion and cancelation - feat: introduce optional
onErrorinemit.onEachandemit.forEach - feat: throw
AssertionErrorwhenemitis called in a completedEventHandler - feat: throw
AssertionErrorwhenemit.onEachandemit.forEachare unawaited - fix:
emit.onEachandemit.forEacherror propagation when stream emits an error
- BREAKING: refactor!: make
-
7.2.0-dev.102 Sep 2021 pre-releaseRelease notes
Open source →- feat: introduce
on<Event>API to register event handlers- by default events are processed concurrently
- feat: introduce
Bloc.transformerAPI to configure the defaultEventTransformer - feat: introduce
Emitter<State>to trigger state changescallto trigger a state change (alignment withCubit)forEachas an analogue forawait foronEachto simplify subscription managementisCanceledto abort expensive async operations
- feat: throw
StateErrorifmapEventToStateis used in conjunction withon<Event> - feat: throw
StateErrorif duplicate event handlers are registered - DEPRECATE: fix:
mapEventToStatedeprecated in favor ofon<Event> - DEPRECATE: fix:
transformEventsdeprecated in favor ofEventTransformer- use a built in
EventTransformeror define your own
- use a built in
- DEPRECATE: fix:
transformTransitionsdeprecated- override
Stream<State> get streamto modify the outbound stream
- override
- feat: introduce
-
7.1.017 Aug 2021Release notes
Open source →- feat: expose
isClosedgetter onBlocBase - refactor: simplify internal event controller initialization
- docs: update
onChangedescription in README - docs: update GetStream sponsorship urls
- feat: expose
-
7.0.018 Mar 2021Release notes
Open source →- BREAKING: refactor:
BlocandCubitextendBlocBase- refactor:
void onError(Cubit cubit, Object error, StackTrace stackTrace)->void onError(BlocBase bloc, Object error, StackTrace stackTrace) - refactor:
void onCreate(Cubit cubit)->void onCreate(BlocBase bloc) - refactor:
void onClose(Cubit cubit)->void onClose(BlocBase bloc)
- refactor:
- BREAKING: refactor:
BlocandCubitdo not extendStreamand implementSink- refactor: use
bloc.streamorcubit.streamto accessStream<State>myBloc.map(...)->myBloc.stream.map(...)
- refactor: deprecate
bloc.listenin favor ofbloc.stream.listen
- refactor: use
- BREAKING: refactor:
CubitUnhandledErrorException->BlocUnhandledErrorException - BREAKING: opt into null safety
- feat!: upgrade Dart SDK constraints to
>=2.12.0-0 <3.0.0
- feat!: upgrade Dart SDK constraints to
- fix:
transformEventsmultiple subscriptions issue - test: improve testing for advanced
transformEventsbehavior - chore: bump to
meta: ^1.3.0
- BREAKING: refactor:
-
7.0.0-nullsafety.417 Mar 2021 pre-releaseRelease notes
Open source →- BREAKING: refactor:
BlocandCubitextendBlocBase- refactor:
void onError(Bloc bloc, Object error, StackTrace stackTrace)->void onError(BlocBase bloc, Object error, StackTrace stackTrace) - refactor:
void onCreate(Bloc bloc)->void onCreate(BlocBase bloc) - refactor:
void onClose(Bloc bloc)->void onClose(BlocBase bloc)
- refactor:
- BREAKING: refactor:
BlocandCubitdo not extendStreamand implementSink- refactor: use
bloc.streamorcubit.streamto accessStream<State>myBloc.map(...)->myBloc.stream.map(...)
- refactor: deprecate
bloc.listenin favor ofbloc.stream.listen
- refactor: use
- BREAKING: revert: refactor:
ChangeandonChangeremoved in favor ofTransitionandonTransition
- BREAKING: refactor:
-
7.0.0-nullsafety.303 Mar 2021 pre-releaseRelease notes
Open source →- fix:
transformEventsmultiple subscriptions issue - test: improve testing for advanced
transformEventsbehavior
- fix:
-
7.0.0-nullsafety.211 Feb 2021 pre-release -
7.0.0-nullsafety.118 Jan 2021 pre-releaseRelease notes
Open source →- BREAKING: refactor:
CubitextendsBloc- refactor:
ChangeandonChangeremoved in favor ofTransitionandonTransition - refactor:
void onError(Cubit cubit, Object error, StackTrace stackTrace)->void onError(Bloc bloc, Object error, StackTrace stackTrace) - refactor:
void onCreate(Cubit cubit)->void onCreate(Bloc bloc) - refactor:
void onClose(Cubit cubit)->void onClose(Bloc bloc) - refactor:
CubitUnhandledErrorException->BlocUnhandledErrorException
- refactor:
- BREAKING: refactor:
-
7.0.0-nullsafety.022 Nov 2020 pre-releaseRelease notes
Open source →- BREAKING: opt into null safety
- feat!: upgrade Dart SDK constraints to
>=2.12.0-0 <3.0.0
-
6.1.303 Mar 2021 -
6.1.203 Mar 2021Release notes
Open source →- fix: bloc memory leak due to internal event stream being a broadcast stream
-
6.1.109 Dec 2020 -
6.1.016 Oct 2020 -
6.0.303 Sep 2020 -
6.0.215 Aug 2020 -
6.0.122 Jul 2020 -
6.0.022 Jul 2020Release notes
Open source →- BREAKING: do not emit current state on subscription
- BREAKING:
onErrorinBlocObservertakes aCubitas first parameter - BREAKING: allow blocs and cubits to emit the initial state
- feat: include
cubitand remove external dependency on package:cubit- exports class
Cubit - exports class
Change(TransitionforCubit)
- exports class
- feat:
onChangeadded toBlocObserver - refactor: apply additional lint rules
- fix: add
@visibleForTestingtoemiton classCubit - docs: fix inline documentation references
-
6.0.0-dev.220 Jul 2020 pre-release -
6.0.0-dev.113 Jul 2020 pre-releaseRelease notes
Open source →- BREAKING: do not emit current state on subscription
- BREAKING:
onErrorinBlocObservertakes aCubitas first parameter - BREAKING: allow blocs and cubits to emit the initial state
- feat: include
cubitand remove external dependency on package:cubit- exports class
Cubit - exports class
Change(TransitionforCubit)
- exports class
- feat:
onChangeadded toBlocObserver - refactor: apply additional lint rules
- docs: fix inline documentation references
-
5.0.106 Jul 2020 -
5.0.002 Jul 2020Release notes
Open source →- BREAKING: remove
initialStateoverride in favor of providing the initial state via super (#1304). - BREAKING: Remove
BlocSupervisorand renameBlocDelegatetoBlocObserver. - feat: support
nullstates (#1312). - refactor: bloc to extend cubit rather than
Stream. - feat: ignore newly added events after bloc is closed (#1236).
- feat: add
addErrorto conform toEventSinkinterface. - feat: mark
onError,onTransition,onEventasprotected. - docs: documentation improvements
- docs: logo updates
- BREAKING: remove
-
5.0.0-dev.1130 Jun 2020 pre-releaseRelease notes
Open source →- feat: add
addErrorto conform toEventSinkinterface. - feat: mark
onError,onTransition,onEventasprotected.
- feat: add
-
5.0.0-dev.1028 Jun 2020 pre-release -
5.0.0-dev.928 Jun 2020 pre-release -
5.0.0-dev.828 Jun 2020 pre-releaseRelease notes
Open source →- BREAKING: Remove
BlocSupervisorand renameBlocDelegatetoBlocObserver.
- BREAKING: Remove
-
5.0.0-dev.724 Jun 2020 pre-release -
5.0.0-dev.624 Jun 2020 pre-release -
5.0.0-dev.524 Jun 2020 pre-release -
5.0.0-dev.424 Jun 2020 pre-release -
5.0.0-dev.323 Jun 2020 pre-release -
5.0.0-dev.222 Jun 2020 pre-releaseRelease notes
Open source →- BREAKING: update
initialStateto be a required positional parameter (related issue).
- BREAKING: update
-
5.0.0-dev.121 Jun 2020 pre-release -
4.0.021 Apr 2020 -
4.0.0-dev.420 Apr 2020 pre-releaseRelease notes
Open source →- Surface Unhandled Bloc Errors in Debug Mode
- Internal testing improvements
-
4.0.0-dev.319 Apr 2020 pre-release -
4.0.0-dev.215 Apr 2020 pre-release -
4.0.0-dev.105 Apr 2020 pre-release -
3.0.025 Dec 2019