flutter - 如何在颤动中拦截AppBar中的后退按钮
问题描述
当第 1 页从第 2 页返回时,我正在使用拦截器https://pub.dartlang.org/packages/back_button_interceptor执行方法。
如果我使用设备返回按钮从第 2 页返回到第 1 页,则执行该方法。
但是,如果我使用 appBar 上的箭头按钮从第 2 页返回到第 1 页,我将无法执行该方法。
后退箭头按钮功能如何默认为设备后退按钮?
解决方案
您可以在 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.
}
推荐阅读
- reactjs - 如何将 React Web 应用程序部署到 Fiori Launchpad?
- json - 当请求变量是动态的时,无法解析 reqbody json 对象
- python - 从 tkinter 列表框中获取对象
- python - ssl.SSLError: [SSL: UNSUPPORTED_PROTOCOL] Docker Python:3.6-slim 中不支持的协议 (_ssl.c:852)
- android - FTPS 无法在具有自签名证书的 Android 设备上连接
- java - 任何人都可以调试结果吗?并解释 x 的值
- java - 在 Spring 中将文件流从 http servlet 响应转换为 multipartfile
- python - 未见数据中不存在虚拟变量级别
- c# - C# StreamWriter 替换值的字符
- batch-file - 有没有办法在批处理脚本的变量中添加多行?