[英]How to intercept back button in AppBar in flutter
当第 1 页从第 2 页返回时,我正在使用拦截器https://pub.dartlang.org/packages/back_button_interceptor执行方法。
如果我使用设备返回按钮从第 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(),
),
),
),
);
}
这篇文章的答案代码
编辑:添加到第 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.
}
AppBar
的默认后退按钮是来自material.dart
BackButton
小部件。 你可以手动创建它并传递你自己的onPressed
来做你想做的事:
return Scaffold(
appBar: AppBar(
leading: BackButton(onPressed: _onBackPressed),
title: Text('Title'),
),
body: Container(),
);
如果您没有在AppBar
指定leading
,那么它会使用执行Navigator.maybePop(context)
的处理程序创建一个BackButton
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.