lite_ref 0.8.1
lite_ref: ^0.8.1 copied to clipboard
A lightweight dependency injection package with support for overriding for testing.
0.8.1 #
- [Fix] Fixed bug with disposal of widget state.
0.8.0 #
-
[Fix] Fixed bug with hot-reloading
-
[Feat] Add
Ref.scopedFamilywhich takes a argument to create a unique instance for each key.-
Create a
ScopedFamilyRef.final postControllerRef = Ref.scopedFamily((ctx, String key) { return PostController(key)..fetch(); }); -
Access the instance in the current scope:
This can be done in a widget by using
postController.of(context, key)orpostController(context, key).class PostsPage extends StatelessWidget { const PostsPage({required this.keys, super.key}); final List<String> keys; @override Widget build(BuildContext context) { return ListView.builder( itemBuilder: (context, index) { final post = postControllerRef.of(context, keys[index]); return Text(post?.title ?? 'Loading...'); }, ); } }
-
0.7.0 #
-
[Fix] Fixed bug where refs were disposed when the child is temporarily deactivated.
-
[Breaking] The
overridesproperty ofLiteRefScopeis now a Set ofScopedRefs instead of a List ofScopedRefs.Before #
LiteRefScope( overrides: [ settingsServiceRef.overrideWith((ctx) => MockSettingsService()), ] child: MyApp(), )After: #
LiteRefScope( overrides: { settingsServiceRef.overrideWith((ctx) => MockSettingsService()), } child: MyApp(), )
0.6.3 #
- [Refactor] minor refactor
0.6.2 #
- [Feat] Add
onlyOverridestoLiteRefScopewhich will only provide overridden instances to children.
0.6.1 #
- [Feat] Add
ScopedRef.exists(context)method to check if a ScopedRef is initialized in the current LiteRefScope.
0.6.0 #
- Update flutter dependency constraint
0.5.2 #
- [Refactor] Add core package as a dependency.
0.5.1 #
- [Fix] Remove
disposefunction when overriding withautoDisposeset tofalse.
0.5.0 #
-
[Feat] Add autodipose for
ChangeNotifiersand any class that implementsDisposable. These classes will be disposed when all the widgets that have access to the instance are unmounted. If providing a existing and you don't want the instance to be disposed setautoDisposetofalse.In the example below, the
CounterControllerwill be disposed when theCounterViewis unmounted.class CounterController extends ChangeNotifier { var _count = 0; int get count => _count; void increment() { _count++; notifyListeners(); } void decrement() { _count--; notifyListeners(); } } final countControllerRef = Ref.scoped((ctx) => CounterController()); class CounterView extends StatelessWidget { const CounterView({super.key}); @override Widget build(BuildContext context) { final contoller = countControllerRef.of(context); return ListenableBuilder( listenable: contoller, builder: (context, snapshot) { return Text('${contoller.count}'); }, ); } }
0.4.1 #
- [Docs] Add documentation comments and examples
0.4.0 #
-
[Breaking] This now a flutter package
-
Add
ScopedRefwhich is a ref that needs a context to access its instance -
Add
LiteRefScopewhich coupled withScopedRefis an alternative toProviderfor classes that don't rebuild widgets.-
Wrap your app or a subtree with a
LiteRefScope:runApp( LiteRefScope( child: MyApp(), ), ); -
Create a
ScopedRef.final settingsServiceRef = Ref.scoped((ctx) => SettingsService()); -
Access the instance in the current scope:
This can be done in a widget by using
settingsServiceRef.of(context)orsettingsServiceRef(context).class SettingsPage extends StatelessWidget { const SettingsPage({super.key}); @override Widget build(BuildContext context) { final settingsService = settingsServiceRef.of(context); return Text(settingsService.getThemeMode()); } } -
Override it for a subtree:
You can override the instance for a subtree by using
overrideWith. This is useful for testing. In the example below, all calls tosettingsServiceRef.of(context)will returnMockSettingsService.LiteRefScope( overrides: [ settingsServiceRef.overrideWith((ctx) => MockSettingsService()), ] child: MyApp(), ),
-
0.3.0 #
- Make the factory function non-nullable (improves performance and maintainability)
0.2.1 #
- Internal performance improvements
- fix minor bug where async singleton would not be replace when overridden
0.2.0 #
- separate singleton and transient instantiation use:
Ref.singleton,Ref.transient,Ref.asyncSingletonandRef.asyncTransient - add
assertInstancegetter for synchronous access to a AsyncSingletonRef
0.1.0 #
- prevent race condition when fetching async singleton
- add
assertInstancegetter for synchronous access to a LiteAsyncRef - add
.freeze()method which disables overriding
0.0.2 #
- Update readme
0.0.1 #
- Initial release