Показать/скрыть нижнюю панель вкладок при использовании Voyager в Compose MultiplatformAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Показать/скрыть нижнюю панель вкладок при использовании Voyager в Compose Multiplatform

Сообщение Anonymous »

Я использую Voyager в моем проекте Compose Multiplatform, и у меня есть вопрос относительно того, как мы можем показать/скрыть нижнюю панель вкладок на основе направления прокрутки лазиколомы внутри HomeTab. Я справился с прослушивателем прокрутки, чтобы предоставить мне значение (Show/Hide), но я не уверен, как настроить слушателя на экране приложения и обрабатывать данные между HomeTab и App. Спасибо за помощь. < /P>

@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 { }
}
}



Подробнее здесь: https://stackoverflow.com/questions/775 ... tiplatform
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»