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