每次打开它时我都想要新的(新鲜的)颤动页面小部件

Posted

技术标签:

【中文标题】每次打开它时我都想要新的(新鲜的)颤动页面小部件【英文标题】:I want new (fresh) flutter page widget every time I open it 【发布时间】:2021-05-30 02:33:56 【问题描述】:

当我离开页面小部件并稍后返回时,它会保留上一个会话的先前信息。每次打开它时,我都想从头开始创建一个新的页面小部件。我该如何实现?

【问题讨论】:

你可以弹出两次导航Navigator.pop(context)然后再次导航到你的屏幕,你会发现它绝对是一个新鲜的。 【参考方案1】:

我猜你的问题是在使用 Navigator.push() 进入新页面后,你在弹出新页面后得到了页面的先前状态。

在这种情况下,您可以在弹出新页面后调用 setState。执行以下操作:

第 2 页上的 Navigator.pop():

Navigator.pop(context,1);    /// Passing an extra parameter (1) to Page1 after popping

Page1 中的 Navigator.push() :

Navigator.push(context,MaterialPageRoute(builder: (context) => Page2())).then((value)
      if(value == 1)
        setState(() );         /// Here you can keep a conditional refresh like if you pass 1 in Navigator.pop() then only will it refresh the page
/// It's useful when you want to refresh the page only for specific conditions.
);

Navigator.push() 之后的 .then() 函数将在 Page2 弹出后被调用,如该函数中所述,将调用 setState() 来刷新页面。

【讨论】:

Page2 使用自动返回按钮 你可以覆盖后退按钮来控制它在点击时会做什么。请点击此链接:***.com/questions/49079580/… 不清楚。不过可以使用这个:appBar: AppBar( leading: BackButton(onPressed: () ,), 我以为你说的是​​android/ios设备后退按钮【参考方案2】:

您确定在浏览页面时正确关闭它们(结束它们的生命周期)。如果不尝试导航,您确定在浏览页面时正确关闭它们(结束它们的生命周期)。如果不尝试使用 pushReplacement 而不是 push 导航

【讨论】:

【参考方案3】:

将小部件的主要数据放在小部件声明中是可行的。我想问题是所用数据的范围。如果在小部件声明之外,数据基本上是全局的,并且每次导航到小部件时都是相同的。

【讨论】:

以上是关于每次打开它时我都想要新的(新鲜的)颤动页面小部件的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中从类(小部件外部)打开屏幕

小部件中的图像 [颤动]

导航抽屉未在颤动中从 APPBar 小部件打开

创建一个在颤动中创建小部件的按钮[关闭]

在颤动中单击按钮时添加小部件时处理动态复选框列表

颤动:小部件可以替代自己吗?