dart - 为什么 setState 会关闭?

拥有setState() 有什么好处?接受一个函数只是为了立即调用它然后请求重建?特别是,与让用户显式调用“重建”类型函数相比有什么优势?

最佳答案

当 Flutter 有一个“markNeedsBuild”函数时,开发人员最终只是随机调用它。当语法切换到 setState(() { ... }) 时,开发人员更有可能正确使用 API。从机器的角度来看,它们在功能上是等效的,但它们似乎唤起了开发人员的不同代码。

如果您遵循仅在 setState 闭包内更改成员变量的约定,您将避免在重构某些代码并意外删除对 setState 的调用的情况>,或不必要地调用 setState。如果您的 State 未挂载,Flutter 可能会使断言失败,因此您在开始尝试改变成员时就知道出了问题,而不是在结束时。

最终可能会有 analyzer warning强制在改变 State 的成员时始终调用 setState ,因此在 initStatesetState 回调之外发生的任何成员变量突变都将被标记为可疑。

如果您刚刚开始使用 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 中布局的方向变化?

dart - 如何在 Flutter 中隐藏 TextField 底部的字母计数器

flutter - 在 Flutter 中显示用户友好的错误页面而不是异常

dart - 带有快速拨号的 flutter float Action 按钮

flutter - 点击 AppBar 打开抽屉