拥有setState()
有什么好处?接受一个函数只是为了立即调用它然后请求重建?特别是,与让用户显式调用“重建”类型函数相比有什么优势?
最佳答案
当 Flutter 有一个“markNeedsBuild”函数时,开发人员最终只是随机调用它。当语法切换到 setState(() { ... })
时,开发人员更有可能正确使用 API。从机器的角度来看,它们在功能上是等效的,但它们似乎唤起了开发人员的不同代码。
如果您遵循仅在 setState
闭包内更改成员变量的约定,您将避免在重构某些代码并意外删除对 setState
的调用的情况>,或不必要地调用 setState
。如果您的 State
未挂载,Flutter 可能会使断言失败,因此您在开始尝试改变成员时就知道出了问题,而不是在结束时。
最终可能会有 analyzer warning强制在改变 State
的成员时始终调用 setState
,因此在 initState
或 setState
回调之外发生的任何成员变量突变都将被标记为可疑。
如果您刚刚开始使用 Flutter 中的状态,请查看 Flutter widgets tour .我发现很多我调用 setState
的情况可以用 FutureBuilder
更优雅地处理。 , StreamBuilder
, AnimatedWidget
, 或 AnimatedBuilder
,所以如果您发现自己经常调用 setState
,请不要忘记考虑这些替代方案。
Adam Barth 和 Yaroslav Volovich 对这个问题/答案做出了贡献。
https://stackoverflow.com/questions/44379366/
相关文章:
android - 使用 Flutter 的 Android Studio 中不显示设备列表
flutter - 垂直视口(viewport)被赋予了无限的高度
dart - 如何为 qa/dev/prod 构建不同版本的 Flutter 应用程序?
flutter - 如何在 Flutter 中创建 GridView 布局
flutter - 在 Flutter 中更改 TextField 的下划线
dart - 如何在 Flutter 中隐藏 TextField 底部的字母计数器
flutter - 在 Flutter 中显示用户友好的错误页面而不是异常