0

我正在使用带有两个选项卡的TabBarView,每个选项卡都显示一个有状态小部件——让我们称它们为主小部件和配置小部件。

配置小部件用作主小部件的“配置部分”——我使用它来设置主小部件中的背景颜色和 URL 变量等内容,该变量用于从 Web 服务中获取数据。

Main Widget 有一个由该 Web 服务填充的 ListView。我正在使用Bloc模式将事件从一个小部件发送到另一个小部件,这就是配置小部件将 URL 值发送到主小部件的方式——一个事件被触发,由 bloc 提供成为一个“状态”对象Main Widget 可以在其构造函数中读取并用于构建 ListView 的新 URL。

现在,如果我没有更改配置小部件中的 URL,我在主小部件中使用wantKeepAlive机制来避免重新填充 ListView——如果我不这样做,每当我返回其选项卡时,主小部件都会重建,即使我没有更改配置小部件中的任何内容。

我想要做的是有选择地设置该值,以便在配置中更改 URL 时,将wantKeepAlive值更新为,false以便 ListView使用新 URL 重建。但是当它完成构建时,将wantKeepAlive值设置回true,因此不会进行重建,直到下一个 URL 更改。

方法完成后是否可以调用生命周期方法build(),我可以在哪里设置wantKeepAlive设置?我认为在构建方法本身中这样做是行不通的。欢迎提出建议,谢谢。

4

1 回答 1

2

在构建小部件后,您可以使用addPostFrameCallback您的WidgetsBinding实例执行一些代码。

  _onLayoutDone(_) {
    //add your code here
  }

  @override
  void initState() {
    WidgetsBinding.instance.addPostFrameCallback(_onLayoutDone);
    super.initState();
  }
于 2019-06-23T05:27:49.063 回答