flutter: 检查是否登录,登录成功后才跳转到目标页面

一,代码:

说明:getx的middleware有个缺陷,不能获取到目标页面的arguments,
         所以写一个函数,用来代替页面的跳转

1,functions.dart

import 'package:get/get.dart';
import '../services/AuthService.dart';

//检查是否登录,如未登录则跳转到登录页
void checkLoginAndgoPage(name,args) {
  var authServ = Get.find<AuthService>();
  bool isLogin = authServ.isLoggedIn.value;
  //bool isLogin = true;
  if (isLogin == true) {
    Get.toNamed(name,arguments: args);
  } else {
    //跳转到login页面,把要跳转到的地址也写入到args这个map中
    args['destPageName'] = name;
    Get.toNamed("/login",arguments: args);
  }
}

//确认已登录然后跳转
void afterLoginAndgoPage(args) {
  //判断ars中是否包含destPageName,如果包含则删除此key
  if (args.containsKey('destPageName')) {
      var name = args['destPageName'];
      args.remove('destPageName');
      Get.toNamed(name,arguments: args);
  }
}

2, 原页面

            ElevatedButton(
              child: Text("next页面,需登录访问"),
              onPressed: () {
                var args = {
                  "id":120,
                  "name":"苏东坡新传上",
                };
                checkLoginAndgoPage("/next",args);
              },
            ),

3,登录页面

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

import '../../conf/functions.dart';
import '../../services/AuthService.dart';

class TokenPage extends StatefulWidget {
  @override
  State<TokenPage> createState() => _TokenPageState();
}

class _TokenPageState extends State<TokenPage>  {

  final storage = FlutterSecureStorage();
  var authServ = Get.find<AuthService>();
  @override
  Widget build(BuildContext context) {

    var args = Get.arguments;

    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text("token页面"),
      ),

      body: Center(
        child:Column(
          children:[

            Obx(() => Text('当前是否登录: ${authServ.isLoggedIn.value}')),
            Obx(() => Text('当前用户token: ${authServ.userToken.value}')),
            SizedBox(
              height: 30,
            ),
            ElevatedButton(
              child: Text("登录"),
              onPressed: () async {
                  authServ.login('老刘123321');
                  //判断是否成功,如果成功,则跳转到要跳转的页面
                  afterLoginAndgoPage(args);
              },
            ),
            SizedBox(
              height: 30,
            ),
            ElevatedButton(
              child: Text("退出"),
              onPressed: () async {
                authServ.logout();
              },
            ),
          ],
        ),

      ),

    );
  }

}

 

二,测试效果:

 

posted @ 2025-04-26 08:37  刘宏缔的架构森林  阅读(128)  评论(0)    收藏  举报