等到构造函数/初始化函数将初始化 class 的成员

Waiting until constructor / init function will initialize members of the class

目前,当我处于 运行 await myService.getItem() 时,我遇到空指针异常,因为 _box 尚未初始化。如何确定我的 _initialize 函数在从 MyService 调用任何其他函数之前完成?

class MyService {

  Box<Item> _box;

  MyService() {
    _initialize();
  }

  void _initialize() async {
    _box = await Hive.openBox<Storyboard>(boxName);
  }

  Future<Item> getItem() async {
    return _box.get();
  }
}

为了创建 MyService 我使用的 Provider 如下:

final myService = Provider.of<MyService>(context, listen: false);

你不能。你可以做什么确保你的方法取决于初始化等到它真正完成后再继续:

class MyService {
  Box<Item> _box;
  Future<void> _boxInitialization;

  MyService() {
    _boxInitialization = _initialize();
  }

  Future<void> _initialize() async {
    _box = await Hive.openBox<Storyboard>(boxName);
  }

  Future<Item> getItem() async {
    await _boxInitialization; // this might still be ongoing, or maybe it's already done
    return _box.get();
  }
}

我对这个解决方案不是很满意,感觉有点……不对,但它可以解决问题。