Skip to content

Commit d6328f5

Browse files
v1.2.2
1 parent 77fa026 commit d6328f5

File tree

3 files changed

+38
-5
lines changed

3 files changed

+38
-5
lines changed

README.md

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,23 @@ registerTypeConverters<ExampleBean>(
190190
save = { bean -> Json.encodeToString(bean) },
191191
restore = { str -> Json.decodeFromString(str) }
192192
)
193+
194+
// 或者,如果你只需要对某个 state 编写转换器,可以直接传入 `typeConverter` 参数
195+
// 此参数如有,则其优先级高于 `registerTypeConverters` 方法注册的全局转换器
196+
var array by rememberDataSaverState(
197+
"custom_type_converter_example",
198+
intArrayOf(1, 2, 3, 4, 5),
199+
// 参数类型为 ITypeConverter,这里的 ClassTypeConverter 是基于 type 类型 accept 的子类
200+
typeConverter = object : ClassTypeConverter(type = typeOf<IntArray>()) {
201+
override fun save(data: Any?): String {
202+
return (data as IntArray).joinToString(",")
203+
}
204+
205+
override fun restore(str: String): Any {
206+
return str.split(",").map { it.toInt() }.toIntArray()
207+
}
208+
}
209+
)
193210
```
194211
195212
如果您需要存储可空变量,请使用 `registerTypeConverters<ExampleBean?>`
@@ -213,9 +230,8 @@ inline fun <reified T> registerTypeConverters(
213230
> **注意:**
214231
>
215232
> 1. registerTypeConverters 请在初始化时调用,确保早于使用 `rememberDataSaverState("key", ExampleBean())` 之前
216-
> 2. 多个类型转换器会按照注册顺序依次尝试,直到找到合适的转换器。因此,如果您注册了多个相同类型的转换器,框架会使用第一个注册的转换器。
217-
> 3. 您可以通过 `DataSaverConverters.typeConverters` 获取到注册的全部转换器列表,初始会有默认的一些,如对 `String``emptyList``emptyMap` 的支持
218-
233+
> 2. 多个类型转换器会按照注册顺序反向依次尝试,直到找到合适的转换器。因此,如果您注册了多个相同类型的转换器,框架会使用**最后一个符合条件的**转换器。
234+
> 3. 您可以通过 `DataSaverConverters.typeConverters` 获取到注册的全部转换器列表,初始会有默认的一些,如对 `String` 的支持
219235
220236
221237
## 在 Composable 函数外使用

README_en.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,23 @@ registerTypeConverters<ExampleBean>(
183183
save = { bean -> Json.encodeToString(bean) },
184184
restore = { str -> Json.decodeFromString(str) }
185185
)
186+
187+
// If you only need to convert a specific state, you can pass the converter directly to the `rememberDataSaverState` function
188+
// The priority of the converter will be higher than the global converter registered by `registerTypeConverters`
189+
var array by rememberDataSaverState(
190+
"custom_type_converter_example",
191+
intArrayOf(1, 2, 3, 4, 5),
192+
// the parameter type is ITypeConverter, the ClassTypeConverter is a subclass of type accepting by type
193+
typeConverter = object : ClassTypeConverter(type = typeOf<IntArray>()) {
194+
override fun save(data: Any?): String {
195+
return (data as IntArray).joinToString(",")
196+
}
197+
198+
override fun restore(str: String): Any {
199+
return str.split(",").map { it.toInt() }.toIntArray()
200+
}
201+
}
202+
)
186203
```
187204
188205
If you need to store nullable variables, please use `registerTypeConverters<ExampleBean?>`.
@@ -206,7 +223,7 @@ The framework will call the corresponding `save` and `restore` methods to conver
206223
207224
> 1. Please call `registerTypeConverters` during initialization to ensure it is called before using `rememberDataSaverState("key", ExampleBean())`.
208225
> 2. Multiple type converters will be tried in the order of registration until a suitable converter is found. Therefore, if you register multiple converters of the same type, the framework will use the first registered converter.
209-
> 3. You can access the list of all registered converters through `DataSaverConverters.typeConverters`. Some default converters are initially provided, such as support for `String`, `emptyList`, and `emptyMap`.
226+
> 3. You can access the list of all registered converters through `DataSaverConverters.typeConverters`. Some default converters are initially provided, such as support for `String`
210227
211228
## Using Outside of Composable Functions
212229

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[versions]
22
agp = "8.6.0"
33
group = "io.github.FunnySaltyFish"
4-
project = "1.2.1"
4+
project = "1.2.2"
55
android-compileSdk = "34"
66
android-minSdk = "24"
77
android-targetSdk = "34"

0 commit comments

Comments
 (0)