Flutter中返回上一页面时如何回传数据?
Flutter页面返回时传递数据的最佳实现方式
对于页面A跳转页面B后回传数据的需求,最直接轻量的方案是利用Flutter Navigator的异步返回值特性,无需额外引入状态管理库,步骤如下:
1. 页面A:接收返回数据
在页面A中,通过async/await等待Navigator.push的返回结果,拿到数据后直接处理(比如更新页面状态):
// 页面A的跳转逻辑示例 ElevatedButton( onPressed: () async { // 启动页面B并等待返回数据 final result = await Navigator.push( context, MaterialPageRoute(builder: (context) => const PageB()), ); // 处理返回的数据,需判断是否为null(用户按系统返回键时result为null) if (result != null) { setState(() { // 示例:将返回数据赋值给页面A的变量 _receivedData = result; }); } }, child: const Text("跳转到页面B"), )
2. 页面B:返回并传递数据
在页面B中,调用Navigator.pop时传入要回传的数据(支持任意类型:字符串、Map、自定义对象等):
// 页面B的返回逻辑示例 ElevatedButton( onPressed: () { // 准备要回传的数据,这里以自定义对象为例 final userData = User(name: "Keshav", age: 25); // 关闭页面B并将数据传回页面A Navigator.pop(context, userData); }, child: const Text("返回页面A并传数据"), )
注意事项
- 如果用户直接按系统返回键,页面A收到的
result会是null,必须做非空判断避免异常 - 传递自定义对象时,确保对象是可序列化的(比如使用不可变类、或手动实现序列化逻辑)
- 若涉及多页面、复杂数据流转,可考虑状态管理方案(如Riverpod、Provider),但简单回传场景下Navigator方案足够高效
内容的提问来源于stack exchange,提问作者Keshav Passi
相关产品推荐
相关产品推荐

