首页 > 解决方案 > 如何在颤动中调用 setState

问题描述

这是如何setState使用以下代码示例调用方法的任何本质区别吗?

1.在setState中设置状态变量

setState((){
  _stateVariable1 = 'value1';
  _stateVariable2 = 'value2';
});

2.在setState之外设置状态变量

_stateVariable1 = 'value1';
_stateVariable2 = 'value2';
setState((){});

标签: flutterstatesetstate

解决方案


我认为除此之外没有太大区别;

数字 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()。


推荐阅读