Die untere Registerkartenleiste anzeigen/ausblenden, während Sie Voyager in Multiplattform komponierenAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Die untere Registerkartenleiste anzeigen/ausblenden, während Sie Voyager in Multiplattform komponieren

Post by Anonymous »

Ich verwende Voyager in meinem Projekt für Multiplattform -Kompose und habe eine Frage, wie wir die untere Registerkartenleiste auf der Basis der Bildlaufrichtung eines LazyColumns im Hometab anzeigen/ausblenden können. Ich habe den Scroll -Hörer behandelt, um mir den Wert zu bieten (Show/Ausblenden), aber ich bin mir nicht sicher, wie ich den Listener im App -Bildschirm einrichten und Daten zwischen Hometab und App verwandeln kann. Danke für jede Hilfe. < /P>

Code: Select all

@OptIn(ExperimentalMaterialApi::class)
@Composable
fun App() {
MoviesTheme {
TabNavigator(HomeTab) {
BottomSheetNavigator(
modifier = Modifier.animateContentSize(),
sheetShape = RoundedCornerShape(topStart = 32.dp, topEnd = 32.dp),
skipHalfExpanded = true
) {
Navigator(Application()) { navigator -> SlideTransition(navigator) }
}
}
}
}

class Application : Screen {

@Composable
override fun Content() {

Scaffold(
modifier = Modifier,
scaffoldState = rememberScaffoldState(),
bottomBar = {
NavigationBar(tonalElevation = 4.dp) {
TabNavigationItemM3(HomeTab)
TabNavigationItemM3(FavoritesTab)
TabNavigationItemM3(InterestsTab)
TabNavigationItemM3(ProfileTab)
}
},
) {
CurrentTab()
}
}
}

@Composable
private fun RowScope.TabNavigationItemM3(tab: Tab) {
val tabNavigator = LocalTabNavigator.current

NavigationBarItem(
selected = tabNavigator.current.key == tab.key,
onClick = { tabNavigator.current = tab },
icon = {
tab.options.icon?.let { painter ->
androidx.compose.material3.Icon(
painter = painter,
contentDescription = tab.options.title
)
}
}
)
}

object HomeTab : Tab {

@Composable
override fun Content() {
HomeScreen(onScrollDirectionChanged =  {show -> }, onScrollStopped = {})
}

override val options: TabOptions
@Composable
get() {
val icon = rememberVectorPainter(Icons.Rounded.Home)

return remember { TabOptions(index = 0u, title = "Home", icon = icon) }
}

}

@Composable
fun HomeScreen(
screenModel: HomeScreenViewModel = koinInject(),
navigator: Navigator = LocalNavigator.currentOrThrow,
onScrollDirectionChanged: (Boolean) -> Unit,
onScrollStopped: () -> Unit = {}
) {
LaunchedEffect(Unit) { screenModel.onLaunch() }
val pagingItems =
screenModel.allMoviesPagingState.collectAsLazyPagingItemsForRecipe(screenModel::onLoadMore)
val trendingPagingItems =
screenModel.trendingMoviesPagingState.collectAsLazyPagingItemsForMovies(screenModel::onLoadMoreTrending)
val listState = rememberLazyListState()
val previousScrollOffset by rememberUpdatedState(listState.firstVisibleItemScrollOffset)
var isScrollingDown by remember { mutableStateOf(false) }
var isScrollingUp by remember { mutableStateOf(false) }

LaunchedEffect(listState) {
snapshotFlow { listState.isScrollInProgress }
.collect {
if (it) {
isScrollingDown = listState.firstVisibleItemScrollOffset > previousScrollOffset
isScrollingUp = listState.firstVisibleItemScrollOffset < previousScrollOffset
onScrollDirectionChanged(isScrollingUp)
} else {
onScrollStopped()
}
}
}

if (listState.firstVisibleItemIndex == listState.layoutInfo.totalItemsCount - 1) {
onScrollDirectionChanged(true)
}

Box {
LazyColumn(
state = listState,
horizontalAlignment = Alignment.Start,
verticalArrangement = Arrangement.Top
) {
trendingMovies(trendingPagingItems, { id -> navigator.push(DetailsScreen(id)) }, {})
allMovies(pagingItems, { id -> navigator.push(DetailsScreen(id)) }, {})
}

MoviesSearchBar { }
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post