Flutter:暂停代码执行以在启动时初始化 SharedPreferences

Vas*_*liy 7 flutter

我阅读了有关在 Flutter 应用程序中初始化 SharedPreferences 的其他答案(例如这个),但我想采取另一条路线:在一开始就初始化 SharedPreferences 对象,然后根据需要将其传递给特定的客户端(又名依赖注入)。

我试图使我的主要方法异步,然后使用 await:

void main() async {
  var prefs = await SharedPreferences.getInstance();
  runApp(MyApp(prefs));
}
Run Code Online (Sandbox Code Playgroud)

直觉上,我预计执行将停止直到prefs被初始化,然后继续执行runApp。不幸的是,我得到了一个白屏而不是我的用户界面,所以我想我在这里遗漏了一些东西。

我也尝试使用then

void main() async {
  SharedPreferences.getInstance().then((prefs) => runApp(MyApp(prefs)));
}
Run Code Online (Sandbox Code Playgroud)

相同的结果:白屏。

有没有办法在 Flutter 中以这种方式初始化 SharedPreference?

Dal*_*mza 8

在您偏好实例之前添加这个

 WidgetsFlutterBinding.ensureInitialized();
Run Code Online (Sandbox Code Playgroud)

  • 只是为methodChannel初始化futter上下文,因为flutter中的偏好使用本机代码,如果您想在runApp或testWidget之前初始化事物,您也可以在测试中使用,您应该添加该行 (2认同)