如何在扑动中拦截AppBar中的后退按钮

问题描述 投票:0回答:1

当页面1从第2页返回时,我正在使用拦截器https://pub.dartlang.org/packages/back_button_interceptor来执行方法。

如果我使用设备返回按钮从第2页返回到第1页,则执行该方法。

但是如果我使用appBar上的箭头按钮从第2页回到第1页,我无法执行该方法。

后退箭头按钮功能如何默认为设备后退按钮?

flutter back-button
1个回答
4
投票

您可以使用WillPopScope在第2页上围绕脚手架,将onWillPop设置为false以防止页面被系统弹出,然后将您自己的后退按钮添加到应用栏的主要小部件中并在那里执行弹出。

@override
Widget build(BuildContext context) {
  return new WillPopScope(
    onWillPop: () async => false,
    child: new Scaffold(
      appBar: new AppBar(
        title: new Text("data"),
        leading: new IconButton(
          icon: new Icon(Icons.ac_unit),
          onPressed: () => Navigator.of(context).pop(),
        ),
      ),
    ),
  );
}

来自this post的答案代码

编辑:添加到第2页以控制导航

除了上面的代码,您还可以将以下代码添加到第2页。更改

Navigator.of(context).pop() 

Navigator.of(context).pop('upload_files')

然后在您导航的第1页中,您将等待导航,并使用第2页上的pop返回的结果并运行您的逻辑

var navigationResult = await Navigator.push(
        context,
        new MaterialPageRoute(
            builder: (context) => Page2()));


 if(navigationResult == 'upload_files') {
    uploadFiles(); // Perform your custom functionality here.
 }
© www.soinside.com 2019 - 2024. All rights reserved.