等到构造函数/初始化函数将初始化 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();
}
}
我对这个解决方案不是很满意,感觉有点……不对,但它可以解决问题。
目前,当我处于 运行 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();
}
}
我对这个解决方案不是很满意,感觉有点……不对,但它可以解决问题。