setState()
接受函数只是为了立即调用它,然后请求重建有什么好处?特别是,用户显式调用“重建”类型函数有什么优势?为什么setState需要关闭?
5
A
回答
7
当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对此问题/答案做出了贡献。
相关问题
- 1. 为什么需要关闭File.Create?
- 2. 为什么我要关闭Java.io.IOException流?
- 3. 为什么我们需要一个半关闭的插座?
- 4. 为什么我需要关闭安全验证?
- 5. 为什么我需要最终使用来关闭资源?
- 6. C#/ MonoDevelop:GTK MessageDialogs需要双击才能关闭 - 为什么?
- 7. 为什么使用它后需要关闭文件?
- 8. 为什么Session.Flush()需要保持关系?
- 9. 为什么需要
- 10. 管道关闭不需要关闭
- 11. 为什么setState返回undefined?
- 12. 为什么HttpUrlConnection不关闭?
- 13. ResultSet已关闭。为什么?
- 14. 我们什么时候需要关闭MongoConnection
- 15. 关闭php4安全模式 - 需要考虑什么?
- 16. 在什么情况下需要关闭HTTP连接?
- 17. 我需要关闭IAsyncOperation吗?
- 18. 需要多久Tomcat关闭?
- 19. Groovy XmlParser - >需要关闭?
- 20. OpenGL ES需要“关闭”吗?
- 21. 我需要关闭流吗?
- 22. 我需要Javascript关闭吗?
- 23. 为什么你需要在html中关闭段落,链接,图像等?
- 24. 为什么在这里需要关闭在循环中调用XMLHttpRequest函数?
- 25. 为什么在读取和写入管道时需要关闭fds?
- 26. 为什么需要typedef GLXContext?
- 27. 为什么Apache需要SSLCertificateKeyFile?
- 28. 为什么android需要jvm
- 29. 为什么BizTalk需要MSDTC?
- 30. 为什么需要StaticResource?