dart - setState为什么要关闭?

标签 dart flutter

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

最佳答案

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

如果遵循只对setState闭包内的成员变量进行变异的约定,则可以避免重构某些代码并意外删除对setState的调用,或不必要地调用setState的情况。而且,如果您卸载了State,Flutter可能会使断言失败,因此您一开始尝试突变成员(而不是最后)就知道出了点问题。

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

如果您刚刚开始使用Flutter中的状态,请查看Flutter widgets tour。我发现很多情况下,我可以使用 setState FutureBuilder StreamBuilder AnimatedWidget 来优雅地处理AnimatedBuilder,因此如果您发现自己经常调用setState,请不要忘记考虑这些替代方法。

亚当·巴特(Adam Barth)和雅罗斯拉夫·沃洛维奇(Yaroslav Volovich)对此问题做出了贡献。

关于dart - setState为什么要关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64418596/

相关文章:

date - 如何在 flutter 列表中获取给定月份的所有日期?

flutter - 为什么List-View Builder在SmartRefresher小部件中返回高度和宽度固定的子级?

webview - 如何使用 flutter webview 获取 html 元数据

android - 禁用 Flutter Hero 反向动画

android-studio - 没有 'Remove Widget' 选项用于在 Windows 10 中使用 Android Studio 进行抖动

dart - Flutter - 在路由之间推送和获取值(value)

typescript - 从 typescript 到 Dart 书写转译器时,人们面临哪些技术障碍?

flutter - 如何设置 onLongPress Flutter 的持续时间

android - 删除 Flutter 中两列之间的空间

json - 在 flutter 中从 API 获取数据时获取错误类型'_InternalLinkedHashMap<String, dynamic >' is not a subtype of type ' Iterable<dynamic>'