我们能不能创造出自己的custom rememberState
个像rememberModalButtomSheetSTate()
一样.另外,我希望将Composable存储在此记忆状态中,并能够使用此状态设置和访问Composable.就像rememberState.setCompose = @Composable
和rememberState.getComposable
我们能不能创造出自己的custom rememberState
个像rememberModalButtomSheetSTate()
一样.另外,我希望将Composable存储在此记忆状态中,并能够使用此状态设置和访问Composable.就像rememberState.setCompose = @Composable
和rememberState.getComposable
是的,你可以创建rememberModalBottomSheetState
或rememberLazyListState
这样的记忆功能.创建存储多种数据类型或MutableState
的自定义记忆函数是很常见的.放Composables并不常见,至少到目前为止我还没有看到过,但它是可行的.
class MyState internal constructor() {
var state1 by mutableStateOf(0)
var state2 by mutableStateOf(0)
var someValue = 0
}
内部构造函数是可选的,用于限制开发者只能创建remember
个函数的实例.
// you can add params to pass to MyState instance or keys to reset remember
@Composable
fun rememberMyState(key1: Any?): MyState {
return remember(key1) {
MyState()
}
}
如果您希望添加可组合组件,一种方法是
class MyState internal constructor() {
var state1 by mutableStateOf(0)
var state2 by mutableStateOf(0)
var someValue = 0
// this can also be SnapshoStateList to trigger recomposition when you add, remove or update list with new item instance
val list = mutableListOf<@Composable () -> Unit>()
}
用法
val myState = rememberMyState(key1 = Unit)
myState.list.add {
Box(
modifier = Modifier
.fillMaxWidth()
.height(100.dp)
.background(Color.Red)
)
}
myState.list.add {
Box(
modifier = Modifier
.fillMaxWidth()
.height(100.dp)
.background(Color.Yellow)
)
}
Column(modifier = Modifier.fillMaxSize()) {
myState.list.forEach{
it.invoke()
}
}