Angga Ardinata
10/09/2023, 11:25 PMKonstantin Tskhovrebov
10/10/2023, 9:47 AMmangubatrj
10/11/2023, 5:43 AMAngga Ardinata
10/12/2023, 5:47 AMabstract class BaseScreen : Screen, BaseScreenContent, ScreenLifecycleOwner {
@Composable
override fun Content() {
val navigator = LocalNavigator.currentOrThrow
var offsetState by remember { mutableFloatStateOf(0f) }
Box(
modifier = Modifier.background(Color.White)
) {
ScreenContent()
if (Platform.os == PlatformOS.iOS){
Box(
modifier = Modifier
.fillMaxHeight()
.width(20.dp)
.pointerInput(Unit){
detectHorizontalDragGestures(
onDragEnd = {
if (offsetState > 100) {
if (navigator.items.size > 1) navigator.pop()
}
offsetState = 0f
}
) { _, dragAmount ->
if (offsetState < 0) return@detectHorizontalDragGestures
offsetState += dragAmount
}
}
)
}
}
}
}
private interface BaseScreenContent {
@Composable
fun ScreenContent()
}
mangubatrj
10/12/2023, 5:57 AMAngga Ardinata
10/12/2023, 5:59 AMmangubatrj
10/12/2023, 6:02 AMAngga Ardinata
10/12/2023, 6:03 AMmangubatrj
10/12/2023, 6:04 AMAngga Ardinata
10/12/2023, 6:06 AMmangubatrj
10/14/2023, 12:41 AMAngga Ardinata
10/14/2023, 11:43 AMSrSouza
10/14/2023, 2:58 PMBaseScreen
you folks could just add this component to the main Navigation Content.
Example:
Navigator(...) { navigator ->
Box(..) {
CurrentScreen()
if (Platform.os == PlatformOS.iOS){
...
}
}
}
About previous screen peek, I need to validate about recomposition of it, but, Voyager Stack is built with SnapshotStateList, so, in practice, something like this:
val previousScreen = remember(navigator) {
derivedStateOf {
navigator.toList().getOrNull(navigator.size - 2)
}
}
But if this does not work properly we could easily add peekPreviousItem
on it.mangubatrj
10/16/2023, 12:36 AM