App 自动登录逻辑代码实现Flutter

594 阅读1分钟

1. 登录状态的保存;利用shared_preferences: ^2.0.15

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);
 }
}

1.1判断:

initialRoute: isLogin ? AppPages.INITIAL1 : AppPages.INITIAL,

2. 用户数据的存储;利用sqflite_common_ffi: ^2.1.1

2.1初始化数据库(这里只保存用户名称和密码做演示):

sqfliteFfiInit();
var databaseFactory = databaseFactoryFfi;
var db = await databaseFactory.openDatabase(inMemoryDatabasePath);
await db.execute('''
CREATE TABLE UserInfo (
   id INTEGER PRIMARY KEY,
   userName TEXT,
   pwd TEXT
)
''');

2.2 登录(保存用户登录的账号密码)

void _login() async{
    await LoginMsg.setIsLogin(true);
    if(_userNameController.text.isNotEmpty && _pwdController.text.isNotEmpty){
      mlw_Loading.mlw_LoadingShow('正在登录');
      var databaseFactory = databaseFactoryFfi;
      var db = await databaseFactory.openDatabase(inMemoryDatabasePath);
      await db.insert('UserInfo', <String, Object?>{'userName': '${_userNameController.text}','pwd':'${_pwdController.text}'});
      mlw_Loading.mlw_LoadingDismiss();
      Get.offNamed('/tabs');
    }else{
      BrnToast.show("账号密码为空", context,);
    }
  }

2.3退出登录(删除数据库)

void loginOut() async {
  await LoginMsg.setIsLogin(false);
  var databaseFactory = databaseFactoryFfi;
  var db = await databaseFactory.openDatabase(inMemoryDatabasePath);
  var result = await db.delete('UserInfo');
  Get.offNamed('/login');
}

2.4查询 用户数据

var databaseFactory = databaseFactoryFfi;
var db = await databaseFactory.openDatabase(inMemoryDatabasePath);
var result = await db.rawQuery('''SELECT 
    userName
    FROM
    UserInfo ''');