flutter - 如何在 flutter 中拦截 AppBar 中的后退按钮

标签 flutter back-button

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

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

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

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

最佳答案

您可以使用 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 页上的弹出窗口返回的结果并运行您的逻辑

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


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

关于flutter - 如何在 flutter 中拦截 AppBar 中的后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54971988/

相关文章:

javascript - jquery ui tabs 支持浏览器后退按钮

android - 为什么我的后退按钮在关闭对话框 fragment 后不能正常工作

flutter - Dart:从Iterable <ActivityModel>转换为ActivityModel

android - flutter中使用.where后如何获取子集合

Android 自定义从子 Activity 到父 Activity 的转换

c# - 通过手机访问时防止网页缓存

iphone - 如何从 Storyboard 或快速在导航 View Controller 中添加默认后退按钮?

flutter - 在 Flutter 中使用 Provider 更新和动画化 AnimatedList

javascript - 在 Flutter Webview 中运行一些 Javascript 文件,例如 index.js

dart - flutter ,发送参数到前一个屏幕