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

Posted 飞翔的熊blabla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Flutter,SharedPreferences的同步处理,如Android原生般的的主要内容,如果未能解决你的问题,请参考以下文章

Flutter + SharedPreferences:如何使用 FutureBuilder

如何在 Flutter 中使用 SharedPreferences 和 Injectable?

Flutter 将 JSON 数组保存到 SharedPreferences

flutter: SharedPreferences桌面插件

SharedPreferences 在启动时始终为空 - Flutter

flutter SharedPreferences数据存储