Skip to content

Commit 07ea782

Browse files
update README for v1.1.4
1 parent 888a526 commit 07ea782

File tree

3 files changed

+52
-11
lines changed

3 files changed

+52
-11
lines changed

README.md

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,7 @@ dependencies {
6262
6363
```kotlin
6464
// init preferences
65-
val dataSaverPreferences = DataSaverPreferences().apply {
66-
setContext(context = applicationContext)
67-
}
65+
val dataSaverPreferences = DataSaverPreferences(applicationContext)
6866
CompositionLocalProvider(LocalDataSaver provides dataSaverPreferences){
6967
ExampleComposable()
7068
}
@@ -135,16 +133,18 @@ inline fun <reified T> mutableDataSaverStateOf(
135133
```bash
136134
// if you want to use mmkv
137135
implementation "com.github.FunnySaltyFish.ComposeDataSaver:data-saver-mmkv:{tag}"
138-
implementation 'com.tencent:mmkv:1.2.12'
136+
implementation 'com.tencent:mmkv:1.2.14'
139137
```
140138
141139
2. 如下初始化
142140
143141
```kotlin
144142
MMKV.initialize(applicationContext)
145-
val dataSaverMMKV = DataSaverMMKV().apply {
146-
setKV(newKV = MMKV.defaultMMKV())
147-
}
143+
...
144+
145+
val dataSaverMMKV = DefaultDataSaverMMKV
146+
// DefaultDataSaverMMKV 是我们提供的默认实现,您可以在任何地方使用它,就像一个 MMKVUtils 那样
147+
// 如果有定制 MMKV 的需要,可以选择 DataSaverMMKV(MMKV.defaultMMKV())
148148

149149
CompositionLocalProvider(LocalDataSaver provides dataSaverMMKV){
150150
// ...
@@ -169,15 +169,30 @@ implementation "androidx.datastore:datastore-preferences:$data_store_version"
169169
170170
```kotlin
171171
val Context.dataStore : DataStore<Preferences> by preferencesDataStore("dataStore")
172-
val dataSaverDataStorePreferences = DataSaverDataStorePreferences().apply {
173-
setDataStorePreferences(applicationContext.dataStore)
174-
}
172+
val dataSaverDataStorePreferences = DataSaverDataStorePreferences(applicationContext.dataStore)
175173

176174
CompositionLocalProvider(LocalDataSaver provides dataSaverDataStorePreferences){
177175
// ...
178176
}
179177
```
180178
179+
180+
181+
三者默认支持的类型如下所示
182+
183+
| 类型 | DataSaverPreference | DataSaverMMKV | DataSaverDataStorePreferences |
184+
| :-------: | :-----------------: | :-----------: | :---------------------------: |
185+
| Int | Y | Y | Y |
186+
| Boolean | Y | Y | Y |
187+
| String | Y | Y | Y |
188+
| Long | Y | Y | Y |
189+
| Float | Y | Y | Y |
190+
| Double | | Y | Y |
191+
| Parceable | | Y | |
192+
| ByteArray | | Y | |
193+
194+
更多类型的支持请参见 [保存自定义类型](#保存自定义类型)
195+
181196
---
182197
183198
### 使用其他存储框架
@@ -189,6 +204,7 @@ interface DataSaverInterface{
189204
fun <T> saveData(key:String, data : T)
190205
fun <T> readData(key: String, default : T) : T
191206
suspend fun <T> saveDataAsync(key:String, data : T) = saveData(key, data)
207+
fun remove(key: String)
192208
}
193209
```
194210
@@ -213,7 +229,7 @@ CompositionLocalProvider(LocalDataSaver provides dataSaverXXX){
213229
因为默认的`DataSaverPreferences`并不提供自定义类型的保存(当尝试这样做时会报错),所以您可以从以下两种方式中**任选其一**以保存自定义数据。
214230
215231
216-
1. 通过`registerTypeConverters`将实体类序列化为其他基本类型(如String)再储存
232+
1. 通过`DataSaverConverter.registerTypeConverters`将实体类序列化为 String 再储存
217233
2. 重写自己的`DataSaverInterface`实现类(见上)并实现相关的保存方法
218234
219235
对于第一种方式,您需要为对应实体类添加转换器,以实现保存时自动转换为String、并从String还原。方法如下:
@@ -296,6 +312,29 @@ v1.1.0 对`DataSaverInterface` 新增了 `suspend fun saveDataAsync` ,用于
296312
297313
298314
315+
### Null 支持
316+
317+
v1.1.4 放宽了自定义类型时为 `null` 的情况,可以通过
318+
319+
```kotlin
320+
registerTypeConverters<ExampleBean?>(
321+
save = { bean -> Json.encodeToString(bean) },
322+
restore = { str -> Json.decodeFromString(str) }
323+
)
324+
```
325+
326+
来支持 `null` 作默认值
327+
328+
```kotlin
329+
val nullableCustomBeanState: DataSaverMutableState<ExampleBean?> = rememberDataSaverState(key = "nullable_bean", initialValue = null)
330+
```
331+
332+
请注意,出于代码的实现上的考虑,设置 `state.value = null``dataSaverInterface.saveData(key, null)` 实际**将调用对应 `remove` 方法直接移除对应值**
333+
334+
335+
336+
337+
299338
## 使用的项目
300339
301340
目前,此库已在下列项目中使用:

app/src/main/java/com/funny/composedatasaver/ExampleActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.funny.composedatasaver.ui.ExampleComposable
1313
import com.funny.composedatasaver.ui.theme.FunnyTheme
1414
import com.funny.data_saver.core.DataSaverConverter.registerTypeConverters
1515
import com.funny.data_saver.core.LocalDataSaver
16+
import com.funny.data_saver_mmkv.DataSaverMMKV
1617
import com.funny.data_saver_mmkv.DefaultDataSaverMMKV
1718
import com.tencent.mmkv.MMKV
1819
import kotlinx.serialization.ExperimentalSerializationApi
@@ -33,6 +34,7 @@ class ExampleActivity : ComponentActivity() {
3334
// If you want to use [MMKV](https://github.com/Tencent/MMKV) to save data
3435
MMKV.initialize(applicationContext)
3536
val dataSaverMMKV = DefaultDataSaverMMKV
37+
// or DataSaverMMKV(MMKV.defaultMMKV())
3638
// you can use DefaultDataSaverMMKV like `DefaultDataSaverMMKV.readData(key, default)` and `DefaultDataSaverMMKV.saveData(key, value) anywhere`
3739

3840
// if you want to use [DataStorePreference](https://developer.android.google.cn/jetpack/androidx/releases/datastore) to save data

screenshot.png

67.3 KB
Loading

0 commit comments

Comments
 (0)