jamiechoo

 

用这个SharedPreferences怎样保存用户登陆后的状态、令牌、用户名和密码等

使用 SharedPreferences 保存用户登录后的状态、令牌、用户名和密码等信息非常方便。以下是一个完整的示例,包括如何保存和读取这些数据:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 shared_preferences 依赖:

dependencies:
  flutter:
  sdk: flutter
  shared_preferences: ^2.0.15 # 确保使用最新版本

2. 保存用户登录数据

创建一个函数,用于保存用户登录后的状态、令牌、用户名和密码:

import 'package:shared_preferences/shared_preferences.dart';
 
  Future<void> saveUserLoginData(bool isLoggedIn, String token, String username, String password) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setBool('isLoggedIn', isLoggedIn);
    await prefs.setString('token', token);
    await prefs.setString('username', username);
    await prefs.setString('password', password);
  }

3. 读取用户登录数据

创建一个函数,用于读取用户登录后的状态、令牌、用户名和密码:

import 'package:shared_preferences/shared_preferences.dart';
 
  Future<Map<String, dynamic>> getUserLoginData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool? isLoggedIn = prefs.getBool('isLoggedIn'); String? token = prefs.getString('token');
    String? username = prefs.getString('username'); String? password = prefs.getString('password');
    return { 'isLoggedIn': isLoggedIn ?? false, 'token': token ?? '', 'username': username ?? '', 'password': password ?? '', };
  }

4. 删除用户登录数据

创建一个函数,用于删除用户登录数据,例如用户注销时:

import 'package:shared_preferences/shared_preferences.dart';
 
  Future<void> clearUserLoginData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.remove('isLoggedIn'); await prefs.remove('token');
    await prefs.remove('username'); await prefs.remove('password');
   }

示例:使用保存和读取函数

以下是如何在应用中使用这些函数的示例:

  void main() async { // 保存用户登录数据
    await saveUserLoginData(true, 'some_token', 'user123', 'password123');// 读取用户登录数据
    Map<String, dynamic> loginData = await getUserLoginData();
    bool isLoggedIn = loginData['isLoggedIn'];
    String token = loginData['token'];
    String username = loginData['username'];
    String password = loginData['password'];
    print('Is Logged In: $isLoggedIn');
    print('Token: $token');
    print('Username: $username');
    print('Password: $password'); // 清除用户登录数据(例如用户注销时)
    await clearUserLoginData();
    }

注意事项

  • 由于 SharedPreferences 使用的是键值对存储,因此存储和读取时需要确保使用相同的键名。
  • SharedPreferences 适合存储小量数据,如果数据量较大或对安全性要求较高,建议使用其他存储方式,如 SQLite 或 flutter_secure_storage

posted on 2024-08-02 22:08  jamiechoo  阅读(78)  评论(0)    收藏  举报

导航