有没有一种方法可以传递工厂参数?

6

我有类似这样的东西:

@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>(),
              ));
2个回答

0
根据我对将参数传递给内部依赖关系的理解,你应该为依赖于SettingsBloc的类创建一个模块。
@module
abstract class HotelsBlocModule {
  HotelsBloc createHotelsBloc(
    @factoryParam Event event,
  ) => HotelsBloc (
         get<SettingsBloc>(
           param1: event,
         ),
       );
}

此外,您还需要从HotelsBloc中删除@Injectable,因为现在Module处理HotelsBloc的创建。
class HotelsBloc {
  final SettingsBloc _settingsBloc;

  const HotelsBloc(
    this._settingsBloc,
  );

  ...
}

文档: 模块类 | 库文档


0

代码按预期工作

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

你确定在使用 getIt 之前已经初始化了它吗?

1
如何使用HotelsBloc,如果它创建了没有事件参数的SettingBloc?在SettingsBloc中,事件参数是必需的,不能省略。而且没有记录的方法可以从HotelsBloc传递该参数。 - Alexander Farkas
1
我在我的问题的P.S.部分澄清了我的期望。 - Alexander Farkas
1
@AlexanderFarkas,你能为这个问题找到解决方案吗?我也遇到了同样的问题。 - rkris26

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接