
登录页
js
// 账号
TextEditingController accountController = TextEditingController();
// 密码
TextEditingController passwordController = TextEditingController();
// 用户信息
UserUserinfoModel userInfo = UserUserinfoModel();
// 登录历史
List<LoginHistoryModel> loginHistoryList = [];
// 是否切换账号
bool isSwitch = false;
// 登录
void submit() async {
if (accountController.text.isEmpty) return Loading.toast('请输入账号');
if (passwordController.text.isEmpty) return Loading.toast('请输入登录密码');
Loading.show();
var res = await UserApi.login(UserLoginReq(
account: accountController.text,
password: passwordController.text,
));
if (res.token!.isNotEmpty) {
await Storage().setString('token', res.token!);
userInfo = await UserApi.getUserInfo();
// 如果登录历史不为空,筛选account是否有重复的则删除,否则正常添加
if (loginHistoryList.isNotEmpty) {
loginHistoryList.removeWhere((element) => element.amount == accountController.text);
}
// 本地存入登录历史
loginHistoryList.add(LoginHistoryModel(
account: accountController.text,
password: passwordController.text,
avatarUrl: userInfo.avatar,
nickname: userInfo.nickname,
));
await Storage().setJson('loginHistoryList', loginHistoryList);
Loading.success('登录成功');
if(isSwitch) {
// 如果是切换账号,返回tabbar
Get.until((route) => route.settings.name == '/');
} else {
Get.offAllNamed('/');
}
}
update(["login"]);
}
切换账号页
js
import 'dart:convert';
import 'package:get/get.dart';
import 'package:xinghuodarong/common/index.dart';
import 'package:xinghuodarong/pages/tab/main/index.dart';
class SwitchAccountController extends GetxController {
SwitchAccountController();
// 登录历史
List<LoginHistoryModel> loginHistoryList = [];
// 用户信息
UserUserinfoModel userInfo = UserUserinfoModel();
// 管理开启
bool isManage = false;
// 切换管理
void onManage() {
isManage = !isManage;
update(["switch_account"]);
}
_initData() async{
// 获取登录历史
var stringLoginHistoryList = Storage().getString('loginHistoryList');
loginHistoryList = stringLoginHistoryList !="" ? jsonDecode(stringLoginHistoryList).map<LoginHistoryModel>((item){
return LoginHistoryModel.fromJson(item);
}).toList() : [];
// 获取用户信息
userInfo = await UserApi.getUserInfo();
update(["switch_account"]);
}
@override
void onReady() {
super.onReady();
_initData();
}
// 删除
void onDel(LoginHistoryModel item) {
loginHistoryList.remove(item);
Storage().setJson('loginHistoryList', loginHistoryList);
Loading.success('删除成功');
isManage = false;
update(["switch_account"]);
}
// 切换
void onSwitch(LoginHistoryModel item) async {
Loading.show();
try {
// 先尝试登录
var res = await UserApi.login(UserLoginReq(
account: item.amount,
password: item.password,
));
if (res.token!.isNotEmpty) {
// 清除旧token
await Storage().remove('token');
// 存新token
await Storage().setString('token', res.token!);
Loading.success('切换成功');
Get.until((route) => route.settings.name == '/');
} else {
Loading.error('登录失败');
}
} catch (e) {
Loading.error('切换失败');
}
}
}
路由规则,/
-> 设置页
-> 切换账号页
最后由登录页的Get.until((route) => route.settings.name == '/');
返回。