Переместите элемент LazyColumn в конец экрана, если LazyColumn пуст.
Я хочу добавить нижний колонтитул в LazyColumn, который появляется только при прокрутке всех элементов, но если в LazyColumn нет элементов или недостаточно элементов, чтобы покрыть весь экран, я хочу, чтобы нижний колонтитул отображался в нижней части экрана.
Поскольку мы не можем устанавливать веса в LazyColumn, есть ли другой способ добиться этого?
1 ответ
Вы можете использовать
LazyListState#layoutInfo
чтобы узнать, пуст ли список или есть ли свободное место внизу.
val state = rememberLazyListState()
val isIniatialLoading by remember {
derivedStateOf {
state.layoutInfo.viewportSize == IntSize.Zero
}
}
//Empty list or empty space
val hasEmptySpace by remember {
derivedStateOf {
val layoutInfo = state.layoutInfo
val visibleItemsInfo = layoutInfo.visibleItemsInfo
if (layoutInfo.totalItemsCount == 0) {
true
} else {
val lastVisibleItem = visibleItemsInfo.last()
val viewportHeight = layoutInfo.viewportEndOffset + layoutInfo.viewportStartOffset
(lastVisibleItem.index + 1 == layoutInfo.totalItemsCount &&
lastVisibleItem.offset + lastVisibleItem.size < viewportHeight)
}
}
}
Затем обернитеLazyColumn
сColumn
и применитьweight
модификатор к списку.
Column(Modifier.fillMaxSize()) {
LazyColumn(
state = state,
modifier = Modifier.weight(1f)
){
items(itemsList) {
//....
}
//Footer when the list covers the entire screen
if (!hasEmptySpace){
item(){
//Footer()
}
}
}
// Display the Footer at the bottom of the screen if the list is empty or if there is an empty space
if ( !isIniatialLoading && hasEmptySpace ){
//Footer()
}
}