让 setState()
接受一个函数以立即调用它然后请求重建的好处是什么?特别是,让用户显式调用“重建”类型的函数有什么优势?
最佳答案
当Flutter具有“markNeedsBuild”功能时,开发人员最终只是在随机时间调用它。当语法切换为setState(() { ... })
时,开发人员更有可能正确使用API。从机器的 Angular 来看,它们在功能上是等效的,但是它们似乎唤起了开发人员的不同代码。
如果遵循只对setState
闭包内的成员变量进行变异的约定,则可以避免重构某些代码并意外删除对setState
的调用,或不必要地调用setState
的情况。而且,如果您卸载了State
,Flutter可能会使断言失败,因此您一开始尝试突变成员(而不是最后)就知道出了点问题。
最终可能会存在一个analyzer warning,强制在对 setState
的成员进行变异时始终调用State
,因此,在initState
或setState
回调之外发生的任何成员变量变异都将被标记为可疑。
如果您刚刚开始使用Flutter中的状态,请查看Flutter widgets tour。我发现很多情况下,我可以使用 setState
, FutureBuilder
, StreamBuilder
或 AnimatedWidget
来优雅地处理AnimatedBuilder
,因此如果您发现自己经常调用setState
,请不要忘记考虑这些替代方法。
亚当·巴特(Adam Barth)和雅罗斯拉夫·沃洛维奇(Yaroslav Volovich)对此问题做出了贡献。
关于dart - setState为什么要关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64418596/