点击后退按钮时如何执行

Rob*_*ert 6 flutter

我有一个从底部选项卡导航调用的页面执行initState函数,然后通过按钮单击导航到一个页面,其中包含详细信息和操作,但是当我单击后退按钮转到原始页面时,initState不会再次运行,我发现因为当你将一个放在顶部时Flutter不会破坏页面,因为NAV不在新页面上,因为它不在菜单中,如何在单击后退按钮时再次运行initState或者是还有另一种方法来监听从后退按钮导航并运行需要更新数据的代码吗?

任何帮助都会很棒.

err*_*337 27

您可以使用WillPopScope收听 pop (创建一个小部件,该小部件注册一个回调以否决用户尝试关闭封闭的 [ModalRoute]。-> 来自文档):

@override
Widget build(BuildContext context) {
 return WillPopScope(
  onWillPop: () {
    print('Backbutton pressed (device or appbar button), do whatever you want.');

    //trigger leaving and use own data
    Navigator.pop(context, false);

    //we need to return a future
    return Future.value(false);
  },
  child: Scaffold(
  ...
  ),
 );
}
Run Code Online (Sandbox Code Playgroud)

希望我答对了你的问题,这会有所帮助:)!


azi*_*iza 11

您可以覆盖默认的后退箭头AppBar,然后指定要返回的值以在Navigator.pop调用时触发状态更改:

伪代码

所以你需要在onPressed导航按钮的回调中有这样的东西

onPressed: ()async{
            var nav = await Navigator.of(context).push(newRoute);
            if(nav==true||nav==null){
              //change the state
            }
          },
Run Code Online (Sandbox Code Playgroud)

在你的新路线你应该有这样的东西

new AppBar(
        leading: new IconButton(
          icon: new Icon(Icons.arrow_back),
          onPressed: (){Navigator.pop(context,true)}
        ),
Run Code Online (Sandbox Code Playgroud)

我正在检查这两个值,null或者true因为当用户点击Android屏幕上的BackButton(屏幕底部的那个)时返回null值.我也相信null也将与Flutter中的默认BackButton一起返回,因此您实际上不需要覆盖该leading属性,但我自己没有检查过,因此可能值得检查.

  • 如果从设备返回按钮怎么办? (3认同)

归档时间:

查看次数:

8537 次

最近记录:

7 年,3 月 前