应用程序在 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) {});
}
我正在使用 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) {});
}