Get.toNamed 如何传参,arguments值举例

1,229 阅读2分钟

在 Flutter 的 GetX 库中,通过 Get.toNamed 方法跳转路由时,可以通过 arguments 参数传递数据给新的页面。arguments 参数可以接受任何类型的对象,从简单的字符串和数字到复杂的 Dart 对象。

以下是如何通过 Get.toNamed 传参的一个示例:

// 假设你有一个命名路由 '/detail'
// 在你的路由设置中:
GetPage(
  name: '/detail',
  page: () => DetailPage(),
);

// 你可以在跳转时通过 arguments 传递一个字符串:
Get.toNamed('/detail', arguments: 'Hello Detail');

// 或者传递一个数字:
Get.toNamed('/detail', arguments: 123);

// 甚至传递一个 Map:
Get.toNamed('/detail', arguments: {
  'name': 'GetX',
  'isAwesome': true,
});

// 或传递一个自定义的 Dart 对象:
final user = User(name: 'Alice', age: 30);
Get.toNamed('/detail', arguments: user);


在目标页面,例如 DetailPage,你可以使用 Get.arguments 来获取传递过来的参数:

class DetailPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 直接通过 Get.arguments 访问参数
    final argumentData = Get.arguments;

    // 根据传入的数据类型进行处理
    // 例如, 如果传入的是一个 Map, 你可能会这么获取数据:
    // final name = argumentData['name'];
    // final isAwesome = argumentData['isAwesome'];

    return Scaffold(
      appBar: AppBar(title: Text('Detail Page')),
      body: Center(
        child: Text('Passed Argument: $argumentData'),
      ),
    );
  }
}

在这个示例中,无论跳转时传递的是什么类型的arguments,在DetailPage里都可以通过Get.arguments来接收。从而使得在 Flutter 中的页面之间的数据传递变得简单和清晰。只需要记住,在获取和使用Get.arguments的数据时可能需要进行相应的类型检查或转换,以确保能够正确地处理传入的参数。

例如,如果你传递的是一个复杂的对象,可能需要先确定参数不为空,然后再进行类型转换:

class DetailPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 获取传递来的参数
    final argumentData = Get.arguments;

    // 检查参数不为空并进行类型转换
    if (argumentData is User) {
      final user = argumentData as User;
      // 现在你可以访问User对象的属性
      print('User Name: ${user.name}');
    }

    return Scaffold(
      appBar: AppBar(title: Text('Detail Page')),
      body: Center(
        // 根据参数类型显示不同的内容
        child: Text(
            'Passed Argument: ${argumentData is Map ? 'Name: ${argumentData['name']}, IsAwesome: ${argumentData['isAwesome']}' : argumentData}'),
      ),
    );
  }
}

在上述代码中,DetailPage首先检查了通过Get.arguments接收到的参数是否为期望的User类型的对象。如果是,它将其转换成User类型并获取具体的属性值。

需要注意的是,Get.arguments是动态类型的,在使用之前应该总是检查其实际类型,以免运行时发生类型错误。

通过这种方式,你可以在 Flutter 应用中实现页面间的参数传递和接收,这不仅可以传递基本类型的数据,还可以传递复杂类型的数据结构,从而在不同的页面间传递必要的信息。