PackageTrack
Sign in Get early access

flutter_modular

Smart project structure with dependency injection and route management for Flutter.

7.1.0 81K downloads/mo #1211 most downloaded on pub.dev Flutterando/modular

What this package is like to depend on

Last release 2 months ago

24 Jun 2026

Ships unpredictably

gaps range from 8 days to 13 months

Rarely documented

notes for 11 of 147 stable releases

Nothing withdrawn

no release was ever pulled

7 years old

261 releases · first in 2019

5 releases in the last 12 months

see the full history below

Release timeline

261 releases · Dec 2019 to Jun 2026
2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 60 of 261
  1. 7.1.0 24 Jun 2026
    Release notes

    Feature modules can now consume shared/core dependencies

    A feature module's module-level bind (addSingleton, add, addLazySingleton) now resolves dependencies registered in a root-owned shared/core module (a path-less module(...)). Previously only page-scoped provide binds could reach the core; a feature's module-level binds ran in a leaf injector blind to root-owned binds, forcing shared deps to be threaded in by hand.

    A core consumer can now be a provide, the core itself, or a feature module-level bind — all alike. A feature's own bind still shadows a same-typed core bind (local wins; core is the fallback).

    Requires auto_injector >= 2.2.0

    Adds the opt-in upward resolution (addInjector(child, resolveUpward: true)) this builds on, fixes a dispose-listener accumulation in its layer graph, and adds an UpwardResolutionCycle guard against mutual upward links.

    Docs

    New dependency-injection.md sections: cross-module resolution and the async bootstrap idiom (await once in a Future<Module> builder so main stays thin and features take no parameters).

    Full changelog: https://pub.dev/packages/flutter_modular/versions/7.1.0/changelog

    Open source →
    Release notes
    • Feature modules can now consume shared/core dependencies directly. A module-level bind inside a feature (a module with a path) — addSingleton, add, addLazySingleton — now resolves dependencies registered in a root-owned shared module (a path-less module(...), the "core"). Previously only page-scoped provide binds could reach the core; a feature's module-level binds ran in a leaf injector that couldn't see root-owned binds, forcing shared deps to be threaded in by hand. This removes that asymmetry: a core consumer can be a provide, the core itself, OR a feature module-level bind — all alike. A feature's own bind still shadows a same-typed core bind (local wins; core is the fallback).
    • Requires auto_injector >= 2.2.0, which adds the opt-in upward resolution (addInjector(child, resolveUpward: true)) this builds on, fixes a dispose-listener accumulation in its layer graph, and adds an UpwardResolutionCycle guard against mutual upward links.
    Open source →
  2. 7.0.3 23 Jun 2026
    Release notes
    • Customizable route transitions. route(transition:) and the new app-wide ModularApp(defaultTransition:) now accept any PageTransition, an open contract that builds the route's Page. Three ways to supply one:
      • the TransitionType presets (material, fade, none) — each value now is a PageTransition, so existing transition: TransitionType.fade keeps working;
      • CustomTransition — the inline convenience: pass a transitionsBuilder (same signature as PageRouteBuilder) and optionally tune duration/reverseDuration/opaque/barrierColor/ barrierDismissible/fullscreenDialog; Modular still owns the Page;
      • implement PageTransition yourself for full control of the Page (e.g. a CupertinoPage with swipe-back, a fullscreenDialog, shared-axis from the animations package).
    • App-wide default. ModularApp.defaultTransition (default TransitionType.material) applies to every route that doesn't declare its own. Precedence: route-local → app default → material. route(transition:) now defaults to null (inherit the app default) instead of forcing material.
    Open source →
  3. 7.0.2 23 Jun 2026
    Release notes
    • context.select<T, R>(selector) — the method-based twin of the Selector widget. Reads a value derived from a page-scoped T and rebuilds the calling widget only when the selected value changes (==). Mirrors context.select from provider to ease migration; call it from build.
    Open source →
  4. 7.0.1 23 Jun 2026
    Release notes

    📦 Published on pub.dev: https://pub.dev/packages/flutter_modular/versions/7.0.1

    Page-scoped BLoC/Cubit support

    • Scoped.addStreamable<T>(ctor, (t) => t.stream, (t) => t.close()) — exposes the object itself via context.watch<T>() (read its synchronous state, call its methods) while rebuilds are driven by its stream. flutter_modular keeps no dependency on the bloc package (stream/close are caller callbacks). See the docs for a suggested addBloc extension covering both BLoC and Cubit.
    • addListenable<T>(ctor, (t) => t.listenable, (t) => t.dispose()) — for objects whose reactivity is a Listenable property.

    Simpler non-reactive registration

    • add<T>(ctor) — non-reactive page-scoped object, readable via context.read/watch, disposed on unmount when it implements Disposable. Breaking: replaces addDisposable (removed; the Disposable interface is retained).

    Internals

    • addChangeNotifier reexpressed over addListenable; watch/read/Consumer/Selector now accept any Object (not just Listenable), so a non-Listenable reactive object can be exposed. Fully backward compatible.

    Full Changelog: https://github.com/Flutterando/modular/blob/master/CHANGELOG.md

    Open source →
    Release notes
    • Page-scoped BLoC/Cubit support. New Scoped.addStreamable<T>(ctor, (t) => t.stream, (t) => t.close()) exposes the object itself via context.watch<T>() (read its synchronous state, call its methods) while rebuilds are driven by its stream — flutter_modular keeps no dependency on the bloc package (stream/close are caller callbacks). Companion addListenable<T>(ctor, (t) => t.listenable, (t) => t.dispose()) for objects whose reactivity is a Listenable property. See the docs for a suggested addBloc extension covering both BLoC and Cubit.
    • add<T>(ctor) — non-reactive page-scoped object, readable via context.read/watch and disposed on unmount when it implements Disposable. Breaking: replaces addDisposable, which is removed (the Disposable interface is retained).
    • addChangeNotifier reexpressed over addListenable; watch/read/Consumer/Selector now accept any Object (not just Listenable), so a non-Listenable reactive object can be exposed.
    Open source →
  5. 7.0.0 22 Jun 2026

    Nothing published for this version

  6. 6.4.1 12 Jun 2025

    Nothing published for this version

  7. 6.4.0 10 Jun 2025

    Nothing published for this version

  8. 6.3.4 23 May 2024

    Nothing published for this version

  9. 6.3.3 08 Apr 2024

    Nothing published for this version

  10. 6.3.2 06 Sep 2023

    Nothing published for this version

  11. 6.3.1 01 Sep 2023

    Nothing published for this version

  12. 6.3.0 31 Aug 2023

    Nothing published for this version

  13. 6.2.0-beta.4 30 Aug 2023 pre-release

    Nothing published for this version

  14. 6.2.0-beta.3 30 Aug 2023 pre-release

    Nothing published for this version

  15. 6.2.0-beta.2 30 Aug 2023 pre-release

    Nothing published for this version

  16. 6.2.0-beta.1 30 Aug 2023 pre-release

    Nothing published for this version

  17. 6.1.1 28 Aug 2023

    Nothing published for this version

  18. 6.1.0 24 Aug 2023

    Nothing published for this version

  19. 6.1.0+1 24 Aug 2023

    Nothing published for this version

  20. 6.0.4 16 Aug 2023

    Nothing published for this version

  21. 6.0.4+1 17 Aug 2023

    Nothing published for this version

  22. 6.0.3 09 Aug 2023

    Nothing published for this version

  23. 6.0.2 05 Aug 2023

    Nothing published for this version

  24. 6.0.1 01 Aug 2023

    Nothing published for this version

  25. 6.0.0 31 Jul 2023

    Nothing published for this version

  26. 6.0.0+1 01 Aug 2023

    Nothing published for this version

  27. 6.0.0+2 01 Aug 2023

    Nothing published for this version

  28. 6.0.0-rc.1 31 Jul 2023 pre-release

    Nothing published for this version

  29. 6.0.0-beta.9 30 Jul 2023 pre-release

    Nothing published for this version

  30. 6.0.0-beta.5 30 Jun 2023 pre-release

    Nothing published for this version

  31. 6.0.0-beta.4 30 Jun 2023 pre-release

    Nothing published for this version

  32. 6.0.0-beta.3 14 Jun 2023 pre-release

    Nothing published for this version

  33. 6.0.0-beta.2 04 Jun 2023 pre-release

    Nothing published for this version

  34. 6.0.0-beta.1 24 May 2023 pre-release

    Nothing published for this version

  35. 6.0.0-alpha.5 11 Feb 2023 pre-release

    Nothing published for this version

  36. 6.0.0-alpha.4 11 Feb 2023 pre-release

    Nothing published for this version

  37. 6.0.0-alpha.3 11 Feb 2023 pre-release

    Nothing published for this version

  38. 6.0.0-alpha.2 03 Feb 2023 pre-release

    Nothing published for this version

  39. 6.0.0-alpha.1 31 Jan 2023 pre-release

    Nothing published for this version

  40. 6.0.0-alpha.0 29 Jan 2023 pre-release

    Nothing published for this version

  41. 5.0.3 03 Jun 2022
    Release notes
    Open source →
  42. 5.0.3-dev.1 03 Jun 2022 pre-release

    Nothing published for this version

  43. 5.0.2 13 May 2022
    Release notes
    • Fix: Parse params in RouteOutlet
    Open source →
  44. 5.0.1 12 May 2022
    Release notes
    • Support Cubit
    Open source →
  45. 5.0.0 12 May 2022
    Release notes
    • Support Flutter 3.0.0
    • [BREAK CHANGE]: Removed MaterialApp.modular() and Cupertino().modular().
      Use instead:
        return MaterialApp.router(
          routeInformationParser: Modular.routeInformationParser,
          routerDelegate: Modular.routerDelegate,
        );
      

    This modification aims to keep Modular support independent of WidgetApp updates, and can be used in other bootstraps such as FluentApp [fluent_ui].

    • [BREAK CHANGE]: New auto-dispose configuration.
      Previously Modular had automatic closing or destruction calls for objects of type ChangeNotifier/ValueNotifier, Stream and Triple`s Stores.
      Starting with version 5.0, Modular will provide the Bind.onDispose property for calls to destroy, close or dispose methods FOR EACH BIND. This will make the dispose settings more straightforward and less universal. Therefore, Modular will manage the destruction of Binds that implement Disposable only. This is the new configuration:
    @override
    final List<Bind> binds = [
      Bind.singleton((i) => MyBloc(), onDispose: (bloc) => bloc.close()),
    ];

    The Bind.onDispose CANNOT be used in Bind type factory.
    You can choose to use Bind.onDispose or implement the Disposable class.

    • Added Bind.selector. Generates a reactivity (Listenable/Stream) to be listened to when context.watch() is called.
    @override
    final List<Bind> binds = [
      //notifier return stream or listenable to use context.watch()
      Bind.singleton((i) => MyBloc(), onDispose: (bloc) => bloc.close(), selector: (bloc) => bloc.stream),
    ];
    • [BREAK CHANGE]: As already described above, the reactivities worked externally to Modular, providing a
      longer life to the project. For this reason, BLoC or Triple users should use special Bind's in order to use the context.watch() and auto dispose functionality. They are: BlocBind() and TripleBind(), which are available through external packages.
      modular_bloc_bind -> BlocBind

      modular_triple_bind -> TripleBind

    Example:

    @override
    final List<Bind> binds = [
      BlocBind.singleton((i) => MyBloc()),
    ];
    • [BREAK CHANGE] Bind.export works only after imported.

    • @deprecated ModularState.
      A few months of research showed us that ModularState caused unnecessary coupling with the view and made it difficult for those who used it to understand. For this reason, we decided to deprecate it to ensure code congruence for all professionals who use Modular.

    • Removed triple dependency.

    • Simplify docs.

    • Added Modular.setArguments.

    Modular.setArguments('cody1024d');
    
    // get
    Modular.args.data; // -> cody1024d
    //or
    Bind((i) => MyClass(i.args.data));
    

    Issues

    Open source →
  46. 5.0.0-dev.15 09 May 2022 pre-release

    Nothing published for this version

  47. 5.0.0-dev.14 08 May 2022 pre-release

    Nothing published for this version

  48. 5.0.0-dev.13 06 May 2022 pre-release

    Nothing published for this version

  49. 5.0.0-dev.12 05 May 2022 pre-release

    Nothing published for this version

  50. 5.0.0-dev.11 05 May 2022 pre-release

    Nothing published for this version

  51. 5.0.0-dev.8 29 Apr 2022 pre-release

    Nothing published for this version

  52. 5.0.0-dev.7 29 Apr 2022 pre-release

    Nothing published for this version

  53. 5.0.0-dev.6 29 Apr 2022 pre-release

    Nothing published for this version

  54. 5.0.0-dev.5 23 Apr 2022 pre-release

    Nothing published for this version

  55. 5.0.0-dev.4 23 Apr 2022 pre-release

    Nothing published for this version

  56. 5.0.0-dev.3 22 Apr 2022 pre-release

    Nothing published for this version

  57. 5.0.0-dev.2 22 Apr 2022 pre-release

    Nothing published for this version

  58. 5.0.0-dev.1 21 Apr 2022 pre-release

    Nothing published for this version

  59. 4.5.1 05 Apr 2022

    Nothing published for this version

  60. 4.5.1+1 05 Apr 2022

    Nothing published for this version

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