空置状态有什么意义?

时间:2018-09-18 09:39:46

标签: flutter setstate

我想知道在不为变量设置新值的情况下调用$ ./build/tools/make_standalone_toolchain.py --arch x86_64 --api 21 -v --install-dir ../toolchains/oboe_record_proto/ Unsupported platform: CYGWIN_NT-10.0 的意义。

setState

3 个答案:

答案 0 :(得分:2)

文档说[[https://docs.flutter.io/flutter/widgets/State/setState.html]:

  

调用setState会通知框架此对象的内部状态已更改,该方式可能会影响此子树中的用户界面,这会导致框架为该State对象安排构建。

空括号{ }是空回调(因为您显然不需要一个):

  

所提供的回调立即被同步调用。 [...]

简而言之:

setState(() {});

是一种告诉框架重新构建状态对象的方法,而无需使用在构建后立即调用回调的可能性

答案 1 :(得分:1)

我想这只是一个惯例。上面可以改写为

readLocal() async {
  prefs = await SharedPreferences.getInstance();
  setState(() {
    id = prefs.getString('id') ?? '';
    if (id.hashCode <= peerId.hashCode) {
      groupChatId = '$id-$peerId';
    } else {
     groupChatId = '$peerId-$id';
   }
  });
}

两者都会做同样的事情。使setState(() {})发生突变后再调用state variable看起来很简洁而且很容易实现。

根据setState的{​​{3}}部分,它将按顺序排列在下面。

  1. 断言。如果任何断言失败,则引发异常并在那里停止。
  2. 执行回调函数final dynamic result = fn() as dynamic;
  3. 要求框架重建_element.markNeedsBuild();

答案 2 :(得分:0)

除了其他答案外,还有一个区别。

在已卸载的(setState())小部件上调用mounted == false时,它将失败。这意味着setState回调中包含的所有内容都不会被调用,而如果您在setState之外运行它,则会被执行。