我有一个从底部选项卡导航调用的页面执行initState函数,然后通过按钮单击导航到一个页面,其中包含详细信息和操作,但是当我单击后退按钮转到原始页面时,initState不会再次运行,我发现因为当你将一个放在顶部时Flutter不会破坏页面,因为NAV不在新页面上,因为它不在菜单中,如何在单击后退按钮时再次运行initState或者是还有另一种方法来监听从后退按钮导航并运行需要更新数据的代码吗?
任何帮助都会很棒.
解决方法
您可以覆盖AppBarand上的默认后退箭头,然后指定在调用Navigator.pop时要返回的值以触发状态更改:
伪代码
所以你需要在导航按钮的onpressed回调中有这样的东西
onpressed: ()async{ var nav = await Navigator.of(context).push(newRoute); if(nav==true||nav==null){ //change the state } },
在你的新路线你应该有这样的东西
new AppBar( leading: new IconButton( icon: new Icon(Icons.arrow_back),onpressed: (){Navigator.pop(context,true)} ),
我正在检查值null或true,因为当用户点击android屏幕上的BackButton(屏幕底部的那个)时返回null值.我也相信null也将与Flutter中的默认BackButton一起返回,因此您实际上不需要覆盖leading属性,但我自己没有检查过,因此可能值得检查.