0

我想用 GetIt 注册一个 cubit 并确保它的构造函数主体在第一次与 cubit 交互之前执行。

我的肘部如下所示:

class MyCubit extends Cubit<bool> {
  final Dependency dependency;

  MyCubit(this.dependency) : super(false) {
    this.initialCall();
  }

  initialCall() async {
    final resultingBool = await doSomethingAsync();
    emit(resultingBool)
  }
}

我在 GetIt 注册了一家工厂

getIt.registerFactory(
  () => MyCubit(getIt()),
);

并在类似的地方提供它:

BlocProvider<MyCubit>(
  create: (context) => di.getIt<MyCubit>(),
)

现在,如果我从如下小部件中的 cubit 读取,构造函数会被调用,但currentBool由于super(false).

final currentBool = context.read<MyCubit>.state

如果我只是添加lazy: false,到我的 BlocProvider 它并不能确保doSomethingAsync()等待(例如doSomethingAsync()可能需要很长时间。


  • 我可以this.initialCall();从构造函数主体中删除并initialCall()返回Future<void>并将我从肘部读取的小部件包装在 FutureBuilder 中吗?

  • 还是我必须引入状态才能拥有MyCubitLoading状态?

4

0 回答 0