android - Jetpack-Compose ModalBottomSheetLayout 抛出 java.lang.IllegalArgumentException,初始状态为“隐藏”
问题描述
通过在 Compose 中使用 ModalBottomSheet,我遇到了以下问题:
java.lang.IllegalArgumentException:初始值必须有一个关联的锚。
我的可组合功能有:
- 一个 ModalBottomSheetState 和一个 CooutinScope,
- 一个 ModalBottomSheetLayout ,
- a Scaffold 作为底部工作表内容。
// 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 也会引发异常,并且没有任何初始值(默认为隐藏,因此看起来很符合逻辑)。
是否有已知的解决方法或正在运行的库版本(我使用的 compose 版本:1.0.0,我尝试使用 1.0.0-rc2)?
更新
经过一番调查,问题似乎是由于工作表内容中的动态内容。我有一个 Column/LazyColumn 可以在数据可用时重新组合。通过具有固定内容,任何 ModalBottomSheetValue 的问题都会消失。
使固定
对于“空”内容(理解高度为 0 dp 的内容),可组合函数可能没有足够的信息来组合模态底页。动态列内容就是这种情况(从没有内容开始,所以高度 = 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 */
}
}
解决方案
对于“空”内容(理解高度为 0 dp 的内容),可组合函数可能没有足够的信息来组合模态底页。动态列内容就是这种情况(从没有内容开始,所以高度 = 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 */
}
}
推荐阅读
- facebook - 如何获得 Facebook 开发者应用合同?
- javascript - 如何从标准 JS 访问 Vue 组件?
- python - 避免硬编码以获取 Python 文件路径
- list - 如何仅计算列表(PROLOG)中的数字元素,除了_?
- python - 密码python没有正确返回
- javascript - XMLhttprequest 得到 '404 not found' 但 invoke-webrequest 运行良好
- ubuntu - 带有 Bacula 的灾难恢复 Ubuntu 服务器
- internet-explorer - 如何以角度检索http 302响应
- swift - 我需要用正常的蓝点显示我的位置,并用不同的标记显示另一个点
- php - 如何让带有css样式的复选框在php的循环中工作