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);

 // ...
}