ank*_*ag2 6 android bottom-sheet android-jetpack android-jetpack-compose
如何实现 JetPack Compose BottomSheet 状态更改的回调/侦听器机制?
类似于:
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_COLLAPSED && mIsCollapsedFromBackPress){
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
Run Code Online (Sandbox Code Playgroud)
正如我们过去在 Java/Kotlin 中所做的那样。
现在,我将其作为 lambda 传递给另一个需要关闭底页的可组合项。
val closeSheet: () -> Unit = {
scope.launch {
modalState.hide()
}
}
Run Code Online (Sandbox Code Playgroud)
但我想得到底页已完全折叠的回调,我可以继续我的任务。
我面临的实际问题: 我正在单击按钮将可组合项转换为位图。该按钮位于 BottomSheet 内部,需要转换的可组合项位于 BottomSheet 后面。因此,有时底页也会出现在位图中。我只想在底页完全折叠时触发该过程。
我在 SO 上找到了这个答案,但问题仍然是关于回调。不知道如何使用它。
小智 19
可以使用snapshotFlow,参考这个。它从可观察的快照状态创建一个流。这是示例代码
// State change callback
LaunchedEffect(sheetState) {
snapshotFlow { sheetState.isVisible }.collect { isVisible ->
if (isVisible) {
// Sheet is visible
} else {
// Not visible
}
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以将此 snapshotFlow 用于其他用途,例如寻呼机页面更改回调
// Page change callback
LaunchedEffect(pagerState) {
snapshotFlow { pagerState.currentPage }.collect { page ->
when (page) {
0 -> // First page
1 -> // Second page
else -> // Other pages
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5363 次 |
| 最近记录: |