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
还是和之前一样,显示之前的值。
您可以手动控制TextField
的TextEditingController
,方法是提供自己的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页面导航无返回问题