dart - 仅在设备上诊断 Flutter MaterialApp 主题运行时更改缓慢的原因
问题描述
我将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 Observatory Timeline,但看不到任何有用的东西(我无法理解它)。
解决方案
发生这种情况是因为我在最外层的构建函数中创建了 BLoC。我将创建移至main()
并传入已创建的 BLoC,从而解决了该问题。不要在构建函数中创建除了小部件之外的任何东西!