flutter - Flutter - 设置用户导航返回时返回的结果
问题描述
调用时Navigator.pop()
可以将结果传递到上一个屏幕。有没有办法设置结果,如果用户自己导航回来,结果仍然返回到上一页?
我可以将一个对象传递给第二页,然后对其进行修改,以便在第二页返回时第一页可以检查它,但我宁愿使用从导航器返回的结果,因为它更具可读性。
正如我在其他地方看到的那样,覆盖后退按钮的点击检测器不是一个可接受的解决方案,因为用户可能会以其他方式导航回来,例如滑动或按下 Android 后退按钮。
解决方案
是的,您可以通过两种方式在屏幕之间传递数据。弹回时,data
从第二个屏幕发送您希望这样发送的内容
RaisedButton(
onPressed: () {
// The Nope button returns "data" as the result.
Navigator.pop(context, 'data');
},
child: Text('Nope!'),
);
并像这样在您的第一个屏幕中捕获结果
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
对于用户可以通过按下后退按钮返回到上一个屏幕的另一个问题,您可以使用WillPopScope
小部件包装您的第二个屏幕并提供onWillPop
回调。这将覆盖第二个屏幕的弹出并执行回调,您可以在其中定义您希望从第二个屏幕返回的值。
@override
Widget build(BuildContext context) {
return WillPopScope(
child: Scaffold(), // or your widget
onWillPop: () {
return Future.delayed(Duration(microseconds: 0), () {
return Navigator.pop(context, "return-data");
});
},
);
}
推荐阅读
- c++ - 为什么除了最后一帧反汇编的每一帧都没有调用命令
- c# - 将 json 嵌套数组解析为 c# 对象
- javascript - 打字稿:使用特殊字符访问接口键的嵌套对象值
- rabbitmq - Rabbitmq beam.smp 进程无缘无故地利用了大部分内存大小
- android - 抛出异常“打开失败:EROFS(只读文件系统)”
- terraform - 在 azure 中输出网关的公共 ip 以在 cloudfare 中自动创建新记录
- kubernetes - KOPS 位于/从哪里运行?
- android - Realm Studio 未从 csv 文件导入变音符号
- sql - SQL Server 连接两个表,结果中的总和不正确
- payment - Authorize.NET - SIM 集成 - 错误 13