initialize method

bool initialize({
  1. Map? entries,
  2. Map<Type, InitFactory>? factories,
  3. Injector? injector,
  4. Future initAsync()?,
})

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;
}