initialize method
Initializes Factory and given objects.
entries
- Default items to store in ControlFactory. Use Control.get to retrieve this objects and Control.set to add new ones. All objects are initialized - Initializable.init and DisposeHandler.preferSoftDispose is set.
factories
- Default factory initializers to store in ControlFactory Use Control.init or Control.get to retrieve concrete objects.
injector
- Injector to use after object initialization. Use BaseInjector for Type based injection.
initAsync
- Custom async
function to execute during ControlFactory initialization. Don't overwhelm this function - it's just for loading core settings before 'home' widget is shown.
Factory can be initialized just once - until ControlFactory.clear is executed.
Implementation
bool initialize(
{Map? entries,
Map<Type, InitFactory>? factories,
Injector? injector,
Future Function()? initAsync}) {
if (_initialized) {
return false;
}
_initialized = true;
_items[ControlFactory] = this;
_items[ControlBroadcast] = _broadcast;
setInjector(injector);
if (entries != null) {
_items.addAll(entries);
}
if (factories != null) {
_factory.addAll(factories);
}
_items.forEach((key, value) {
if (value is Initializable) {
inject(value, args: {});
printDebug('Factory init $key - ${value.runtimeType.toString()}');
}
if (value is DisposeHandler) {
value.preferSoftDispose = true;
printDebug(
'Factory prefers soft dispose of $key - ${value.runtimeType.toString()}');
}
});
_initializeAsync(initAsync);
return true;
}