Flutter 导航破坏和杀死页面值

Posted

技术标签:

【中文标题】Flutter 导航破坏和杀死页面值【英文标题】:Flutter navigation destroy and kill page values 【发布时间】:2021-07-02 20:50:57 【问题描述】:

我有两页,一页是 A,另一页是 B。 A 是我查看正在存储的数据列表的主页, B 是临时的第二页(我的自定义文本编辑器),我在其中输入要保存的不同值,然后在 A 中查看。

当我从 A 去 B 时使用:

Navigator.push(context,MaterialPageRoute(builder: (context) => B_page())); 在我输入数据列表的值并单击保存后,它会将我带到 A 使用 Navigator.of(context).pop();

但是当我再次单击以在 B 中创建另一个数据列表时,页面并未恢复或清理为先前初始化的数据仍然存在,就像页面恢复了一样。

Navigator.of(context).pop(); 有什么替代方法吗?我想销毁并清除在 A 中单击时要重新创建的页面。

例如:TextField 更改为name = 'Name1', nickname = 'Boss', company = 'SmallDoda';index = 8;.pop() 时,第一个初始化值如String name = '', nickname = '', company = '';int index = 1; 然后再次导航到B 值相同index = 8; 而不是index = 1; 我想杀死当前页面重新创建。

【问题讨论】:

请把你称为页面 B 的代码和页面 B 的起始代码放在一起。你说的没有意义,我相信正在发生的事情是你必须传递一些东西到页面B 对此感到抱歉,据我所知Navigator.of(context).pop(); 应该删除一个页面而不是存储任何内容吗? 【参考方案1】:

如果您自己不提供TextField,则会创建一个TextEditingController

我猜有一个对您的 B 页面/屏幕的引用,它将您的 TextField 保留在内存中的该页面上,而不是处理它。所以当你回到B时,TextField和它的TextEditingController还是和之前一样,显示之前的值。

您可以手动控制TextFieldTextEditingController,方法是提供自己的TextEditingController 并在.pop() 返回页面A 时清除其值。

这是另一个answer showing you exactly how。

【讨论】:

感谢您的回复,抱歉没有说清楚。在我的程序中,在开始 index=1 时,当我使用 pop(); 时,每次用户在页面 B 中添加对象时我 ++index 不应该清除页面 B 中的所有值吗?因为当我再次创建它时,前一个索引是相同的 index=7 而不是 1。

以上是关于Flutter 导航破坏和杀死页面值的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序被杀死时,无法在推送通知单击时导航到特定屏幕(Flutter android)

为啥在我的 Flutter Web 上使用路径 URL 策略会破坏我的导航?

Flutter/IOS混和开发情况下,项目内首个Flutter页面导航无返回问题

11Flutter--路由和导航

Flutter:带有嵌套导航的底部导航栏和更改选项卡时恢复根页面

Flutter开发之Widget布局和页面导航