Flutter:在不使用ValueKey的情况下更新窗口小部件

时间:2020-03-02 14:56:18

标签: flutter

我有一个带有一个参数(例如“ order”)的小部件(例如“ OrderScreen”),问题是当我更改顺序时,OrderScreen未更新。解决此问题的一种方法是像这样使用ValueKey

Order _order;

@override
Widget build(BuildContext context) {
  return Container(
    width: double.infinity,
    height: double.infinity,
    child: OrderScreen(
      key: ValueKey(_order),
      order: _order
    ),
  );
}

但是我的问题是我已经在使用密钥来访问OrderScreen状态:

final _orderScreenStateKey = GlobalKey<OrderScreenState>();
Order _order;

@override
Widget build(BuildContext context) {
  return Container(
    width: double.infinity,
    height: double.infinity,
    child: OrderScreen(
      key: _orderScreenStateKey,
      order: _order
    ),
  );
}

每次更改_order时,有没有办法说Flutter更新此小部件?

2 个答案:

答案 0 :(得分:1)

如果发现需要访问其他窗口小部件中的_order数据,则可能需要查看Provider。 Provider允许您相当轻松地管理各个小部件的状态。

here

提供了很好的视频概述

答案 1 :(得分:0)

如果您想在每次更改_order时进行更新,并且操作与小部件在同一类中。

setState(() {
  this._order = _newOrder;
});

setState将使用新值重建小部件。