在呈现后更新有状态的小部件变量?

Updating a stateful widget variable after it has rendered?

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

Configuration Widget 用作 Main Widget 的 'configuration section'——我用它来设置诸如背景颜色和 Main Widget 中用于从中获取数据的 URL 变量之类的东西网络服务。

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

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

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

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

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

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

  @override
  void initState() {
    WidgetsBinding.instance.addPostFrameCallback(_onLayoutDone);
    super.initState();
  }