首页 > 解决方案 > 仅在设备上诊断 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,但看不到任何有用的东西(我无法理解它)。

标签: dartflutter

解决方案


发生这种情况是因为我在最外层的构建函数中创建了 BLoC。我将创建移至main()并传入已创建的 BLoC,从而解决了该问题。不要在构建函数中创建除了小部件之外的任何东西!


推荐阅读