推新屏后如何重建状态

Posted

技术标签:

【中文标题】推新屏后如何重建状态【英文标题】:How to rebuild the state after pushing a new screen 【发布时间】:2020-03-04 17:37:39 【问题描述】:

当我使用 Navigator 推送一个新屏幕 onTap 并传递一个新的类构造函数时,如何在每次 _playerTimer 更新时更新该新屏幕而无需再次单击

由于我的新班级状态只更新onTap,请帮忙!

FullScreenDialog 的 build 方法被调用一次,因为它只在按下 onTap 时被构建

InkWell(
            onTap: () 
              return Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (BuildContext context) => FullScreenDialog(
                        _playerTimer,
                  ));
            ,
            child: VideoPlayer(
                        _controller,)
          );

【问题讨论】:

【参考方案1】:

您必须使用 setState 来重建 UI。 例如:

setState(()
  _playerTimer = _playerTimer + 1;
);

这就是我可以提供的所有帮助,而无需查看您的其余代码

【讨论】:

【参考方案2】:

当您通过传递一个属性来实例化一个新类(在您的代码中将是 FullScreenDialog)时,您只是对您的代码说一个新类将使用您提供的参数进行初始化。

如果您希望您的 FullScreenDialog 类在 _playerTimer 更改时始终更新,则必须使用 在该类中观察此属性>setState(),它是 StatefulWidgets 的内置函数,可在每次可观察属性更改时更新应用的 UI。

示例

setState( () 
  _playerTimer = getUpdatedTimer();
);

假设在 getUpdatedTimer() 方法中,您将管理更新此变量的逻辑,调用服务等。 如果您希望在不与界面交互的情况下更新此变量,您可能还需要一个计时器。查看this问题以了解更多详情。

如果你刚开始 Flutter 开发,我建议你阅读这篇关于状态管理的文章 (Adding interactivity to your Flutter app) 和 setState method 文档。

希望对您有所帮助。

【讨论】:

以上是关于推新屏后如何重建状态的主要内容,如果未能解决你的问题,请参考以下文章

有状态与无状态的区别如何影响小部件何时重建?

我们如何使用 Flutter 中的底部导航栏触发有状态小部件以通过导航重建自身?

setState() 如何重建子部件?

如何在父状态更改后重建子项(和重放动画)

setState 是不是会在颤动中为屏幕重建整个小部件树,以及它与其他状态管理相比如何

在重建时 Flutter 重用 StatefulWidget 的状态