通过在Compose中使用ModalBottomSheet,我得到了以下问题:
java.lang.IllegalArgumentException:初始值必须具有关联的锚。
我的可组合函数有:
- ModalBottomSheetState和CoroutinScope,
- ModalBottomSheetLayout,
- a脚手架作为底部板材内容。
// 1.
val sheetState = rememberModalBottomSheetState(ModalBottomSheetValue.Hidden)
val coroutineScope = rememberCoroutineScope()
// 2.
ModalBottomSheetLayout(
sheetContent = {
/* sheetContent */
},
sheetState = sheetState,
// modifier = Modifier.fillMaxSize() --> it doesn't change the result
) {
// 3.
Scaffold {
/* scaffold content */
}
}
通过将底部工作表的初始状态设置为ModalBottomSheetValue.Expanded,问题就消失了。请注意,ModalBottomSheetValue.HalfExpanded也会抛出异常,并且没有任何初始值(默认值为Hidden,因此看起来很合理)。
是否有已知的解决方法或正在工作的库版本(我使用的compose版本:1.0.0和我尝试了1.0.0-rc 2)?
更新
经过一些调查,似乎问题是由于工作表内容中的动态内容。我有一个Column/LazyColumn,当数据可用时重新组合。通过具有固定内容,任何ModalBottomSheetValue的问题消失。
修复
对于“null”内容(理解为高度为0 dp的内容),可组合函数可能没有足够的信息来组成模态底表。动态列内容就是这种情况(从没有内容开始,所以height = 0 dp)。
要解决此问题,请在工作表内容层次结构中的某个位置设置最小高度1 dp:
val sheetState = rememberModalBottomSheetState(ModalBottomSheetValue.Hidden)
val coroutineScope = rememberCoroutineScope()
ModalBottomSheetLayout(
sheetContent = {
Box(modifier.defaultMinSize(minHeight = 1.dp)) {
/* sheet content */
}
},
sheetState = sheetState,
// modifier = Modifier.fillMaxSize() --> it doesn't change the result
) {
Scaffold {
/* scaffold content */
}
}
4条答案
按热度按时间mi7gmzs61#
对于“null”内容(理解为高度为0dp的内容),可组合函数可能没有足够的信息来组成模态底表。动态列内容就是这种情况(从没有内容开始,所以height = 0dp)。
要解决此问题,请在工作表内容层次结构中的某个位置设置最小高度1 dp:
thtygnil2#
您可以在
sheetContent
中添加Spacer
以避免上述预期mutmk8jj3#
对我来说,批准的解决方案不起作用。
在我的例子中,当我有一个未指定高度的bottomSheet内容(lazyColumn)时,它失败了,我希望bottomSheet在打开它时使用这一行来 Package 内容的高度:
对我来说,解决方案是将sheetContent Package 为:
我希望这个解决方案可以帮助其他人,这里是伪代码:
fcg9iug34#
此问题已在版本1.4.0-alpha 04中修复
修复了工作表内容为空时ModalBottomSheetLayout会崩溃的问题。ModalBottomSheetLayout现在允许空工作表内容。如果图纸内容为空,则它将仅处于“隐藏”状态。(Ic2288,B/200980998,b/216693030)