Flutter Getx 的页面传参

1.使用 Getx 的简单传参
Dart 复制代码
//跳转发起页面
void toPage(){  
  Get.toNamed(RouterPages.page2+"?${RouterArgumentKey.Argument1}=直接 传参" );  
}

//接收页面
@override  
void onReady() {  
  super.onReady();  
  parameters.value = Get.parameters[RouterArgumentKey.Argument1]??"";  
}
2.使用Getx的 parameters 进行页面传参

parameters参数是Map<String, String>?类型 ,所以只能传键值对的参数,并且只能是String,实际和第一种简单传参的方式一样,在Getx 的路由跳转方法里转换的。 示例代码:

Dart 复制代码
//跳转发起页面
void toPage2(){  
  Get.toNamed(RouterPages.page2,parameters:{RouterArgumentKey.Argument1:"parameters 传参"} );  
}

//接收页面
@override  
void onReady() {  
  super.onReady();  
  parameters.value = Get.parameters[RouterArgumentKey.Argument1]??"";  
}
3.使用 Getx 的 arguments 进行页面传参

arguments 参数是 dynamic 类型,该类型可以持有任何类型的值,所以可以往里面放任何的数据;列如:复杂对象、 Map、数值 示例代码:

dart 复制代码
//数据类
class User {  
  final String name ;  
  final int age;  
  User({required this.name,required this.age});  
  
  @override  
  String toString() {  
    return 'User(name: $name, age:$age)';  
  }  
}

//跳转发起页面
void toPage1(){  
  Get.toNamed(RouterPages.page1,arguments:User(name:"arguments 传参",age: 21)); 
}

//接收页面
@override  
void onReady() {  
  super.onReady();  
  var user = Get.arguments as User;  
  argument.value = user.toString();  
}
4.同时使用 Getx的arguments 和parameters 一起进行传参

示例代码:

Dart 复制代码
//跳转发起页面
void toPage5(){  
  Get.toNamed(RouterPages.page5,arguments:{RouterArgumentKey.Argument1:"arguments 传参"} ,parameters:{RouterArgumentKey.Argument1:"parameters 传参"});  
}

//接收页面
@override  
void onReady() {  
  super.onReady();  
  argument.value = Get.arguments[RouterArgumentKey.Argument1];  
  parameters.value = Get.parameters[RouterArgumentKey.Argument1]??"";  
}
5.使用自定义 ParamManager 进行传参

因为在开发中业务需求 需要同时打开多页面,但是使用 Getx的传参会出现前面页面的参数被最后一个页面的传参覆盖,导致前面页面的传参丢失,所以就自定义了一个 ParamManager 对传参进行统一管理

  1. 首先创建 ParamManager 方法类
Dart 复制代码
import 'package:get/get.dart';  
  
class ParamManager extends GetxService{  
  static ParamManager get to => Get.find();  
  // 使用Map存储每个页面的参数,key 为路由名称  
  final Map<String,dynamic> _params = {};  
  
  Future<ParamManager> init() async{  
    return this;  
  }  
  //设置参数  
  void setParams(String routeName, dynamic arguments){  
    _params[routeName] = arguments;  
  }  
  
  //获取参数  
  dynamic getParams(String routeName){  
    return _params[routeName];  
  }  
  //清除单个参数  
  void clearParams(String routeName){  
    _params.remove(routeName);  
  }  
  //清除所有的参数  
  void clearAll(){  
    _params.clear();  
  }  
  
}
  1. 在应用启动的时候进行初始化
Dart 复制代码
static Future init() async{  
  //初始化 flutter 框架  
  WidgetsFlutterBinding.ensureInitialized();  
  setSystemUi();  
  
  await Get.putAsync<ParamManager>(()=> ParamManager().init());  
}
//应用启动
void main() {  
  Global.init();  
  runApp(const MyApp());  
}
  1. 跳转页面并进行传参:
Dart 复制代码
void toPage4(){  
  //通过ParamManager 解决问题 page 3 的问题  
  ParamManager.to.setParams(RouterPages.page4, {RouterArgumentKey.Argument1:"page 4 arguments 传参"});  
  Get.toNamed(RouterPages.page4,);  
  toPage2();  
}
  1. 页面打开后的接收参数:
Dart 复制代码
@override  
void onReady() {  
  super.onReady();  
  //获取传参  
  argument.value = ParamManager.to.getParams(RouterPages.page4)[RouterArgumentKey.Argument1];  
}  
  
@override  
void onClose() {  
  super.onClose();  
  //清除传参  
  ParamManager.to.clearParams(RouterPages.page4);  
}

具体代码请查看完成的示例项目:flutter_getx_argument

相关推荐
程序员老刘·15 小时前
从短剧App的bug看响应式编程在AI时代的优势
flutter·ai编程·跨平台开发
传奇开心果编程1 天前
【Flutter踩坑排雷】第7课:巨型 build 函数坑|全部 UI 写在同一个 build,维护难、隐性异常
android·flutter·ios·移动开发·跨平台·dart·声明式ui
程序员老刘1 天前
从短剧App的bug看响应式编程在AI时代的优势
flutter·ai编程·客户端
恋猫de小郭2 天前
最近 Android 有什么更新:Android Dev Summit 2026 技术解读
android·前端·flutter
好的佩奇2 天前
Dart 之类修饰符
android·flutter·dart
好的佩奇013 天前
Dart 之类修饰符
android·flutter·dart
Jewel1053 天前
文字为什么总是不居中!记录一个bug
android·flutter·ios
2601_949847753 天前
Form-data 跨端三方库仓颉适配全流程
前端·javascript·flutter
大龄秃头程序员3 天前
Flutter 中我为什么把 GetX 定位为高效率方案,而不是默认架构方案
flutter
传奇开心果编程4 天前
组合优先开发范式:从汉字造字原理到声明式UI组件组合思想
android·flutter·ios·swiftui·移动开发·harmonyos·android jetpack