Flutter使用GetX跨页面传参时Get.arguments始终为null如何解决
GetX 跨页面传参接收值恒为null解决方案
核心问题排查顺序(按踩坑概率从高到低)
- 参数获取时机错误(90%新手踩坑)
不要在页面类的成员变量声明位置、build方法外部、组件初始化构造函数执行阶段直接调用Get.arguments。此时新页面的路由上下文还未注入GetX路由栈,读取到的参数必然是null。
正确的参数读取位置:- 直接在
build方法内部第一行读取 - 如果用了GetX控制器,在控制器的
onInit生命周期里读取
对应你写的接收页代码,修正后参考:
class Pro extends StatelessWidget { @override Widget build(BuildContext context) { // 必须放在build方法内,路由挂载完成后才能拿到有效参数 var data = Get.arguments; return Scaffold( body: Column( children: [ TextButton( child: Text("Move Back"), onPressed: () { Get.back(); }), Text(data.toString()), ], ), ); } } - 直接在
- 检查根组件配置
如果你应用的根组件用的是原生MaterialApp而不是GetMaterialApp,GetX的整套路由逻辑都不会生效,不仅传参为null,Get.to/Get.back这类方法也会出现上下文找不到的问题。根组件必须按如下方式配置:void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { // 必须用GetMaterialApp替换原生MaterialApp return GetMaterialApp( home: HomePage(), ); } } - 检查是否混用路由方法
跳转的时候必须统一使用Get.to/Get.off/Get.toNamed这类GetX提供的路由方法,如果你混用了Flutter原生的Navigator.push跳转,GetX无法捕获原生路由传递的参数,读取Get.arguments就会是null。
额外小提示:你跳转代码里传的字符串
'somethng'存在拼写错误(正确拼写是something),这个问题不会影响参数传递,只是代码规范问题,可自行修正。
内容的提问来源于stack exchange,提问作者flutter app
相关产品推荐
相关产品推荐

