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

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

import 'package:flutter/material.dart';
import 'package:flutterlianxi/login_VC.dart';
import 'package:get/get.dart';
import 'routers.dart';

void main() {
  runApp(GetMaterialApp(
    home: BottomAppBarDemo(),
    //设置初始化路由
    initialRoute: "/",
    //全部配置页面跳转的动画(是安卓的风格还是ios的风格)
    defaultTransition: Transition.rightToLeft,
    //设置路由地址
    getPages: RoutersPageVC.routers,
  ));
}


class BottomAppBarDemo extends StatelessWidget {
  const BottomAppBarDemo({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("首页"),
      ),
      body: Column(
        children: [
          //普通页面跳转
          ElevatedButton(
              onPressed: () {
                //带参数传值跳转
                Get.toNamed("/login_VC", arguments: {"dataId": "2345"});

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

                // Get.offAll(Tabs());//返回到跟路由

                //Get.off(LoginVC());//跳转的页面没有返回按钮 
              },
              child: const Text("路由跳转")),
          const SizedBox(
            height: 20,
          ),
          //中间件页面跳转
          ElevatedButton(
              onPressed: () {
               //在跳转的时候可以根据条件判断,不满足条件的时候跳转到其他页面
                Get.toNamed("/shop_VC");
              },
              child: const Text("中间件页面跳转")),
        ],
      ),
    );
  }
}

2. 设置路由的封装类

main类中的RoutersPageVC.routers封装

import 'package:get/get.dart';
import './login_VC.dart';
import './shop_VC.dart';
import './middle_VC.dart';

class RoutersPageVC {
  static final routers = [
    GetPage(
        name: "/login_VC",
        page: () => const LoginVC(),
        transition: Transition.leftToRight //设置单个页面跳转的方式
        ),
    GetPage(
        name: "/shop_VC",
        page: () => const ShopPageVC(),
        middlewares: [MiddlePageVC()],//设置中间件(GetPage),可以根据优先级设置多个中间件
        ),
  ];
}

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

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import './login_VC.dart';

//中间件(GetPage):可以做一些权限的判断.例如用户在跳转到支付页面,这个时候用户没有登录,就可以使用中间件的方式进行判断,先让用户跳转到中间件页面.具体使用详情如下:

class MiddlePageVC extends GetMiddleware {
  //需要继承GetMiddleware

  @override
  RouteSettings? redirect(String? route) {
    // return null;表示跳转到以前的路由
    //根据条件进行判断,满足条件进行跳转,否则不进行跳转
    return RouteSettings(name: "/login_VC",arguments: {});
  }
}

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

import 'package:flutter/material.dart';
import 'package:get/get.dart';

class LoginVC extends StatefulWidget {
  const LoginVC({super.key});

  @override
  State createState() => _LoginVCState();
}

class _LoginVCState extends State {
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    //直接通过Get就可以获取上一个页面传值
    print("获取传值:${Get.arguments["dataId"]}");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("登录页面导航"),
      ),
      body: Container(
        child: Text("登录页面"),
      ),
    );
  }
}

你可能感兴趣的:(Flutter,flutter,中间件,页面跳转,路由跳转,GetPage使用详情)