Flutter使用GetX实现路由返回携带参数及上一页接收选中联系人结果
GetX路由返回传参及接收实现步骤
你当前ContactsList组件里写的Get.back(result:xxx)回传参数的逻辑是正确的,只需要补充上一页跳转时的结果接收逻辑即可,完整实现流程如下:
1. 上一页添加跳转&结果接收逻辑
Get.to()/Get.toNamed()默认返回Future对象,可以直接用await接收下一页调用Get.back()时携带的result参数:
// 上一页的跳转触发方法,比如点击「选择联系人」按钮时调用 void selectContact() async { // 等待联系人选择页返回结果,替换成你实际的联系人页路由写法即可 final String? selectedPhone = await Get.to(() => ContactsListPage()); // 非空判断,处理用户主动返回未选联系人的场景 if (selectedPhone != null) { // 拿到结果后处理你的业务逻辑,比如展示到输入框、赋值给状态变量 debugPrint("选中的联系人手机号:$selectedPhone"); } }
如果用命名路由,写法如下:
final String? selectedPhone = await Get.toNamed('/contacts/list');
2. 扩展回传参数(可选)
如果你需要回传完整联系人信息而非仅手机号,可以直接修改Get.back的result参数:
// ContactsList的onTap逻辑修改,回传整个contact对象 onTap: () { Get.back(result: contact); },
上页对应修改接收类型即可:
final AppContact? selectedContact = await Get.to(() => ContactsListPage()); if (selectedContact != null) { print(selectedContact.info.displayName); print(selectedContact.info.phones?.first.value); }
需要回传多个自定义字段也可以用Map封装:
Get.back(result: { "name": contact.info.displayName ?? "", "phone": contact.info.phones?.elementAt(0).value ?? "", "avatar": contact.avatarUrl });
注意事项
- 用户点击系统返回键、AppBar默认返回按钮时不会携带result,返回值默认为null,必须做非空判断避免空异常
- 回传的参数类型没有限制,支持所有Dart可序列化类型
内容的提问来源于stack exchange,提问作者Nashon Kimutai
相关产品推荐
相关产品推荐

