想象一下,我有一个带抽屉,app栏,身体等的app(标准材料脚手架)。
我现在正在考虑实现它的正确方法是什么,因为我基本上不希望小部件中有任何状态(即我想在专用模型中保持状态(数据)/存储/控制器类并保持小部件仅负责UI /像素。)
我可以让顶级的根应用小部件有状态,然后setState((){})
(注意虚拟回调,我只是用来触发重建),只要控制器告诉我。然后子窗口小部件将被重建,并将从商店/模型/ ...中读取他们感兴趣的值。
我可以使顶级窗口小部件无状态,只将叶子标记为有状态。
鉴于Flutter声称要针对频繁的Widget
重建进行优化,一种选择明显优于另一种吗?我敢打赌,叶子方法可能更具性能,但它更冗长(2倍于类)。
答案 0 :(得分:0)
我现在正在考虑实现它的正确方法是什么,因为我基本上不想在小部件中有任何状态(即我想在专用模型/存储/控制器中保持状态(数据)类和保持小部件只负责UI /像素。)
实现它的正确方法imo是flutter团队如何设计要使用的状态类。执行此操作时,您将向UI类中注入一个状态对象:
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => new _HomePageState();
}
class _HomePageState extends State<HomePage> {...}
仅仅与小部件相关的状态数据和/或其直接子小部件存储在小部件的状态中。
仅在1(最顶层)小部件中跟踪状态是一个坏主意(复杂性)。当状态对象很大时,在setState()上比较先前状态和当前状态时,看到框架有很多内容需要考虑。不使用独立变化的较小状态对象似乎是浪费。此外,从维护的角度来看,当状态对象仅与当前窗口小部件相关时,您可以轻松获取所查看内容的上下文。
在我看来,你正在与框架作斗争,你能详细说明一个特定的原因/例子,为什么你不想要小部件中的任何状态?