FlutterIM项目_Part6_MMKVCacheUtil 本地存储工具类

75 阅读1分钟

mmkv简述

mmkv提供了同步存取的方法,轻量便捷。

MMKVCacheUtil工具类

一般基于它进行二次封装。

class MMKVCacheUtil {
  static MMKV? _mmkv = MMKV.defaultMMKV();

  static void setString(String key, String value) {
    _mmkv?.encodeString(key, value);
  }

  static String? getString(String key) {
    return _mmkv?.decodeString(key);
  }

  static void setInt(String key, int value) {
    _mmkv?.encodeInt(key, value);
  }

  static int? getInt(String key) {
    return _mmkv?.decodeInt(key);
  }

  static void setMap(String key, Map<String, dynamic> value) {
    String jsonString = json.encode(value);
    _mmkv?.encodeString(key, jsonString);
  }

  static Map<String, dynamic>? getMap(String key) {
    String? jsonString = _mmkv?.decodeString(key);

    if (jsonString != null) {
      return Map<String, dynamic>.from(json.decode(jsonString));
    }
    return null;
  }

  static void setBool(String key, bool value) {
    _mmkv?.encodeBool(key, value);
  }

  static bool? getBool(String key) {
    return _mmkv?.decodeBool(key);
  }

  static void remove(String key) {
    return _mmkv?.removeValue(key);
  }
}

统一管理键值对

记得把项目中使用到的本地缓存简对对统一管理起来。 另外发现extension on MMKVCacheUtil时,extension只能在本文件中使用。 extension name on MMKVCacheUtil时,外部才能使用。

extension CacheManager on MMKVCacheUtil {
  // 设置未读数
  static setUnreadCount(int unreadCount) {
    Map<String, dynamic>? userInfoMap = CacheManager.getUserInfo();
    String userId = SafeUtil.safeString(userInfoMap?['id']);

    MMKVCacheUtil.setInt('${userId}_unread_count', unreadCount);
  }
  

static int? getUnreadCount() {
  Map<String, dynamic>? userInfoMap = CacheManager.getUserInfo();
  String userId = SafeUtil.safeString(userInfoMap?['id']);

  return MMKVCacheUtil.getInt('${userId}_unread_count');
}