当前,当我运行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();
}
}
我对这个解决方案不太满意,感觉有点。。。关闭,但它会起作用。