flutter - 如何在颤动中调用 setState
问题描述
这是如何setState
使用以下代码示例调用方法的任何本质区别吗?
1.在setState中设置状态变量
setState((){
_stateVariable1 = 'value1';
_stateVariable2 = 'value2';
});
2.在setState之外设置状态变量
_stateVariable1 = 'value1';
_stateVariable2 = 'value2';
setState((){});
解决方案
我认为除此之外没有太大区别;
数字 1 是官方认可的显示您想要执行状态更改的方式。第二个是我们新手喜欢这样做的方式:)
在这里阅读,
https://api.flutter.dev/flutter/widgets/State/setState.html
调用 setState 会通知框架此对象的内部状态已以可能影响此子树中的用户界面的方式发生更改,这会导致框架为此 State 对象安排构建。
这意味着是否在内部无关紧要。一切都是用你新设置的变量重建的。
通常建议 setState 方法仅用于包装对状态的实际更改,而不是任何可能与更改相关联的计算。
setState() 似乎无法处理未来的事件,它们需要等待并完成,然后才能将它们应用到 setstate 中。
https://flutter.dev/docs/perf/rendering/best-practices
当在状态上调用 setState() 时,所有后代小部件都会重建。因此,将 setState() 调用本地化到 UI 实际需要更改的子树部分。如果更改包含在树的一小部分,请避免在树的高处调用 setState()。
推荐阅读
- reactjs - 无需导入即可反应内联 css 类
- mysql - 我可以将 MySql 与 SignalR 一起使用吗?
- c - 已解决:使用 linux 内核源代码树中的 gcc 插件构建程序时出错
- c# - Azure Key Vault 使用 C# 添加访问策略
- c++ - 得分最高的击球手名字 - C++
- android-emulator - 使用 AOSP 运行多个模拟器时面临的问题
- c++ - 在 std::exception 的扩展中调用 what() 后的字符串修改值
- php - $_SESSION superglobal 被意外清空
- spring-boot - 从另一个(父)应用程序检索 Spring-Boot 中的用户/会话信息
- javafx - 如何将 TableColumn 设置为所需的宽度?