【问题标题】:Is there a way to pass factory params?有没有办法通过工厂参数?
【发布时间】:2021-03-19 11:14:01
【问题描述】:

我有类似的东西:

@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>(),
          ));

所以,工厂参数没有传递,一切都在运行时崩溃。 我该如何解决这个问题?

附:长话短说: 应该有办法生成这段代码:

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

而不是这个:

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

【问题讨论】:

    标签: flutter dart dependency-injection injectable


    【解决方案1】:

    代码按预期工作

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

    您确定要在使用前初始化 getIt 吗?

    【讨论】:

    • 如何使用HotelsBloc,如果它创建没有事件参数的SettingBloc?事件参数在 SettingsBloc 中是必须的,不能省略。并且没有记录的方法可以从 HotelsBloc 传递该参数。
    • 我澄清了我对 P.S. 的期望。我的问题的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 2012-09-05
    • 2022-01-07
    • 2015-03-31
    相关资源
    最近更新 更多