@@ -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)
6866CompositionLocalProvider(LocalDataSaver provides dataSaverPreferences){
6967 ExampleComposable ()
7068}
@@ -135,16 +133,18 @@ inline fun <reified T> mutableDataSaverStateOf(
135133``` bash
136134// if you want to use mmkv
137135implementation " 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
1411392. 如下初始化
142140
143141` ` ` kotlin
144142MMKV.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
149149CompositionLocalProvider(LocalDataSaver provides dataSaverMMKV){
150150 // ...
@@ -169,15 +169,30 @@ implementation "androidx.datastore:datastore-preferences:$data_store_version"
169169
170170` ` ` kotlin
171171val Context.dataStore : DataStore< Preferences> by preferencesDataStore(" dataStore" )
172- val dataSaverDataStorePreferences = DataSaverDataStorePreferences ().apply {
173- setDataStorePreferences(applicationContext.dataStore)
174- }
172+ val dataSaverDataStorePreferences = DataSaverDataStorePreferences(applicationContext.dataStore)
175173
176174CompositionLocalProvider(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 再储存
2172332. 重写自己的` 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目前,此库已在下列项目中使用:
0 commit comments