Flutter GetX 路由管理之页面跳转方法

Flutter GetX之路由管理

概述

本篇文章主要介绍GetX框架中的Get路由管理。

初始化 GetX

要使用 GetX 需要对 GetX 进行初始化,将默认的 MaterialApp 替换为 GetMaterialApp 即可,这个在项目中已经完成,了解即可。如下:

dart 复制代码
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  /// @description ページ構築
  /// @param: context ページオブジェクト
  /// @return Widget
  @override
  Widget build(BuildContext context) {
    String initialRoute = "/board/construction/id/input";
    // グローバル設定
    return GetMaterialApp(
      theme: ThemeData(useMaterial3: false),
      navigatorKey: Get.key,
      translations: StringRes(),
      locale: const Locale('ja', 'JP'),
      fallbackLocale: const Locale('ja', 'JP'),
      getPages: getPage + getPageOnlyWorker,
      initialRoute: initialRoute,
      popGesture: false,
      builder: EasyLoading.init(),
      supportedLocales: const [Locale('ja', 'JP')],
      localizationsDelegates: const [
        GlobalMaterialLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
    );
  }
}

GetX路由管理

路由也是 Flutter 项目重要的一环,在 Flutter 中进行页面跳转就是通过路由实现,GetX 提供了 普通路由别名路由

普通路由

  • Get.to: 进入下一个界面
dart 复制代码
Get.to(CounterPage());
  • Get.off: 进入下一个界面,且导航没有返回, 也就是说在进入下一个页面之后,前画面被销毁
dart 复制代码
Get.off(CounterPage());
  • Get.offAll: 进入下一个界面,且导航没有返回,并且销毁之前的所有页面
dart 复制代码
Get.offAll(CounterPage());
  • Get.back: 返回上一个页面
dart 复制代码
Get.back();
  • Get.until():返回到指定页面
dart 复制代码
Get.until((route) => Get.currentRoute == '/home')

上面例子中就是返回到路由是'/home'的页面为止

  • Get.offUntil: 关闭到符合条件的路由,并跳转到指定路由
dart 复制代码
Get.offUntil(CounterPage(), (route) => route.settings.name == 'route');

offUntil如果没有找到符合条件的路由会将之前所有的路由依次关闭,也即是只有条件为true时才会停止关闭。

别名路由

首先创建一个 RouteGet(名字自己定义) 的类,用于统一配置路由映射关系:

咱们项目中已经存在这个文件,即 router_util_common.dartrouter_util_worker.dart这两个文件。这里了解即可

dart 复制代码
class RouteGet {
  /// page name
  static const String route = "/xxxx";

  ///pages map
  static final List<GetPage> getPages = [
    GetPage(
        name: route, 
        page: () => TestPage(), 
    )
  ];
}

GetPage 定义别名与页面的映射关系。

然后在 GetMaterialApp 进行initialRoutegetPages 的配置,即初始页面和路由映射集合:

dart 复制代码
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  /// @description ページ構築
  /// @param: context ページオブジェクト
  /// @return Widget
  @override
  Widget build(BuildContext context) {
    String initialRoute = "/board/construction/id/input";
    // グローバル設定
    return GetMaterialApp(
      theme: ThemeData(useMaterial3: false),
      navigatorKey: Get.key,
      translations: StringRes(),
      locale: const Locale('ja', 'JP'),
      fallbackLocale: const Locale('ja', 'JP'),
      getPages: getPage + getPageOnlyWorker,
      initialRoute: initialRoute,
      popGesture: false,
      builder: EasyLoading.init(),
      supportedLocales: const [Locale('ja', 'JP')],
      localizationsDelegates: const [
        GlobalMaterialLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
    );
  }
}

*使用方法与普通路由基本相同,只是方法上多了 Named

  • Get.toNamed 路由跳转:进入下一个页面
dart 复制代码
Get.toNamed(route);
  • Get.offNamed:同off一样,是同一个意思只是跳转方式不同
dart 复制代码
Get.offNamed(route);
  • Get.offAllNamed: 同offAll一样,进入下一个界面,且导航没有返回,并且销毁之前的所有页面
dart 复制代码
Get.offAllNamed(route);
  • Get.offAndToNamed: 关闭当前页面并跳转到指定路由页面
dart 复制代码
Get.offAllNamed(route);
  • Get.offNamedUntil: 关闭当前路由并跳转到符合条件的路由
dart 复制代码
Get.offNamedUntil('route', (route) => route.settings.name == 'route');

offNamedUntil如果没有找到符合条件的路由会将之前所有的路由依次关闭,也即是只有条件为true时才会停止关闭。

路由传参数

有2种传递参数的方法:

  • arguments传参
  • 问号传参(跟URL地址一样)

arguments传参

*发送任何参数都可以接收,不论是什么类型!甚至是类的实例!

使用 arguments 进行参数传递:

dart 复制代码
Get.to(CounterPage(), arguments: count);

在下个页面获取参数:

dart 复制代码
dynamic args = Get.arguments;

返回传参:

dart 复制代码
Get.back(result: 'success');

获取返回参数:

dart 复制代码
var data = await Get.to(CounterPage());

问号传参

在路由别名后面跟参数,类似于 Url get 传参的方式:只能接收字符串

dart 复制代码
Get.toNamed("/route?device=phone&id=354&name=Enzo");

使用别名后 Url 传递参数的方式,使用 Get.parameters 获取参数:这里就是直接获取对应的就可以了

dart 复制代码
Get.parameters['device']

出入栈说明图

相关推荐
遝靑27 分钟前
深入 Flutter 自定义 RenderObject:打造高性能异形滚动列表
flutter
kirk_wang29 分钟前
Flutter video_thumbnail 库在鸿蒙(OHOS)平台的适配实践
flutter·移动开发·跨平台·arkts·鸿蒙
走在路上的菜鸟37 分钟前
Android学Dart学习笔记第十三节 注解
android·笔记·学习·flutter
小a杰.2 小时前
Flutter跨平台开发权威宝典:架构解析与实战进阶
flutter·架构
恋猫de小郭2 小时前
Android 宣布 Runtime 编译速度史诗级提升:在编译时间上优化了 18%
android·前端·flutter
结局无敌3 小时前
Flutter性能优化实战:从卡顿排查到极致体验的落地指南
flutter·性能优化
火柴就是我3 小时前
dart 的 Lazy Iterable
flutter
走在路上的菜鸟3 小时前
Android学Dart学习笔记第十四节 库和导库
android·笔记·学习·flutter
遝靑4 小时前
Flutter 自定义渲染管线:从 CustomPainter 到 CanvasKit 深度定制(附高性能实战案例)
flutter
山屿落星辰4 小时前
Flutter 架构演进实战:从 MVC 到 Clean Architecture + Modularization 的大型项目重构指南
flutter