You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:45:10