我们能不能创造出自己的custom rememberState个像rememberModalButtomSheetSTate()一样.另外,我希望将Composable存储在此记忆状态中,并能够使用此状态设置和访问Composable.就像rememberState.setCompose = @ComposablerememberState.getComposable

推荐答案

是的,你可以创建rememberModalBottomSheetStaterememberLazyListState这样的记忆功能.创建存储多种数据类型或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()
    }
}

Android相关问答推荐

修改参数应该应用于哪些子元素?

如何消除脚手架和顶杆(material 3)更改 colored颜色 时的延迟?

译码BLE血糖仪特征值

从未设置实时数据值

如何在初始合成期间在可组合函数中调用/获取远程API中的数据[防止无限重组]

使用Kotline绑定时,ViewHolder无法识别文本视图

Visual Studio 2022,毛伊岛,Android Emulator:无法更改内存量

kotlin中&&和and的区别

Android WebView 不会在滚动端加载新内容

如何避免多次调用 Jetpack Compose 的 onClick 回调

setContentView() 方法的签名

以下代码如何在 Android 上运行

如何在 Delphi 和 Android 上避免 Indy Socket Error #13 Access denied 异常?

如何用jetpack compose实现垂直李克特量表

Jetpack Compose 惰性列在单个项目更新时重新组合所有项目

如何使用 Jetpack Compose 在图像上叠加文本

单击 Jetpack Compose(单选)时,我无法为列表中的单个文本着色

firebase-messaging和firebase-inappmessaging-display之间有什么区别?

如何在不使用 NestedScrollView 的情况下使用带有 CollapsingToolbar 的 ViewPager?

Android:在模块 jetified-play-services-measurement 和 jetified-play-services-measurement-impl 中发现重复类