我将SharedPreferences
服务类包装在实现PreferencesProvider.of(context)
的提供程序类中。它的主题设置如下:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: PreferencesProvider.of(context).service.isDark,
initialData: PreferencesProvider.of(context).service.isDark.value, //its an rxDart ValueObservable
builder: (context, snapshot) => MaterialApp(
theme: ThemeData(
brightness: snapshot.data ? Brightness.dark : Brightness.light,
primarySwatch: Colors.blue,
///etc etc etc
窗口小部件可以仅使用PreferencesProvider.of(context).service.toggleIsDark()
来更改主题。它运行良好,但是冻结大约3秒钟即可更改设备上的主题。在模拟器上,它会立即发生。
任何可能的调试线索都很好。我尝试使用Dart天文台时间轴,但看不到任何有用的信息(我对此没有多大意义)。
答案 0 :(得分:0)
之所以发生这种情况,是因为我在最外层的构建函数中创建了自己的BLoC。我将创建内容移至main()
,并传入创建的BLoC,从而解决了该问题。除了构建功能中的小部件外,不要创建任何东西!