PackageTrack
Sign in Get early access

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
Release Pre-release

Releases

latest 60 of 115
  1. 9.2.1 12 May 2026
    Release notes
    • fix: isClosed should incorporate event controller state (#4809)
    Open source →
    Release notes
    • fix: isClosed should incorporate event controller state (#4809)
    Open source →
  2. 9.2.0 01 Jan 2026
    Release notes
    • feat: add MultiBlocObserver (#4714)
    • docs: minor README.md improvements (#4657)
    Open source →
  3. 9.1.0 14 Oct 2025
    Release notes
    • docs: add onDone to README and example (#4641)
    • feat: add onDone callback (#4633)
    • refactor: add pkg:bloc_lint (#4620)
    Open source →
  4. 9.0.1 26 Sep 2025
    Release notes
    • refactor: analysis options updates (#4616)
    • docs: update build status badge (#4502)
    • docs: update sponsors (#4418)
    • docs: update minimum Dart SDK version in README.md
    Open source →
  5. 9.0.0 12 Jan 2025
    Release notes
    • BREAKING refactor!: introduce EmittableStateStreamableSource (#4311)
      • BlocBase<State> implements EmittableStateStreamableSource<State>
    • BREAKING refactor!: remove deprecated BlocOverrides (#4137)
    • refactor: use Object.hashAll internally (#4310)
      • bumps minimum Dart SDK to 2.14
    • chore: update sponsors
    Open source →
  6. 8.1.4 24 Mar 2024
    Release notes
    • docs: improve diagrams
    • chore: update copyright year
    • chore: update sponsors
    Open source →
  7. 8.1.3 12 Feb 2024
    Release notes
    • chore: update sponsors (#4054)
    • chore: fix require_trailing_commas (#3977)
    • chore(deps): upgrade to package:mocktail v1.0.0 (#3919)
    • chore: add topics to pubspec.yaml (#3914)
    Open source →
  8. 8.1.2 20 May 2023
    Release notes
    • docs: upgrade README snippets to Dart 3 (#3826)
    • refactor: standardize analysis options and resolve warnings (#3826)
    • docs: remove superfluous word from inline docs (#3734)
    Open source →
  9. 8.1.1 05 Feb 2023
    Release notes
    • chore: add screenshots to pubspec.yaml (#3708)
    • refactor: const constructor support for BlocObserver (#3704)
    • refactor: upgrade to Dart 2.19 (#3699)
      • remove deprecated invariant_booleans lint rule
    Open source →
  10. 8.1.0 06 Aug 2022
    Release notes
    • feat: reintroduce Bloc.observer and Bloc.transformer (#3469)
      • deprecate: BlocOverrides
    • fix: remove unnecessary async from Emitter.onEach (#3392)
    • chore: upgrade to mocktail ^0.3.0 (#3477)
    Open source →
  11. 8.0.3 28 Feb 2022
    Release notes
    • refactor: resolve analysis warnings (#3189)
    • docs: fix inline doc comment (#3167)
    • docs: update GetStream utm tags (#3136)
    • docs: update VGV sponsors logo (#3125)
    Open source →
  12. 8.0.2 29 Dec 2021
    Release notes
    • fix: make onChange and addError protected (#3071)
    • refactor: use late keyword for internal state controller (#3100)
    • refactor: add isClosed to Closable (#3066)
    • refactor: add core interfaces (#3012)
    • refactor: internal reorganization (#3011)
    • docs: update example to follow naming conventions (#3029)
    Open source →
  13. 8.0.1 19 Nov 2021
    Release notes
    • fix: allow emit usage within tests (#2982)
    Open source →
  14. 8.0.0 18 Nov 2021
    Release notes
    • BREAKING: feat: introduce BlocOverrides API (#2932)
      • Bloc.observer removed in favor of BlocOverrides.runZoned and BlocOverrides.current.blocObserver
      • Bloc.transformer removed in favor of BlocOverrides.runZoned and BlocOverrides.current.eventTransformer
    • BREAKING: refactor: make BlocObserver an abstract class
    • BREAKING: feat: add throws StateError when bloc is closed (#2912)
    • BREAKING: feat: emit throws StateError when bloc is closed (#2913)
    • BREAKING: feat: improve error handling/reporting
      • BlocUnhandledErrorException is removed
      • Uncaught exceptions are always reported to onError and rethrown
      • addError reports error to onError but does not propagate as an uncaught exception
    • BREAKING: feat: restrict scope of emit in Bloc and Cubit
      • In Cubit, emit is protected so it can only be used within the Cubit instance.
      • In Bloc, emit is internal so it cannot be used outside of the internal package implementation.
    • BREAKING: refactor: remove deprecated TransitionFunction
    • BREAKING: refactor: remove deprecated transformEvents
    • BREAKING: refactor: remove deprecated mapEventToState
    • BREAKING: refactor: remove deprecated transformTransitions
    • BREAKING: refactor: remove deprecated listen on BlocBase
    • feat: throw StateError if an event is added without a registered event handler
    Open source →
  15. 8.0.0-dev.5 14 Nov 2021 pre-release
    Release notes
    • BREAKING: feat: introduce BlocOverrides API (#2932)
      • Bloc.observer removed in favor of BlocOverrides.runZoned and BlocOverrides.current.blocObserver
      • Bloc.transformer removed in favor of BlocOverrides.runZoned and BlocOverrides.current.eventTransformer
    • BREAKING: refactor: make BlocObserver an abstract class
    • BREAKING: feat: add throws StateError when bloc is closed (#2912)
    • BREAKING: feat: emit throws StateError when bloc is closed (#2913)
    Open source →
  16. 8.0.0-dev.4 30 Oct 2021 pre-release
    Release notes
    • BREAKING: feat: improve error handling/reporting
      • BlocUnhandledErrorException is removed
      • Uncaught exceptions are always reported to onError and rethrown
      • addError reports error to onError but does not propagate as an uncaught exception
    Open source →
  17. 8.0.0-dev.3 13 Oct 2021 pre-release
    Release notes
    • BREAKING: feat: restrict scope of emit in Bloc and Cubit
      • In Cubit, emit is protected so it can only be used within the Cubit instance.
      • In Bloc, emit is internal so it cannot be used outside of the internal package implementation.
    Open source →
  18. 8.0.0-dev.2 29 Sep 2021 pre-release
    Release notes
    • BREAKING: refactor: remove deprecated listen on BlocBase
    Open source →
  19. 8.0.0-dev.1 29 Sep 2021 pre-release
    Release notes
    • BREAKING: refactor: remove deprecated TransitionFunction
    • BREAKING: refactor: remove deprecated transformEvents
    • BREAKING: refactor: remove deprecated mapEventToState
    • BREAKING: refactor: remove deprecated transformTransitions
    • feat: throw StateError if an event is added without a registered event handler
    Open source →
  20. 7.2.1 26 Sep 2021
    Release notes
    • fix: on<E extends Event> should have an EventTransformer<E> instead of EventTransformer<Event>
    Open source →
  21. 7.2.0 21 Sep 2021
    Release notes
    • feat: introduce on<Event> API to register event handlers
      • by default events are processed concurrently
    • feat: introduce Bloc.transformer API to configure the default EventTransformer
    • feat: introduce Emitter<State> to trigger state changes
      • call to trigger a state change (alignment with Cubit)
      • forEach as an analogue for await for
      • onEach to simplify subscription management
      • isDone to abort expensive async operations
    • feat: throw StateError if mapEventToState is used in conjunction with on<Event>
    • feat: throw StateError if duplicate event handlers are registered
    • feat: throw AssertionError when emit is called in a completed EventHandler
    • feat: throw AssertionError when emit.onEach and emit.forEach are unawaited
    • DEPRECATE: fix: mapEventToState deprecated in favor of on<Event>
    • DEPRECATE: fix: transformEvents deprecated in favor of EventTransformer
      • use a built in EventTransformer or define your own
    • DEPRECATE: fix: transformTransitions deprecated
      • override Stream<State> get stream to modify the outbound stream
    Open source →
  22. 7.2.0-dev.3 10 Sep 2021 pre-release
    Release notes
    • BREAKING: refactor: require emit.forEach onData to be synchronous
    • refactor: minor internal optimizations in on<Event> implementation
    Open source →
  23. 7.2.0-dev.2 09 Sep 2021 pre-release
    Release notes
    • BREAKING: refactor!: make onData callback in emit.onEach and emit.forEach named
    • BREAKING: feat!: rename emit.isCanceled to emit.isDone to encapsulate completion and cancelation
    • feat: introduce optional onError in emit.onEach and emit.forEach
    • feat: throw AssertionError when emit is called in a completed EventHandler
    • feat: throw AssertionError when emit.onEach and emit.forEach are unawaited
    • fix: emit.onEach and emit.forEach error propagation when stream emits an error
    Open source →
  24. 7.2.0-dev.1 02 Sep 2021 pre-release
    Release notes
    • feat: introduce on<Event> API to register event handlers
      • by default events are processed concurrently
    • feat: introduce Bloc.transformer API to configure the default EventTransformer
    • feat: introduce Emitter<State> to trigger state changes
      • call to trigger a state change (alignment with Cubit)
      • forEach as an analogue for await for
      • onEach to simplify subscription management
      • isCanceled to abort expensive async operations
    • feat: throw StateError if mapEventToState is used in conjunction with on<Event>
    • feat: throw StateError if duplicate event handlers are registered
    • DEPRECATE: fix: mapEventToState deprecated in favor of on<Event>
    • DEPRECATE: fix: transformEvents deprecated in favor of EventTransformer
      • use a built in EventTransformer or define your own
    • DEPRECATE: fix: transformTransitions deprecated
      • override Stream<State> get stream to modify the outbound stream
    Open source →
  25. 7.1.0 17 Aug 2021
    Release notes
    • feat: expose isClosed getter on BlocBase
    • refactor: simplify internal event controller initialization
    • docs: update onChange description in README
    • docs: update GetStream sponsorship urls
    Open source →
  26. 7.0.0 18 Mar 2021
    Release notes
    • BREAKING: refactor: Bloc and Cubit extend BlocBase
      • 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)
    • BREAKING: refactor: Bloc and Cubit do not extend Stream and implement Sink
      • refactor: use bloc.stream or cubit.stream to access Stream<State>
        • myBloc.map(...) -> myBloc.stream.map(...)
      • refactor: deprecate bloc.listen in favor of bloc.stream.listen
    • BREAKING: refactor: CubitUnhandledErrorException -> BlocUnhandledErrorException
    • BREAKING: opt into null safety
      • feat!: upgrade Dart SDK constraints to >=2.12.0-0 <3.0.0
    • fix: transformEvents multiple subscriptions issue
    • test: improve testing for advanced transformEvents behavior
    • chore: bump to meta: ^1.3.0
    Open source →
  27. 7.0.0-nullsafety.4 17 Mar 2021 pre-release
    Release notes
    • BREAKING: refactor: Bloc and Cubit extend BlocBase
      • 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)
    • BREAKING: refactor: Bloc and Cubit do not extend Stream and implement Sink
      • refactor: use bloc.stream or cubit.stream to access Stream<State>
        • myBloc.map(...) -> myBloc.stream.map(...)
      • refactor: deprecate bloc.listen in favor of bloc.stream.listen
    • BREAKING: revert: refactor: Change and onChange removed in favor of Transition and onTransition
    Open source →
  28. 7.0.0-nullsafety.3 03 Mar 2021 pre-release
    Release notes
    • fix: transformEvents multiple subscriptions issue
    • test: improve testing for advanced transformEvents behavior
    Open source →
  29. 7.0.0-nullsafety.2 11 Feb 2021 pre-release
    Release notes
    • chore: bump to meta: ^1.3.0
    Open source →
  30. 7.0.0-nullsafety.1 18 Jan 2021 pre-release
    Release notes
    • BREAKING: refactor: Cubit extends Bloc
      • refactor: Change and onChange removed in favor of Transition and onTransition
      • 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
    Open source →
  31. 7.0.0-nullsafety.0 22 Nov 2020 pre-release
    Release notes
    • BREAKING: opt into null safety
    • feat!: upgrade Dart SDK constraints to >=2.12.0-0 <3.0.0
    Open source →
  32. 6.1.3 03 Mar 2021
    Release notes
    • fix: transformEvents multiple subscriptions issue due to v6.1.2
    Open source →
  33. 6.1.2 03 Mar 2021
    Release notes
    • fix: bloc memory leak due to internal event stream being a broadcast stream
    Open source →
  34. 6.1.1 09 Dec 2020
    Release notes
    • fix: close should always emit done
    Open source →
  35. 6.1.0 16 Oct 2020
    Release notes
    • feat: add onCreate and onClose to BlocObserver
    Open source →
  36. 6.0.3 03 Sep 2020
    Release notes
    • docs: README updates to include flow diagrams for Bloc and Cubit.
    Open source →
  37. 6.0.2 15 Aug 2020
    Release notes
    • refactor: cubit internal memory and performance optimizations
    Open source →
  38. 6.0.1 22 Jul 2020
    Release notes
    • docs: minor documentation fixes and improvements
    Open source →
  39. 6.0.0 22 Jul 2020
    Release notes
    • BREAKING: do not emit current state on subscription
    • BREAKING: onError in BlocObserver takes a Cubit as first parameter
    • BREAKING: allow blocs and cubits to emit the initial state
    • feat: include cubit and remove external dependency on package:cubit
      • exports class Cubit
      • exports class Change (Transition for Cubit)
    • feat: onChange added to BlocObserver
    • refactor: apply additional lint rules
    • fix: add @visibleForTesting to emit on class Cubit
    • docs: fix inline documentation references
    Open source →
  40. 6.0.0-dev.2 20 Jul 2020 pre-release
    Release notes
    • fix: add @visibleForTesting to emit on class Cubit
    Open source →
  41. 6.0.0-dev.1 13 Jul 2020 pre-release
    Release notes
    • BREAKING: do not emit current state on subscription
    • BREAKING: onError in BlocObserver takes a Cubit as first parameter
    • BREAKING: allow blocs and cubits to emit the initial state
    • feat: include cubit and remove external dependency on package:cubit
      • exports class Cubit
      • exports class Change (Transition for Cubit)
    • feat: onChange added to BlocObserver
    • refactor: apply additional lint rules
    • docs: fix inline documentation references
    Open source →
  42. 5.0.1 06 Jul 2020
    Release notes
    • fix: upgrade to cubit ^0.1.2
    • docs: minor documentation updates
    Open source →
  43. 5.0.0 02 Jul 2020
    Release notes
    • BREAKING: remove initialState override in favor of providing the initial state via super (#1304).
    • BREAKING: Remove BlocSupervisor and rename BlocDelegate to BlocObserver.
    • feat: support null states (#1312).
    • refactor: bloc to extend cubit rather than Stream.
    • feat: ignore newly added events after bloc is closed (#1236).
    • feat: add addError to conform to EventSink interface.
    • feat: mark onError, onTransition, onEvent as protected.
    • docs: documentation improvements
    • docs: logo updates
    Open source →
  44. 5.0.0-dev.11 30 Jun 2020 pre-release
    Release notes
    • feat: add addError to conform to EventSink interface.
    • feat: mark onError, onTransition, onEvent as protected.
    Open source →
  45. 5.0.0-dev.10 28 Jun 2020 pre-release
    Release notes
    • docs: additional minor improvement to bloc logo alignment
    Open source →
  46. 5.0.0-dev.9 28 Jun 2020 pre-release
    Release notes
    • docs: minor improvement to bloc logo alignment
    Open source →
  47. 5.0.0-dev.8 28 Jun 2020 pre-release
    Release notes
    • BREAKING: Remove BlocSupervisor and rename BlocDelegate to BlocObserver.
    Open source →
  48. 5.0.0-dev.7 24 Jun 2020 pre-release
    Release notes
    • Ignore newly added events after bloc is closed (#1236).
    Open source →
  49. 5.0.0-dev.6 24 Jun 2020 pre-release
    Release notes
    • Additional documentation optimizations.
    Open source →
  50. 5.0.0-dev.5 24 Jun 2020 pre-release
    Release notes
    • Optimize documentation assets for smaller viewports.
    Open source →
  51. 5.0.0-dev.4 24 Jun 2020 pre-release
    Release notes
    • Update to cubit ^0.0.13
    • Update documentation and static assets.
    Open source →
  52. 5.0.0-dev.3 23 Jun 2020 pre-release
    Release notes
    • Update documentation and static assets.
    Open source →
  53. 5.0.0-dev.2 22 Jun 2020 pre-release
    Release notes
    • BREAKING: update initialState to be a required positional parameter (related issue).
    Open source →
  54. 5.0.0-dev.1 21 Jun 2020 pre-release
    Release notes
    • BREAKING: remove initialState override in favor of providing the initial state via super (#1304).
    • feat: support null states (#1312).
    • refactor: bloc to extend cubit rather than Stream.
    Open source →
  55. 4.0.0 21 Apr 2020
    Release notes
    • Remove rxdart dependency (#821)
    • Replace transformStates with transformTransitions (#840)
    • Fix null stackTrace in onError (#963)
    • Fix remove duplicate terminating state
    • Add mustCallSuper to onEvent, onTransition, and onError
    • Surface Unhandled Bloc Errors in Debug Mode
    • Internal testing improvements
    Open source →
  56. 4.0.0-dev.4 20 Apr 2020 pre-release
    Release notes
    • Surface Unhandled Bloc Errors in Debug Mode
    • Internal testing improvements
    Open source →
  57. 4.0.0-dev.3 19 Apr 2020 pre-release
    Release notes
    • Add mustCallSuper to onEvent, onTransition, and onError
    Open source →
  58. 4.0.0-dev.2 15 Apr 2020 pre-release
    Release notes
    • Fix remove duplicate terminating state
    Open source →
  59. 4.0.0-dev.1 05 Apr 2020 pre-release
    Release notes
    • Remove rxdart dependency (#821)
    • Replace transformStates with transformTransitions (#840)
    • Fix null stackTrace in onError (#963)
    Open source →
  60. 3.0.0 25 Dec 2019
    Release notes
    • Upgrade to rxdart ^0.23.0
    • Upgrade to Dart >= 2.6.0
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive