首页 > 解决方案 > 如何在颤动中拦截AppBar中的后退按钮

问题描述

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

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

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

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

标签: flutterback-button

解决方案


您可以在 Page 2 上用 WillPopScope 包围您的脚手架,将 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(),
        ),
      ),
    ),
  );
}

这篇文章的答案代码

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

除了上述代码之外,您还将以下代码添加到第 2 页。 更改

Navigator.of(context).pop() 

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

然后在您导航的第 1 页中,您将等待导航并使用从第 2 页的弹出窗口返回的结果并运行您的逻辑

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


 if(navigationResult == 'upload_files') {
    uploadFiles(); // Perform your custom functionality here.
 }

推荐阅读