推新屏后如何重建状态
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 中的底部导航栏触发有状态小部件以通过导航重建自身?