Skip to content

Latest commit

 

History

History
160 lines (124 loc) · 6.91 KB

README_ZH.md

File metadata and controls

160 lines (124 loc) · 6.91 KB

MMKV-KTX

English | 中文

License

结合了 Kotlin 属性委托的特性,使得 MMKV 更加灵活易用。

Features

  • 自动初始化 MMKV ;
  • 用属性名作为键名,无需声明大量的键名常量;
  • 可以确保类型安全,避免类型或者键名不一致导致的异常;
  • 支持转换成 LiveDataStateFlow 来使用;
  • 支持转换成 Map,可以根据不同的 id 来保存数据;
  • 支持 getAllKV(),为数据迁移提供了可能性;

用法

📝 >> 使用文档 <<

快速入门

settings.gradle 文件的 repositories 结尾处添加:

dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    mavenCentral()
    maven { url 'https://www.jitpack.io' }
  }
}

或者在 settings.gradle.ktx 文件的 repositories 结尾处添加:

dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    mavenCentral()
    maven { url = uri("https://jitpack.io") }
  }
}

添加依赖:

dependencies {
  implementation("com.github.DylanCaiCoding:MMKV-KTX:2.0.1")
}

让一个类继承 MMKVOwner 类,即可在该类使用 by mmkvXXXX() 函数将属性委托给 MMKV,例如:

object SettingsRepository : MMKVOwner(mmapID = "settings") {
  var isNightMode by mmkvBool()
  var language by mmkvString(default = "zh")
}

如果已经有了父类继承不了,那就实现 IMMKVOwner by MMKVOwner(mmapID),比如:

object SettingsRepository : BaseRepository(), IMMKVOwner by MMKVOwner(mmapID = "settings") {
  // ...
}

要确保每个 mmapID 不重复,只有这样才能 100% 确保类型安全!!!

设置或获取属性的值会调用对应的 encode() 或 decode() 函数,用属性名作为键名。

支持以下类型:

类型 函数 默认值
Int mmkvInt() 0
Long mmkvLong() 0L
Boolean mmkvBool() false
Float mmkvFloat() 0f
Double mmkvDouble() 0.0
String mmkvString() /
Set<String> mmkvStringSet() /
ByteArray mmkvBytes() /
Parcelable mmkvParcelable() /
类型 函数 默认值
MutableLiveData<Int> mmkvInt().asLiveData() 0
MutableLiveData<Long> mmkvLong().asLiveData() 0L
MutableLiveData<Boolean> mmkvBool().asLiveData() false
MutableLiveData<Float> mmkvFloat().asLiveData() 0f
MutableLiveData<Double> mmkvDouble.asLiveData() 0.0
MutableLiveData<String> mmkvString().asLiveData() /
MutableLiveData<Set<String>> mmkvStringSet().asLiveData() /
MutableLiveData<ByteArray> mmkvBytes().asLiveData() /
MutableLiveData<Parcelable> mmkvParcelable().asLiveData() /
类型 函数 默认值
MutableStateFlow<Int> mmkvInt().asStateFlow() 0
MutableStateFlow<Long> mmkvLong().asStateFlow() 0L
MutableStateFlow<Boolean> mmkvBool().asStateFlow() false
MutableStateFlow<Float> mmkvFloat().asStateFlow() 0f
MutableStateFlow<Double> mmkvDouble().asStateFlow() 0.0
MutableStateFlow<String> mmkvString().asStateFlow() /
MutableStateFlow<Set<String>> mmkvStringSet().asStateFlow() /
MutableStateFlow<ByteArray> mmkvBytes().asStateFlow() /
MutableStateFlow<Parcelable> mmkvParcelable().asStateFlow() /
类型 函数 默认值
MutableMap<String, Int> mmkvInt().asMap() 0
MutableMap<String, Long> mmkvLong().asMap() 0L
MutableMap<String, Boolean> mmkvBool().asMap() false
MutableMap<String, Float> mmkvFloat().asMap() 0f
MutableMap<String, Double> mmkvDouble().asMap() 0.0
MutableMap<String, String> mmkvString().asMap() /
MutableMap<String, Set<String>> mmkvStringSet().asMap() /
MutableMap<String, ByteArray> mmkvBytes().asMap() /
MutableMap<String, Parcelable> mmkvParcelable().asMap() /

更多进阶用法请查看使用文档

更新日志

Releases

作者其它的库

简介
Longan 可能是最好用的 Kotlin 工具库
LoadingStateView 深度解耦标题栏或加载中、加载失败、无数据等缺省页
ViewBindingKTX 最全面的 ViewBinding 工具
Tracker 基于西瓜视频的责任链埋点思路实现的轻量级埋点框架

License

Copyright (C) 2021. Dylan Cai

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.