๐Ÿ“ฑ forceinject_flutter

Flutter integration for ForceInject โ€” a zero-runtime-dependency DI container inspired by .NET Core.

โœจ Features

  • ForceScopeWidget โ€” Automatically manages scoped lifetimes tied to widget lifecycle
  • ForceViewModelBuilder<T> โ€” Injects and rebuilds using reactive ValueNotifier ViewModels
  • No state management dependency โ€” works with any pattern (MVVM, Clean, Redux, etc.)
  • Pure Dart and Flutter โ€” lightweight and testable

๐Ÿ” ViewModel Lifecycle Support

ViewModels injected via ForceViewModelBuilder can now:

  • Implement ForceInitializableViewModel to run init(BuildContext context) after mount
  • Implement Disposable to be cleaned up automatically when the widget tree is disposed
class MyViewModel implements ForceInitializableViewModel, Disposable {
  @override
  void init(BuildContext context) {
    print('Initialized with: ${Localizations.localeOf(context)}');
  }

  @override
  void dispose() {
    print('Cleaned up');
  }
}

๐Ÿงช Example

Check out the scoped_widget_flutter_di example for a complete working app.

ForceScopeWidget(
  provider: provider,
  child: ForceViewModelBuilder<MyViewModel>(
    builder: (context, vm) => Text('${vm.count.value}'),
  ),
)

๐Ÿ“ฆ Requirements

  • Flutter 3.10+
  • Dart 3.6+
  • force_inject >= 0.2.0

๐Ÿ’ก Use Cases

  • Scoped ViewModels per screen
  • Widget-driven lifetime management
  • Modular app architecture

๐Ÿงฐ No Code Generation

ForceInject and its Flutter integration work without:

  • build_runner
  • annotations
  • mirrors
  • codegen

Use pure constructor-based registration โ€” just like .NET Core DI.

Support me (@diegomgarcia) with Patreon

Patreon

Or make a donation buying me a coffee:

Buy Me A Coffee

๐Ÿ“œ License

MIT โ€” use it freely in commercial or personal projects.


Made with โค๏ธ by @diegomgarcia