Flutter中没有自带的SharedPreferences,只能用插件,因此首先在pubspec.yaml文件中导入插件,如下,
dependencies:
shared_preferences: ^0.5.2
点击右上角 Packages get。
网上找了一大圈,无论是存储还是获取数据,都是要异步处理。比较麻烦。
那么能否让它变成同步呢,如图安卓原生的一般,答案是可以的,如下。
使用synchronized即可,我们在pubspec.yaml文件中导入synchronized,如下
dependencies:
synchronized: ^2.2.0
点击右上角 Packages get。
新建SpUtils封装类(完整版点击下方链接下载),单例模式,如下
class SpUtils {
static SpUtils _singleton;
static SharedPreferences _prefs;
static Lock _lock = Lock();
static Future<SpUtils> getInstance() async {
if (_singleton == null) {
await _lock.synchronized(() async {
if (_singleton == null) {
// 保持本地实例直到完全初始化。
var singleton = SpUtils._();
await singleton._init();
_singleton = singleton;
}
});
}
return _singleton;
}
SpUtils._();
Future _init() async {
_prefs = await SharedPreferences.getInstance();
}
///例举的String型存储及获取
static String getString(String key) {
if (_prefs == null) return null;
var status = _prefs.getString(key);
if (status == null) return "";
return status;
}
static Future<bool> putString(String key, String value) {
if (_prefs == null) return null;
return _prefs.setString(key, value);
}
}
接着我们在项目最开始dart文件中,进行SharedPreferences初始化,如下
void main() {
runApp(MyApp());
loadAsync();
}
void loadAsync() async {
await SpUtil.getInstance(); //等待Sp初始化完成
}
这样,我们就可以直接同步使用SharedPreferences进行存储和获取数据了。
使用方法,如下
SpUtils.putString("Name", "张三");
SpUtils.getString("Name");
完整SpUtils下载
————————————————
版权声明:本文为CSDN博主「小梦不知」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/w283879367/article/details/105675573