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



当前,当我运行await myService.getItem()时,由于_box尚未初始化,我得到了一个空指针异常。在从MyService调用任何其他函数之前,如何确保我的_initialize函数已完成?

class MyService {
Box<Item> _box;
MyService() {
_initialize();
}
void _initialize() async {
_box = await Hive.openBox<Storyboard>(boxName);
}
Future<Item> getItem() async {
return _box.get();
}
}

对于创建MyService,我使用类似于以下的提供者:

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

我对这个解决方案不太满意,感觉有点。。。关闭,但它会起作用。

相关内容

  • 没有找到相关文章

最新更新