Flutter使用GetX跳转页面传参时出现空值调用[]错误如何解决?
Flutter GetX路由传参调用[]报错修复方案
报错根因
你出现The method '[]' was called on null.报错的核心原因是Get.arguments的获取时机错误:
你在第二个页面Controller的类属性声明阶段就直接赋值dynamic argumentData = Get.arguments;,类属性初始化的时机早于路由参数注入的时机,此时Get.arguments还未被赋值为你传递的数组,默认为null,后续在onInit中访问argumentData[0]就会触发空调用异常。
排查步骤
- 先验证跳转前参数是否正常生成:在第一个页面的
Get.to执行前,添加打印print(controller._phoneNumberController.text);,确认输入框内容能正常获取,排除参数源为空的问题 - 确认项目已正确接入GetX:main.dart的入口使用
GetMaterialApp替代原生MaterialApp,这是GetX路由、传参功能生效的基础 - 确认第二个页面的Controller没有提前初始化:不要在跳转前就对第二个页面的Controller执行Get.put操作,尽量使用路由绑定或者页面内初始化的方式,避免Controller初始化时路由参数还未生成
修复代码
将Get.arguments的获取逻辑移到onInit生命周期内执行,同时添加空校验避免异常:
@override void onInit() { super.onInit(); // 把参数获取移到onInit中执行,此时路由参数已经注入完成 dynamic argumentData = Get.arguments; // 增加空校验和类型校验,避免极端情况报错 if (argumentData != null && argumentData is List && argumentData.isNotEmpty) { print(argumentData[0]); } else { print("未接收到有效路由参数"); } }
优化建议(可选)
传递参数时使用Map替代数组,避免索引错位导致的取值错误:
- 跳转时传参修改为:
Get.to(SecondPage(), arguments: { "phoneNumber": controller._phoneNumberController.text });
- 取值代码修改为:
@override void onInit() { super.onInit(); String? phoneNumber = Get.arguments?["phoneNumber"]; print(phoneNumber ?? "未获取到手机号"); }
内容的提问来源于stack exchange,提问作者Kevnlan
相关产品推荐
相关产品推荐

