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

时间:2020-10-07 13:43:15

标签: flutter dart provider

当前,当我运行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);

1 个答案:

答案 0 :(得分:1)

您不能。您可以执行的操作是确保取决于初始化的方法要等到它真正完成后再继续:

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();
  }
}

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