首页 > 解决方案 > 运行 MyApp 之前的 Flutter 加载设置

问题描述

SharedPreferences在调用runApp(MyApp()). 我的问题是,即使我调用Future带有回调的方法来加载MyApp,我仍然需要使用它WidgetsFlutterBinding.ensureInitialized();来使事情正常进行。这是一种可接受的方法吗?有更好的方法吗?我不明白为什么.then()不把我从例外中拯救出来。

这是我现在拥有的:

import ...

final String version = '0.1';
String savedDeviceName, savedDeviceId;
bool skipIntroPage;
SharedPreferences settings;

void main() {
  WidgetsFlutterBinding.ensureInitialized();      
  initSettings(settings).then((settings) => {runApp(MyApp())});
}

Future<SharedPreferences> initSettings(SharedPreferences settings) async {
  settings =
      await SharedPreferences.getInstance().then((SharedPreferences settings) {
    savedDeviceName = settings.getString('devname') ?? "none";
    savedDeviceId = settings.getString('devid') ?? "none";
    skipIntroPage = settings.getBool('skipintro') ?? false;
    return settings;
  });
  return settings;
}

例外是:

FlutterError (ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.
If you're running an application and need to access the binary messenger before `runApp()` has been 
called (for example, during plugin initialization), then you need to explicitly call the 
`WidgetsFlutterBinding.ensureInitialized()` first.

标签: flutterdart

解决方案


推荐阅读