应用程序在 flutter 中打开后立即从设备读取数据

Read data using from the device as soon as an app opens in flutter

我正在使用 SharedPreferences 将应用的主题保存到设备中,方法如下:

void _serializeTheme() async {
    SharedPreferences _preferences = await SharedPreferences.getInstance();
    _preferences.setString("theme", "dark");
}

打开应用程序后,我可以使用 _preferences.getString("theme") 来检测主题,但由于 SharedPreferences.getInstance() 是异步的,我需要将应用程序的主目录包装在 FutureBuilder 中等待在显示页面之前加载主题并在等待时呈现容器。我的问题是,在应用程序加载主题的短暂时间内,屏幕闪烁容器的颜色,因为我不知道用户在加载之前保存了哪个主题,所以必须是固定颜色,这可能与首页背景颜色不协调。为防止出现这种情况,我可以在显示任何内容之前加载主题吗?

那么,有没有办法在打开应用程序之前运行一个异步函数?或者,如果这不是 fiesable,有没有办法从设备同步读取数据,以便我可以在内部读取它 initState(),这样我就可以知道用户在呈现任何内容之前保存的主题?

你必须展示一些东西。您可以使用 https://pub.dev/packages/flutter_native_splash 设置您选择的初始屏幕,然后在 FutureBuilder 尚未完成未来时使用同一屏幕显示,然后在准备就绪时过渡到您的主要主题。

在你的情况下,我会在 runApp() 之前获取等待数据, 示例:

main()async{
// Here 
SharedPreferences _preferences = await SharedPreferences.getInstance();

   runApp(YourApp());
    
}

void main() {
  runZonedGuarded(() async {
// Here 
SharedPreferences _preferences = await SharedPreferences.getInstance();

   runApp(YourApp());
    
  }, (_, s) {});
}