Flutter 如何设置提供程序';将数据转换为颤振中存储在SharedReferences中的数据?
我将Flutter 如何设置提供程序';将数据转换为颤振中存储在SharedReferences中的数据?,flutter,dart,sharedpreferences,Flutter,Dart,Sharedpreferences,我将bool isDarkTheme变量存储在我的Generalprovider类中,我可以随时访问它 我想做的事情是保存用户的主题首选项,每当用户再次打开应用程序时,而不是再次从存储在SharedReferences中的首选项加载它 这是我的Generalprovider代码:(我想它是可读的) Dart不支持异步构造函数,所以我认为我们应该采取另一种方法。我通常创建一个启动屏幕(或加载屏幕,不管你怎么称呼它),在应用程序打开后立即加载所有基本数据 但如果您只想获取主题数据,则可以在main方
bool isDarkTheme
变量存储在我的General
provider类中,我可以随时访问它
我想做的事情是保存用户的主题首选项,每当用户再次打开应用程序时,而不是再次从存储在SharedReferences
中的首选项加载它
这是我的General
provider代码:(我想它是可读的)
Dart不支持异步构造函数,所以我认为我们应该采取另一种方法。我通常创建一个启动屏幕(或加载屏幕,不管你怎么称呼它),在应用程序打开后立即加载所有基本数据 但如果您只想获取主题数据,则可以在main方法中使用async/await对:
void main() async {
WidgetsFlutterBinding.ensureInitialized(); // this line is needed to use async/await in main()
final prefs = await SharedPreferences.getInstance();
final isDarkTheme = prefs.getBool("is_dark_theme") ?? false;
runApp(MyApp(isDarkTheme));
}
之后,我们可以将这段主题数据传递给通用构造函数:
class MyApp extends StatelessWidget {
final bool isDarkTheme;
MyApp(this.isDarkTheme);
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => General(isDarkTheme), // pass it here
child: MaterialApp(
home: YourScreen(),
),
);
}
}
我们还应该在常规类中做一些更改,loadDefaultTheme方法被省略了
class General with ChangeNotifier {
bool isDarkTheme;
General(this.isDarkTheme);
// ...
}
非常解释!
class General with ChangeNotifier {
bool isDarkTheme;
General(this.isDarkTheme);
// ...
}