MutableStateMapOf 不能包装在 RememberSaveable 中吗?

问题描述 投票:0回答:1

我想使用现有地图初始化可观察地图。 我试过了

val myMap by rememberSaveable { mutableStateOf(otherMap) }

otherMap 是一个 MutableMap。 它崩溃了“java.lang.IllegalArgumentException:无法使用当前的 SaveableStateRegistry 保存包含 androidx.compose.runtime.snapshots.SnapshotStateMap 的 MutableState。默认实现仅支持可以存储在 Bundle 内的类型。”

我试过了

val myMap by rememberSaveable { mutableStateMapOf<MyEnum, Boolean>(otherMap) } 

并且无法编译。 我需要 myMap 是可变的,即

myMap[key] = value
android-jetpack-compose
1个回答
0
投票

我认为你应该创建自己的可组合项来反映 RememberSaveable 函数的逻辑

@Composable
fun <K : Any, V : Any> rememberMutableStateMapOf(vararg pairs: Pair<K, V>): SnapshotStateMap<K, V> {
    return rememberSaveable(saver = snapshotStateMapSaver()) {
        pairs.toList().toMutableStateMap()
    }
}

private fun <K : Any, V : Any> snapshotStateMapSaver() = listSaver<SnapshotStateMap<K, V>, Pair<K, V>>(
    save = { stateMap -> stateMap.toList() },
    restore = { it.toMutableStateMap() }
)

然后像平常一样调用它:

val expandedStates = rememberMutableStateMapOf<String,Boolean>()

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.