Flutter,SharedPreferences的同步处理,如Android原生般的

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值