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

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐