Flutter开发中缓存数据,我们可以使用官方提供的shared_preferences
,在实际项目中需要将它封装一层,方便后续替换其他缓存库。
添加依赖:
dependencies:
shared_preferences: ^2.1.1
封装管理类:
import 'package:shared_preferences/shared_preferences.dart';
/// @author huzhuwei
class UPCache {
SharedPreferences? _prefs;
static UPCache? _instance;
UPCache.of() {
init();
}
UPCache._pre(SharedPreferences prefs) {
_prefs = prefs;
}
static UPCache getInstance() {
_instance ??= UPCache.of();
return _instance!;
}
void init() async {
_prefs ??= await SharedPreferences.getInstance();
}
static Future<UPCache> preInit() async {
if (_instance == null) {
var prefs = await SharedPreferences.getInstance();
_instance = UPCache._pre(prefs);
}
return _instance!;
}
void setData<T>(String key, T data) {
if (data is String) {
_prefs?.setString(key, data);
} else if (data is double) {
_prefs?.setDouble(key, data);
} else if (data is int) {
_prefs?.setInt(key, data);
} else if (data is bool) {
_prefs?.setBool(key, data);
} else if (data is List<String>) {
_prefs?.setStringList(key, data);
}
}
void remove(String key) {
_prefs?.remove(key);
}
T? get<T>(String key) {
var value = _prefs?.get(key);
if (value != null) {
return value as T;
}
return null;
}
}
使用:
在initState()中,预初始化
void initState() {
super.initState();
UPCache.preInit();
}
void test() {
UPCache.getInstance().setData("key1", "hhahahahah");
UPCache.getInstance().setData("key2", 123);
UPCache.getInstance().setData("key3", false);
UPCache.getInstance().setData("key4", 11.1);
var value1 = UPCache.getInstance().get("key1");
var value2 = UPCache.getInstance().get("key2");
var value3 = UPCache.getInstance().get("key3");
var value4 = UPCache.getInstance().get("key4");
print('value1:$value1');
print('value2:$value2');
print('value3:$value3');
print('value4:$value4');
}