当前,当我运行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);
答案 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();
}
}
我对这种解决方案不是很满意,感觉有点...不对,但是可以解决问题。