渲染后更新有状态窗口小部件变量吗?

时间:2019-06-23 05:05:59

标签: flutter bloc statefulwidget

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

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

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

现在,如果我没有更改配置小部件中的URL,那么我现在在主窗口小部件中使用wantKeepAlive机制来避免重新填充ListView;如果不这样做,则每次我重建主窗口小部件时返回它的选项卡,即使我没有在“配置小部件”中进行任何更改。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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