Есть ли способ передать заводские параметры?

#flutter #dart #dependency-injection #injectable

#трепетание #дротик #внедрение зависимостей #вводимый

Вопрос:

У меня есть что-то подобное:

 @injectable
class SettingsBloc {
  final Event event;

  SettingsBloc(@factoryParam this.event);
}
 

Когда я вызываю его из своего кода, я передаю заводские параметры следующим образом: getIt<SettingsBloc>(param1: Event())

Но когда SettingsBloc является зависимостью от чего-либо, вызов генерируется автоматически и выглядит следующим образом: get<SettingsBloc>()

Сгенерированный код:

 gh.factoryParam<SettingsBloc, Event, dynamic>(
      (event, _) => SettingsBloc(event));

gh.factoryParam<HotelsBloc, Event, dynamic>(
      (event, _) => HotelsBloc(
            event,
            get<SettingsBloc>(),
          ));
 

Итак, заводской параметр не передается, и все выходит из строя во время выполнения.
Как я могу это исправить?

P.S. Короче говоря: должен быть способ сгенерировать этот код:

 gh.factoryParam<HotelsBloc, Event, dynamic>(
          (event, _) => HotelsBloc(
                event,
                get<SettingsBloc>(param1: event),
              ));
 

Вместо этого:

 gh.factoryParam<HotelsBloc, Event, dynamic>(
          (event, _) => HotelsBloc(
                event,
                get<SettingsBloc>(),
              ));
 

Ответ №1:

Код работает так, как ожидалось

  print(getIt<SettingsBloc>().event);
  // prints null
  print(getIt<SettingsBloc>(param1: Event()).event);
  // prints Instance of 'Event'
 

Вы уверены, что инициализируете GetIt перед его использованием?

Комментарии:

1. Как использовать HotelsBloc, если он создает SettingBloc без параметра события? Параметр события является обязательным в SettingsBloc и не может быть опущен. И нет документированного способа передать этот параметр из HotelsBloc.

2. Я уточнил, чего я ожидаю, в разделе PS моего вопроса.