我想实现一个屏幕,可以显示两个不同的底部工作表。由于ModalBottomSheetLayout
只有一个用于一个工作表的插槽,因此我决定在想要显示两个工作表(full code)中的任何一个时,使用selected
状态动态更改ModalBottomSheetLayout
的sheetContent
。
val sheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden)
val (selected, setSelected) = remember(calculation = { mutableStateOf(0) })
ModalBottomSheetLayout(sheetState = sheetState, sheetContent = {
when (selected) {
0 -> Layout1()
1 -> Layout2()
}
}) {
Content(sheetState = sheetState, setSelected = setSelected)
}
这对于非常相似的工作表很有效,但是一旦您向两个工作表布局中的任何一个添加了更多的复杂性,则工作表在第一次按下按钮时将不会显示,只有在按下按钮两次后才会显示,如您所见:
4条答案
按热度按时间cu6pst1q1#
我有一个类似的用例,我需要显示2-3个堆叠的底页。我最终复制了大部分的Compose BottomSheet,并添加了所需的行为:
顶部偏移,例如允许将bottomSheet放置在AppBar下面:
pxy2qtax2#
我是这样实现的。它看起来很简单,但我仍然不知道如何将参数直接传递给“mutableStateOf()”,我必须创建一个变量“content”
idfiyjo83#
我想实现同样的事情,因为大的解决方案,我写了一篇文章在dev.to解决这个问题,这里是link
vd8tlhqk4#
这个解决方案适用于 N 数量的底部片材,甚至如果你想堆叠它们也可以工作,下面是实现:
对于实现,您需要具有以下内容:
最后,你可以:
Pd:vararg参数“sheets”中的项目顺序定义了每个项目的级别,如果你想堆叠它们,请按嵌套顺序编写。