2

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

4

3 回答 3

1

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

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

Page2 上的 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() 来刷新页面。

于 2021-02-28T09:16:17.183 回答
1

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

于 2021-02-28T09:18:03.243 回答
0

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

于 2021-03-02T02:48:54.477 回答