涉及到的插件
dependencies:
synchronized: ^3.0.0+2
shared_preferences: ^2.0.7
不多说直接上代码
import 'package:shared_preferences/shared_preferences.dart';
import 'package:synchronized/synchronized.dart';
class SpHelper{
static SpHelper? _instance;
static late SharedPreferences prefs;
static final Lock _lock = Lock();
static Future<SpHelper?> init() async {
if (_instance == null) {
print("SpHelper初始化中");
await _lock.synchronized(() async {
// 保持本地实例直到完全初始化。
var singleton = SpHelper();
await singleton._init();
_instance = singleton;
});
}
print("SpHelper初始化完成");
return _instance;
}
Future _init() async {
prefs = await SharedPreferences.getInstance();
}
static putStorage(String key, value) async {
if (value is String) {
prefs.setString(key, value);
} else if (value is num) {
prefs.setInt(key, value as int);
} else if (value is double) {
prefs.setDouble(key, value);
} else if (value is bool) {
prefs.setBool(key, value);
} else if (value is List) {
prefs.setStringList(key, value.cast<String>());
}
}
// 获取
static getStorage(String key, [dynamic replace]) {
if (prefs == null) return;
return prefs.get(key) ?? replace;
}
// 移除
static removeStorage(String key) {
if (prefs == null) return;
prefs.remove(key);
}
static removeAllStorage() {
if (prefs == null) return;
prefs.clear();
}
}
使用之前需要先初始化,尽量在全局main里
void main() {
Global.init().then((e) {
runApp(const MyApp());
//必须在APP启动后初始化不然获取不到sp对象
await SpHelper.init();
});
使用方法:
SpHelper.getStorage("字段名", "默认值");