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']

出入栈说明图

相关推荐
ZZZMMM.zip13 小时前
基于鸿蒙HarmonyOS NEXT开发AI英语口语应用:智能口语练习新体验与鸿蒙Flutter框架跨端实
人工智能·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
心中有国也有家14 小时前
AtomGit Flutter 鸿蒙客户端:白噪音场景的视觉设计
学习·flutter·华为·harmonyos
心中有国也有家14 小时前
AtomGit Flutter 鸿蒙客户端:呼吸练习的完整生命周期
学习·flutter·华为·harmonyos
心中有国也有家16 小时前
AtomGit Flutter 鸿蒙客户端:呼吸球动画
学习·flutter·华为·harmonyos
心中有国也有家19 小时前
AtomGit Flutter 鸿蒙客户端:呼吸练习的三种科学模式
学习·flutter·华为·harmonyos
yuanlaile20 小时前
前端转 Flutter 自学完整规划,避开跨栈思维转换误区
前端·flutter·flutter跨平台开发
姑苏倾城客20 小时前
Flutter中,html 与 dart 桥接沟通
javascript·flutter·html
ZZZMMM.zip20 小时前
基于鸿蒙HarmonyOS NEXT开发AI书籍推荐应用:智能阅读新体验与鸿蒙Flutter框架跨端实践
人工智能·flutter·华为·harmonyos·鸿蒙
铅笔侠_小龙虾21 小时前
DSL-Flutter : 告别嵌套地狱,用缩进书写 Flutter!
flutter
ZZZMMM.zip1 天前
基于鸿蒙HarmonyOS NEXT开发AI股票分析应用:智能投资新体验与鸿蒙Flutter框架跨端实践
人工智能·flutter·华为·harmonyos·鸿蒙