#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 моего вопроса.