首页 文章

我应该使哪些小部件成为有状态的?

提问于
浏览
0

所以想象我有一个带抽屉,app栏,身体等的应用程序(标准材料脚手架) .

我现在正在考虑实现它的正确方法是什么,因为我基本上是 don't want any state in the widgets (即我希望将状态(数据)保存在专用的模型/存储/控制器类中,并保持小部件仅负责UI /像素) .

我可以使顶级的根应用程序小部件有状态,然后 setState((){}) (注意虚拟回调,我对商店/模型/感兴趣的是'd use just to trigger the rebuild) whenever the controller(s) tell me to. The child widgets would then get rebuilt and would read the values they'

我可以使顶级窗口小部件无状态,只将叶子标记为有状态 .

鉴于Flutter声称要针对频繁的重建进行优化,一种选择明显优于另一种吗?我更加冗长(2x课程) .

1 回答

  • 0

    我现在正在考虑实现它的正确方法是什么,因为我基本上不希望窗口小部件中有任何状态(即我希望将状态(数据)保存在专用的模型/存储/控制器类中,并保持小部件只负责用于UI /像素) .

    实现它的正确方法imo是flutter团队如何设计要使用的状态类 . 执行此操作时,您将向UI类中注入一个状态对象:

    class HomePage extends StatefulWidget {
        @override
          _HomePageState createState() => new _HomePageState();
    }
    class _HomePageState extends State<HomePage> {...}
    

    即,仅将与窗口小部件和/或其直接子窗口小部件相关的状态数据存储在窗口小部件的状态中 .

    仅在1(最顶层)小部件中跟踪状态是一个坏主意(复杂性) . 当状态对象很大时,在setState()上比较先前状态和当前状态时,看到框架有很多内容需要考虑 . 不使用独立变化的较小状态对象似乎是浪费 . 此外,从维护的角度来看,当状态对象仅与当前窗口小部件相关时,很容易获得您正在查看的内容的上下文 .

    在我看来,你正在与框架作斗争,你能详细说明一个特定的原因/例子,为什么你不希望在小部件中有任何状态?

相关问题