一、需要用到的第三方插件
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}');
}