【问题标题】:Flutter: pause code execution to initialize SharedPreferences on startupFlutter:暂停代码执行以在启动时初始化 SharedPreferences
【发布时间】:2021-10-01 05:18:09
【问题描述】:

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

我尝试让我的主要方法异步,然后使用等待:

void main() async {
  var prefs = await SharedPreferences.getInstance();
  runApp(MyApp(prefs));
}

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

我也试过用then

void main() async {
  SharedPreferences.getInstance().then((prefs) => runApp(MyApp(prefs)));
}

同样的结果:白屏。

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

【问题讨论】:

  • 而不是在 main 方法中初始化共享首选项,你以后不能这样做吗?
  • @OMiShah 我只想初始化这个对象一次,然后传递一个引用。如果在 MyApp 中有办法做到这一点,那也没关系。但是,我不想在所有需要此功能的小部件中初始化 SharedPreferences。
  • 我必须进行编辑才能将我的投票从否定更改为错误,因为我这样做是错误的。没关系:P

标签: flutter


【解决方案1】:

在您偏好实例之前添加它

 WidgetsFlutterBinding.ensureInitialized();

【讨论】:

  • 这行得通!谢谢。我需要注意此调用的任何副作用?
  • 只为methodChannel初始化futter上下文,因为flutter中的偏好使用本机代码,如果你想在runApp或testWidget之前初始化东西,你也可以在测试中使用,你应该添加那行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 2011-11-17
  • 2012-05-31
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多