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

标签 flutter bloc statefulwidget

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

Configuration Widget 用作 Main Widget 的“配置部分”——我用它来设置诸如背景颜色和 Main Widget 中的 URL 变量之类的东西,该 URL 变量用于从 Web 服务获取数据。

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

现在我使用 wantKeepAlive如果我没有更改配置小部件中的 URL,则主小部件中的机制可以避免重新填充 ListView——如果我不这样做,即使我没有更改任何内容,只要我返回到它的选项卡,主小部件就会重建在配置小部件中。

我想做的是有选择地设置该值,以便在配置中更改 URL 时,将 wantKeepAlive 值更新为 false,这样 ListView < em>确实使用新 URL 重建。但是当它完成构建时,将 wantKeepAlive 值设置回 true,因此在下一次 URL 更改之前不会完成重建。

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

最佳答案

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

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

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

关于flutter - 在呈现后更新有状态的小部件变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56721182/

相关文章:

flutter - 如何从Flutter中的其他Dart文件访问功能?

ios - 在pubspec.yaml中添加Google Maps软件包后,Flutter的iOS应用将无法构建

Flutter Cubit 状态不离开起点(MyInitialState)

flutter - Flutter StatefulWidget 中的变量范围

dart - 如何创建展开面板

pdf - 如何使用 dart_pdf 在 flutter 中将 Assets 图像和图标转换为 PdfImage

flutter - 如何访问 showModalBottomSheet 中提供的 (Provider.of()) 值?

flutter - 使用 bloc 创建全局加载屏幕的最佳方法?

flutter - 为什么在 StatefulWidget 中没有定义 build 方法?

flutter - 如何从Stateless类中的onPressed调用StatefulWidget的方法?