Flutter Getx中如何通过命名路由传递列表与变量并正确接收?
解决Flutter Getx路由传参后目标页面获取数据的错误
你的错误原因是直接在类的成员变量初始化阶段访问Get.arguments,Dart不允许在初始化器中访问实例成员,必须在组件生命周期方法(如initState)、Getx控制器的onInit方法,或者build方法内获取参数。
另外注意:传递数据时你写的List[index]是笔误,应该是变量名list[index](小写l),否则会因访问类型而非变量报错。
下面是几种正确的参数接收方式:
方式一:在StatefulWidget的initState中获取
class EditAddNewHomeScreen extends StatefulWidget { @override _EditAddNewHomeScreenState createState() => _EditAddNewHomeScreenState(); } class _EditAddNewHomeScreenState extends State<EditAddNewHomeScreen> { late UserModel userData; late String? itemId; @override void initState() { super.initState(); // 强制转换参数类型,确保类型安全 final List<dynamic> args = Get.arguments; userData = args[0] as UserModel; itemId = args[1] as String?; } @override Widget build(BuildContext context) { // 直接使用userData和itemId return Scaffold( body: Column( children: [ Text(userData.name), Text(itemId ?? "无ID"), ], ), ); } }
方式二:使用Getx控制器的onInit方法(推荐Getx项目使用)
// 定义控制器 class EditAddNewHomeController extends GetxController { late UserModel userData; late String? itemId; @override void onInit() { super.onInit(); final List<dynamic> args = Get.arguments; userData = args[0] as UserModel; itemId = args[1] as String?; } } // 页面组件 class EditAddNewHomeScreen extends StatelessWidget { // 初始化控制器 final EditAddNewHomeController controller = Get.put(EditAddNewHomeController()); @override Widget build(BuildContext context) { return Scaffold( body: Obx(() { // 通过控制器访问数据 return Column( children: [ Text(controller.userData.name), Text(controller.itemId ?? "无ID"), ], ); }), ); } }
方式三:在StatelessWidget的build方法中直接获取(简单场景)
class EditAddNewHomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { final List<dynamic> args = Get.arguments; final UserModel userData = args[0] as UserModel; final String? itemId = args[1] as String?; return Scaffold( body: Column( children: [ Text(userData.name), Text(itemId ?? "无ID"), ], ), ); } }
内容的提问来源于stack exchange,提问作者Manish sahu
相关产品推荐
相关产品推荐

