flutter - 运行 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.
解决方案
推荐阅读
- elasticsearch - 过滤字段值或不存在
- angular - 更改 ion-checkbox 的默认值
- websphere - 如何访问 IBM Cloud Object Storage 实例以在 Watson Studio 中使用?
- python - 制作更快的视频捕获opencv
- reactjs - 如何在 Material UI 的下拉列表中设置默认值?
- java - 我正在尝试创建程序来加密和解密文件 | 爪哇
- c++ - 如何在 Qt 中保存图像而无需手动添加 .jpeg 或 .png 扩展名?
- apache-spark - 在 pyspark 数据框中找到相似的变量值
- c# - Visual Studio IntelliSense 无法正常工作
- python - 如何重现 statsmodels ARIMA 过滤器?