flutter开发实现自动登录的方式

       要想实现自动登录,就必须记住登录状态,我们可以通过shared_preferences比较轻量的插件实现数据持久化

        打开pubspec.yaml文件,dependencies模块底下加入shared_preferences: ^0.5.12,加载完依赖后新建一个dart文件,并保存登录状态

import 'package:shared_preferences/shared_preferences.dart';

class LoginMsg{
  //获取数据
  static Future<bool> getIsLogin() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool  isLogin = (prefs.getBool('isLogin') ?? false);
    return isLogin;
  }
  //设置数据
  static Future<void> setIsLogin(bool isLogin) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setBool('isLogin', isLogin);
  }
}

在登录后保存设置登录状态为true,并将登录数据保存到数据库中(数据库的方法在此就不写了)

bool isTrue = await LoginServer.login(userInfo);
if (!isTrue){
  EasyLoading.showToast("用户名或密码错误");
  return;
}
UserInfoDao userInfoDao = UserInfoDao();
int i = await userInfoDao.instert(userInfo);
if (i > 0) {
  await LoginMsg.setIsLogin(true);
  Navigator.of(context).pushReplacementNamed("/tabs");
  EasyLoading.dismiss();
} 

为了实现自动登录,需要在启动时判断登录状态,此时,需要在main方法如下所示

void main() {
  // 开启布局线
  debugPaintSizeEnabled = false;
  // 实例化dio
  ApplicationDioUtils.dioUtil = DioUtil();
  // 确保WidgetsFlutterBinding被初始化,使同步方法运行
  WidgetsFlutterBinding.ensureInitialized();
  realRunApp();
}

进入初始化页面的方法:

void realRunApp() async{
  // 判断用户之前是否登录
  bool isLogin = await LoginMsg.getIsLogin();
  if(isLogin){
    // 重走登录逻辑
    isLogin = await login();
  }
  runApp(MaterialApp(
      title: 'Flutter测试app',
      // 定义全局navigatorKey(导航键)
      navigatorKey: navigatorKey,
      // 初始化路由
      initialRoute: isLogin ? "/tabs" : "/login",
      routes: <String, WidgetBuilder>{
         //注册后不走路由生成钩子方法
        "/": (BuildContext context) => LoginPage(),
        '/tabs': (BuildContext context) => TabsPage(),
        '/login': (BuildContext context) => LoginPage(),
      },
    ));
}

获取数据调用登录方法:

Future<bool> login() async{
    UserInfo userInfo = await queryAll();
    bool isLogin = await LoginServer.login(userInfo);
    LoginMsg.setIsLogin(isLogin);
    return isLogin;
}

  
/// 获取当前登录用户数据
Future<UserInfo> queryAll() async {
  UserInfoDao userInfoDao = UserInfoDao();
  List<UserInfo> list = await userInfoDao.getUserInfoList();
  return list[list.length - 1];
}

到此,自动登录的逻辑就全部实现了

项目地址:flutterBase: flutter基础环境

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值