0


Flutter中GetX系列九--路由/页面跳转,传值,中间件(GetPage)

1.页面传值跳转和中间件(GetPage)使用代码

  1. import 'package:flutter/material.dart';
  2. import 'package:flutterlianxi/login_VC.dart';
  3. import 'package:get/get.dart';
  4. import 'routers.dart';
  5. void main() {
  6. runApp(GetMaterialApp(
  7. home: BottomAppBarDemo(),
  8. //设置初始化路由
  9. initialRoute: "/",
  10. //全部配置页面跳转的动画(是安卓的风格还是ios的风格)
  11. defaultTransition: Transition.rightToLeft,
  12. //设置路由地址
  13. getPages: RoutersPageVC.routers,
  14. ));
  15. }
  16. class BottomAppBarDemo extends StatelessWidget {
  17. const BottomAppBarDemo({super.key});
  18. @override
  19. Widget build(BuildContext context) {
  20. return Scaffold(
  21. appBar: AppBar(
  22. title: Text("首页"),
  23. ),
  24. body: Column(
  25. children: [
  26. //普通页面跳转
  27. ElevatedButton(
  28. onPressed: () {
  29. //带参数传值跳转
  30. Get.toNamed("/login_VC", arguments: {"dataId": "2345"});
  31. //Get.back();//返回上一级页面
  32. // Get.offAll(Tabs());//返回到跟路由
  33. //Get.off(LoginVC());//跳转的页面没有返回按钮
  34. },
  35. child: const Text("路由跳转")),
  36. const SizedBox(
  37. height: 20,
  38. ),
  39. //中间件页面跳转
  40. ElevatedButton(
  41. onPressed: () {
  42. //在跳转的时候可以根据条件判断,不满足条件的时候跳转到其他页面
  43. Get.toNamed("/shop_VC");
  44. },
  45. child: const Text("中间件页面跳转")),
  46. ],
  47. ),
  48. );
  49. }
  50. }

1.1.使用to方法实现页面基本跳转

  1. import './Home.dart';
  1. ElevatedButton(
  2. onPressed: () async {
  3. Get.to(Home());
  4. },
  5. child: Text("跳转到首页")),

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

系统跳转方式

  1. //系统跳转方式
  2. Navigator.pushNamed(context, "/login")
** Getx跳转方式**
  1. //没有携带参数
  2. Get.toNamed("/login");
  3. //携带参数
  4. Get.toNamed("/shop",arguments: { "id":20 });
  5. //接收参数,可以直接通过Get.arguments
  6. print(Get.arguments);

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

系统跳转方式

  1. Navigator.of(context).pop();
Getx跳转方式​​​​​​​
  1. Get.back();

1.4.返回到根路由

系统跳转方式

  1. ElevatedButton(
  2. onPressed: () async {
  3. Navigator.of(context).pushAndRemoveUntil(
  4. MaterialPageRoute(builder: (BuildContext context) {
  5. return const Tabs(index: 4);
  6. }), (route) => false);
  7. },
  8. child: Text("跳转到首页")),
  9. ),

** Getx跳转方式**

  1. Get.offAll( const Tabs(index: 4));

1.5.跳转到下一个页面的,但是没有返回按钮(一般应用于闪屏页,登录页面等)

  1. Get.off(Login());

2. 设置路由的封装类

main类中的RoutersPageVC.routers封装

  1. import 'package:get/get.dart';
  2. import './login_VC.dart';
  3. import './shop_VC.dart';
  4. import './middle_VC.dart';
  5. class RoutersPageVC {
  6. static final routers = [
  7. GetPage(
  8. name: "/login_VC",
  9. page: () => const LoginVC(),
  10. transition: Transition.leftToRight //设置单个页面跳转的方式
  11. ),
  12. GetPage(
  13. name: "/shop_VC",
  14. page: () => const ShopPageVC(),
  15. middlewares: [MiddlePageVC()],//设置中间件(GetPage),可以根据优先级设置多个中间件
  16. ),
  17. ];
  18. }

3.路由封装类中的中间件 MiddlePageVC类的封装

  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import './login_VC.dart';
  4. //中间件(GetPage):可以做一些权限的判断.例如用户在跳转到支付页面,这个时候用户没有登录,就可以使用中间件的方式进行判断,先让用户跳转到中间件页面.具体使用详情如下:
  5. class MiddlePageVC extends GetMiddleware {
  6. //需要继承GetMiddleware
  7. @override
  8. //需要实现系统的该方法
  9. RouteSettings? redirect(String? route) {
  10. // return null;表示跳转到以前的路由
  11. //根据条件进行判断,满足条件进行跳转,否则不进行跳转
  12. return RouteSettings(name: "/login_VC",arguments: {});
  13. }
  14. }

4.跳转到对应页面时候,传递值的接收

  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. class LoginVC extends StatefulWidget {
  4. const LoginVC({super.key});
  5. @override
  6. State<LoginVC> createState() => _LoginVCState();
  7. }
  8. class _LoginVCState extends State<LoginVC> {
  9. @override
  10. void initState() {
  11. // TODO: implement initState
  12. super.initState();
  13. //直接通过Get就可以获取上一个页面传值
  14. print("获取传值:${Get.arguments["dataId"]}");
  15. }
  16. @override
  17. Widget build(BuildContext context) {
  18. return Scaffold(
  19. appBar: AppBar(
  20. title: Text("登录页面导航"),
  21. ),
  22. body: Container(
  23. child: Text("登录页面"),
  24. ),
  25. );
  26. }
  27. }

本文转载自: https://blog.csdn.net/eastWind1101/article/details/130702295
版权归原作者 ~废弃回忆 �༄ 所有, 如有侵权,请联系我们删除。

“Flutter中GetX系列九--路由/页面跳转,传值,中间件(GetPage)”的评论:

还没有评论