【发布时间】:2019-12-29 19:14:20
【问题描述】:
在 Flutter 中避免 setState() 有什么用吗?
我有一个 StatefulWidget(屏幕),我在其中使用 Widget 来完全处理自己的状态,FAB 按钮除外。数据更改时禁用或启用 Fab 按钮,以便在数据更改时更新数据库。我在 SO 上发布了一个关于如何使用 Provider 来处理它的问题,从而避免了 setState() 的需要,并使用 Provider 实现了它。
当查看另一个屏幕来实现类似的东西时,我想知道另一种解决方案是否会更好。这个屏幕还包含所有处理自己状态的小部件 - 带有 TextEditControllers 的 TextFields,所以我调用 setState() 的唯一地方是启用或禁用 FAB。我之前创建了一个有状态的小部件来创建一个具有自己状态的 CheckBox,因为标准 CheckBox 没有状态。它相当简单,只有 50 行代码。所以,我对 FAB 做了同样的事情,我创建了一个封装 FAB 的 Stateful Widget (CustomFab)。当需要启用或禁用它时,会调用它来设置自己的状态,并返回一个 FAB,该 FAB 使用适当的颜色启用或禁用。因为我还有其他类似的屏幕,所以我可以使用相同的组件。
在这种情况下(对于移动设备和 Web),它是否通过避免 setState() 来实现任何目标,如果是,那么处理该问题的最佳方法是什么(Custom-Widget 或 Provider 或其他)?
【问题讨论】:
-
根据频率,如果widget是要使用的频率,则做一个Custom-Widget,如果不是另一种选择(Bloc,StreamController,Provider...等)。
setState可以用在低复杂度的页面中,这也让我意识到这个页面很简单,放松一下。但这些都是基于我的意见,所以我只是发表评论而不是回答。
标签: flutter state flutter-layout