iOS转flutter,设计一个单例模式并缓存信息(用户登录信息)

一、需要用到的第三方插件

1、缓存
shared_preferences:
2、创建数据模型 (序列化)
json_annotation:
build_runner:
json_serializable:

二、创建数据模型

新建user.dart文件
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
  User(this.name, this.age);
  String name;
   int age;
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}
会有报错,在项目根目录执行命令:
flutter packages pub run build_runner watch
代码运行后,就会生成user.g.dart文件 

三、创建单例文件

import '../../constants/constants.dart';
import '../user.dart';
import 'package:shared_preferences/shared_preferences.dart';
class SharedPreferencesManager {
// 工厂方法构造函数
  factory SharedPreferencesManager() => _getInstance();
  // instance的getter方法,通过SharedPreferencesManager.instance获取对象
  static SharedPreferencesManager get instance => _getInstance();
  // 静态变量_instance,存储唯一对象
  static final SharedPreferencesManager _instance =
      SharedPreferencesManager._internal();
  // 私有的命名式构造方法,通过它可以实现一个类可以有多个构造函数,
  // 子类不能继承internal不是关键字,可定义其他名字
  SharedPreferencesManager._internal();
  // 获取对象
  static SharedPreferencesManager _getInstance() {
    return _instance;
  }
//以记录用户信息为例
  //1️⃣定义要缓存的数据
  late User user;
  //2️⃣创建缓存的方法
  Future<void> cacheUserInfo(User user) async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    await sharedPreferences.setString(cacheUserName(), user.name);
    await sharedPreferences.setInt(cacheUserAge(), user.age);
  }
  //3️⃣获取缓存的数据
  Future<void> getUserInfoCache() async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    String? name = sharedPreferences.getString(cacheUserName());
    int? age = sharedPreferences.getInt(cacheUserAge());
    if (name != null && age != null) {
     user = User(name, age);
    }
  }
}

四、在得到用户信息的地方缓存

//创建缓存用户信息的方法
void cacheUser(User user) async {
    await SharedPreferencesManager.instance.cacheUserInfo(user);
  }

//在获取用户信息的地方,先生成用户model,再缓存数据
var user = User.fromJson({'name': '肖洒', 'age': 23});
cacheUser(user);

五、在用到用户信息的地方获取缓存

void getUserInfo() async {
    await SharedPreferencesManager.instance.getUserInfoCache();
    print('姓名:${SharedPreferencesManager.instance.user.name},年龄:${SharedPreferencesManager.instance.user.age}');
 }


神官,一起来敲代码啊!
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容