0

如何在属性值之一更改后立即强制 Widget 重建?一些伪代码:

class Live extends StatefulWidget {

  String name;
Live(this.name);

  @override
  _LiveState createState() => _LiveState();
}

class _LiveState extends State<Live> {

 // some turbo logic I don't want to move to Live class
 ..

  @override
  Widget build(BuildContext context) {
    return Column(childrens: [
    Text(widget.name),
    Card(content calculated based on turbo logic),
    ]
      
    );
  }
}

String name 属性更新时(基于父级的 setState 调用),一切都是实时发生的。更改会立即反映在 Text 小部件中。这个值是立即可见的,因为我正在使用widget.name调用,所以在built()方法中我使用的是Live类中的属性而不是状态。

问题是另一个包裹在 Card 中的小部件在标记为// some turbo logic I don't want to move to Live class. 由于这个事实,当我想在本节中查看更新时,我需要切换选项卡并转到例如设置,然后返回实时选项卡以查看与卡片内容相关的更改。我相信它会再次触发 build() 方法。

戈拉斯:

  • nameLive 小部件中更新值后,状态小部件会立即重建。
  • 不要移动turbo logic到 Live 类并将其保留在 State 类中
4

1 回答 1

0

首先,您StatefulWidget应该是不可变的,因此只包含不可变的字段。我建议您将name字段移入State并使用二传手将其更改。setter 应该调用setState(),这将导致所需的重建。

有关更多信息,请参阅此介绍- 特别是“鸟”示例代码,以了解如何编写 setter。

于 2021-03-15T14:59:52.490 回答