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();
},
),
],
),
),
);
}
}
二,测试效果:

浙公网安备 33010602011771号