首页 > 其他分享 >Flutter Getx 路由管理

Flutter Getx 路由管理

时间:2024-01-13 21:34:44浏览次数:26  
标签:const name Get GetPage page Getx Flutter 路由

GetX 为我们封装了 Navigation ,无需 context 可进行跳转,使用 GetX 进行路由跳转非常的简单, 只需要调用 Get.to() 即可进行路由跳转, GetX 路由跳转简化了跳转动画设置 、动画时长定义、动画 曲线设置

Get.to()实现普通路由跳转

一、设置应用程序入口
当我们导入依赖后,在应用程序顶层把 GetMaterialApp 作为顶层,如下所示
import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(  //重点
      title: "GetX",
      home: Scaffold(
        appBar: AppBar(
          title: Text("GetX Title"),
        ),
      ),
    );
  }
}
二、调用to方法切换路由
        ElevatedButton(
            onPressed: () async {
              Get.to(KidPage());  //页面跳转
              // Get.to("/page");
            },
            child: const Text("GetX中路由跳转")
                             )

调用Get.toNamed()跳转到命名路由

以前
Navigator.pushNamed(context, "/login");
使用Getx后
Get.toNamed("/login");

Get.toNamed("/shop",arguments: {
"id":20
});

Get.back(); 返回到上一级页面

以前
Navigator.of(context).pop();
使用Getx后
Get.back();

Get.offAll(); 返回到根

以前
Navigator.of(context).pushAndRemoveUntil(
        MaterialPageRoute(builder: (BuildContext context) {
          return const Tabs(index: 4);
        })
       , (route) => false);
使用Getx后
Get.offAll( const Tabs(index: 4));

Get.off(NextScreen());

进入下一个页面,但没有返回上一个页面的选项(用于闪屏页,登录页面等)。
Get.off(NextScreen());

Flutter Getx 配置路由以及动画

GetX可以使用之前命名路由的 onGenerateRoute 也可以使用 getPages 来配置路由;

一、defaultTransition可以配置默认动画
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      debugShowCheckedModeBanner: false, //去除debug图标
      theme: ThemeData(primarySwatch: Colors.red),
      initialRoute: "/",
      defaultTransition: Transition.rightToLeftWithFade, //默认动画效果
      getPages: [ //配置路由
        GetPage(name: "/", page: () => const MypageGet()),
        GetPage(name: "/MyHomePage", page: () => const MyHomePage()),
      ],
    );
  }
}
二、GetPage 可以配置动态路由
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
          primarySwatch: Colors.blue,
          appBarTheme: const AppBarTheme(
            centerTitle: true,
          )),
      initialRoute: "/",
      defaultTransition: Transition.rightToLeftWithFade, //页面跳转动画
      getPages: [ //配置路由
        GetPage(name: "/", page: () => const Tabs()),
        GetPage(name: "/login", page: () => const LoginPage()),
        GetPage(
            name: "/registerFirst",
            page: () => const RegisterFirstPage(),
            transition: Transition.rightToLeft), //页面跳转动画
        GetPage(
            name: "/registerSecond", page: () => const RegisterSecondPage()),
        GetPage(name: "/registerThird", page: () => const RegisterThirdPage()),
        GetPage(name: "/shop", page: () => const ShopPage()),
      ],
    );
  }
}
三、Getx 路由跳转传值以及接受数据
路由配置
getPages: [
...
GetPage(name: "/shop", page: () => const ShopPage()),
...
],
跳转传值
Get.toNamed("/shop",arguments: {
"id":20
});
接受数据
print(Get.arguments);
print(Get.arguments['id']);

Flutter Getx 路由抽离

新建routes.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:xcx_flutter/page/getX/getx.dart';
import 'package:xcx_flutter/page/homepage.dart';

class APPage {
  static final routes = [
    GetPage(name: "/", page: () => const MypageGet()),
    GetPage(name: "/MyHomePage", page: () => const MyHomePage()),
  ];
}
入口
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return   GetMaterialApp(
      debugShowCheckedModeBanner: false, //去除debug图标
      theme: ThemeData(primarySwatch: Colors.red),
      initialRoute: "/",
      getPages: APPage.routes,
      // home: MypageGet(),
    );
  }
}

Flutter Getx 中间件配置

新建shopMiddleware.dart
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
class ShopMiddleWare extends GetMiddleware {
@override
// 优先级越低越先执行
int? get priority => -1;
@override
RouteSettings redirect(String ? route){
  print("——————————中间件打印————————————");
  print(route);
return const RouteSettings(name: '/KidPage');
}
}
GetPage配置路由
class APPage {
  static final routes = [
    GetPage(name: "/", page: () => const MypageGet()),
    GetPage(
        name: "/MyHomePage",
        page: () => const MyHomePage(),
        middlewares: [ShopMiddleWare()]), //中间件使用
    // KidPage
    GetPage(name: "/KidPage", page: () => const KidPage()),
  ];
}

 

 

 

标签:const,name,Get,GetPage,page,Getx,Flutter,路由
From: https://www.cnblogs.com/xbinbin/p/17959659

相关文章

  • Next.js 开发指南 路由篇 | App Router
    Next.js开发指南路由篇|AppRouter 前言路由(routers)是应用的重要组成部分。所谓路由,有多种定义,对于应用层的单页应用程序而言,路由是一个决定URL如何呈现的库,在服务层实现API时,路由是解析请求并将请求定向到处理程序的组件。简单的来说,在Next.js中,路由决定了一个页......
  • flutter android grandle buid.gradle
    buildsettingbuildscript{ext.kotlin_version='1.5.20'repositories{//google()//mavenCentral()maven{url'https://maven.aliyun.com/repository/central'}maven{url'https://maven.aliyun.c......
  • Wi-Fi 7路由器来啦!抢先拆机评测!
    Wi-Fi7真的来啦!最近几个月,国内多家厂商密集发布了Wi-Fi7路由器新品,引起了整个市场的关注。这些新品的出现,标志着Wi-Fi7真正进入了全面商用的阶段。我们每个用户,都可以开始接触并使用这项最新技术。为了抢先体验Wi-Fi7的性能提升,作为数码圈资深伪geeker的小枣君,第一时间入手了一......
  • Flutter 自定义一个右侧可滑动 左侧为按钮的组件
    Flutter自定义一个右侧可滑动左侧为按钮的组件vartopicList=["圈子话题1","圈子话题2","圈子话题3","圈子话题4-天气很好","圈子话题5","圈子话题6"];@overrideWidgetbuild(BuildContextcontext){returnSizedBox(height:40......
  • 路由--基础入门
    VueRouter,是一个用于Vue.js的官方路由管理器。它和Vue.js核心深度集成,使得构建单页面应用(SPA)变得简单。在单页面应用中,页面不会重新加载整个页面,而是通过动态加载和替换页面的某些部分来实现与用户的交互 routerindex.js//1.定义路由组件.import{createRoute......
  • 集成 Firebase 后,Flutter IM SDK 在 Android 端不触发回调
    描述客户已集成FirebaseMessaging,Android平台FlutterIMSDK的不触发任何回调。分析(根因分析、需求分析)可能原因是客户构建了一个FlutterEngineinstance,导致SDK的FlutterEngineinstance失效了。解决方案找到以下java文件packages/firebase_messaging/firebase_me......
  • 如何在uniapp中使用路由进行页面跳转
    Laravel是一个流行的PHP框架,它具有出色的可测试性,可以帮助开发人员在更短的时间内编写可靠的代码。但是,即使使用了这个框架,也可能会出现测试覆盖率较低的情况。测试覆盖率是指代码中已由测试案例覆盖的部分比例。测试覆盖率越高,代码质量越高。在本文中,我们将分享几种技巧,帮助您提......
  • uniapp中如何实现路由跳转动画
    Laravel是一个流行的PHP框架,它具有出色的可测试性,可以帮助开发人员在更短的时间内编写可靠的代码。但是,即使使用了这个框架,也可能会出现测试覆盖率较低的情况。测试覆盖率是指代码中已由测试案例覆盖的部分比例。测试覆盖率越高,代码质量越高。在本文中,我们将分享几种技巧,帮助您提......
  • Flutter组件GridView使用介绍
    介绍GridView是Flutter中用于创建网格布局的滚动小部件。它可以创建多列布局,并且每个网格单元可以包含一个小部件。GridView提供了几种构造函数来创建不同类型的网格布局:GridView:最通用的构造函数,完全自定义网格布局。GridView.builder:按需构建网格项,适用于具有大量(或无限)网格......
  • flutter中InheritedWidget共享数据
    InheritedWidget是Flutter框架中用于在Widget树中共享数据的机制。它是一个特殊的Widget,可以将其放置在Widget树的上层,并向下传递共享的数据给其子Widget。子Widget可以通过InheritedWidget来获取共享的数据,而不需要通过显式地将数据传递给它们。import'package:flutter/materi......