Flutter:setState()中的代码是否重要?

Jus*_*s10 11 state setstate dart flutter

当我们想要重建StatefulWidget时,我们会调用setState()但是如果我们输入的代码在该函数内部或在其外部,那真的很重要吗?

这是:

class _ShoppingListState extends State<ShoppingList> {
  Set<Product> _shoppingCart = new Set<Product>();
  void _handleCartChanged(Product product, bool inCart) {
    setState(() {
      if (inCart)
        _shoppingCart.add(product);
      else
        _shoppingCart.remove(product);
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

与此相同:

class _ShoppingListState extends State<ShoppingList> {
  Set<Product> _shoppingCart = new Set<Product>();
  void _handleCartChanged(Product product, bool inCart) {
    if (inCart)
      _shoppingCart.add(product);
    else
      _shoppingCart.remove(product);
    });
    setState((){});
  }
}
Run Code Online (Sandbox Code Playgroud)

Ron*_*urs 14

根据文件:

@protected

void setState (
    VoidCallback fn
)
Run Code Online (Sandbox Code Playgroud)

通知框架此对象的内部状态已更改.

每当您更改State对象的内部状态时,请在传递给setState的函数中进行更改:

setState(() { _myState = newValue });

提供的回调会立即同步调用.它不能返回未来(回调不能是异步),因为那时不清楚状态何时实际被设置.

并且

通常,建议仅使用setState方法将实际更改包装到状态,而不是任何可能与更改关联的计算.

它并没有明确说出任何关于调用是否在函数内部或外部的事情.但它确实建议把它放进去.而且在我看来,如果将更改放在setState函数中,它也更具可读性和逻辑性


Rém*_*let 7

您应该在闭包内部进行所有变异,并在闭包外部进行计算。

  • API的部分_is_确保立即调用setState,建议仅在内部进行突变是出于可读性目的。 (3认同)