Performance 在运行时更改主题需要StatefulWidget,但不是';那不是太贵了吗?

Performance 在运行时更改主题需要StatefulWidget,但不是';那不是太贵了吗?,performance,flutter,dart,flutter-widget,Performance,Flutter,Dart,Flutter Widget,我最近在Flatter中完成了一个小项目,当我试图在运行时实现主题更改时,我遇到的大多数答案都涉及将MaterialApp(具有主题)放在StatefulWidget或某种消费者的下面 据我所知,当遇到某些更改时,这两种解决方案都会在MaterialApp下重新绘制整个小部件树(StatefulWidget的状态更改或我提供给消费者的任何ChangeNotifier的更改) 因此,我的主要问题是:这不是非常昂贵而且不推荐吗?我的整个应用程序小部件树是否正在重新绘制(假设大部分都在Material

我最近在Flatter中完成了一个小项目,当我试图在运行时实现主题更改时,我遇到的大多数答案都涉及将MaterialApp(具有主题)放在StatefulWidget或某种消费者的下面

据我所知,当遇到某些更改时,这两种解决方案都会在MaterialApp下重新绘制整个小部件树(StatefulWidget的状态更改或我提供给消费者的任何ChangeNotifier的更改)

因此,我的主要问题是:这不是非常昂贵而且不推荐吗?我的整个应用程序小部件树是否正在重新绘制(假设大部分都在MaterialApp下面)

第二:为什么我自己的一些小部件在MaterialApp树下面的构建方法没有被调用?这意味着文档中暗示的昂贵的重建实际上并未完成。有什么好处


提前谢谢

据我所知,如果将
MaterialApp
包装在引用提供者的消费者中,而提供者仅在主题更改时发出值,那么这并不是非常低效。是的,当你更改主题时,它会重新绘制应用程序,但不会在每次状态更改时重新绘制你的应用程序,只会在该值更改时重新绘制。如果您有一个提供程序
notifyListeners
很多,那么您可以使用小部件只关注主题的一个值


不过也就是说,当用户改变主题时,重新绘制一次应用程序并不昂贵,而且会很快完成。没有办法在主题更改时重新绘制应用程序。如果您担心,您可以使用Profiler工具来测试这一点,但您会发现主题更改几乎没有问题。

不知道如何在不重建整个应用程序的情况下更改应用程序的整个配色方案。无论是否昂贵,它都会在几毫秒内发生,对用户来说是即时的。它不会影响用户体验,因为当用户使用应用程序进行任何操作时,它不会持续发生。