FrProvider<VM extends FrViewModel>.di constructor
FrProvider<VM extends FrViewModel>.di ({
- GetIt? di,
- dynamic onCreated(
- BuildContext c,
- VM vm
- Key? key,
- Dispose<
VM> ? dispose, - bool? lazy,
- TransitionBuilder? builder,
- Widget? child,
inject VM
from GetIt container to Widget tree.
Implementation
FrProvider.di({
GetIt? di,
this.onCreated,
super.key,
Dispose<VM>? dispose,
super.lazy,
super.builder,
super.child,
}) : super(
create: (c) {
// VM extends FrViewModel
final vm = (di != null) ? di!<VM>() : c.read<VM>();
onCreated?.call(c, vm);
return vm;
},
dispose: (c, vm) {
dispose?.call(c, vm);
di ??= GetIt.I;
final reg = di?.findFirstObjectRegistration<VM>();
final fun = switch (reg?.registrationType) {
null => () {},
ObjectRegistrationType.alwaysNew => () {
// just dispose, GetIt always return new instance
vm.dispose();
},
ObjectRegistrationType.constant => () {
log(
'Dev Tips: '
'You can not auto dispose `singleton`VM [${VM.runtimeType}] by FrProvider.container. '
'Try use `FrProvider.container` with `lazySingleton` VM, '
'or use `FrProvider.value` with `singleton` VM. ',
);
},
ObjectRegistrationType.lazy => () {
// dispose and reset lazy singleton
vm.dispose();
di!.resetLazySingleton<VM>();
},
ObjectRegistrationType.cachedFactory => () {
// just dispose, GetIt may return new instance or VM throw `StateError`
vm.dispose();
},
};
fun.call();
},
);