Compose nestedScrollConnection не запускается с анимированной прокруткой
Я создал складной заголовок в Compose с помощью NestedScrollConnection. Все работает отлично, но пришлось сделать одно дополнение: автоматическую прокрутку до определенного пункта. У меня проблема в том, что заголовок (подключенный с помощью NestedScrollConnection) не обновляется при запуске animateScrollTo.
Нашел аналогичную версию из документации разработчика Android здесь (это из экспериментальной библиотеки Material3, но бывает и без нее):
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
Scaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
MediumTopAppBar(
title = { Text("Medium TopAppBar") },
navigationIcon = {
Icon(imageVector = Icons.Filled.Menu, contentDescription = "Localized description")
},
scrollBehavior = scrollBehavior
)
},
content = { innerPadding ->
val listState = rememberLazyListState()
val coroutines = rememberCoroutineScope()
LaunchedEffect(key1 = Unit, block = {
coroutines.launch {
delay(5000)
// Starts the scrollTo
listState.animateScrollToItem(50, 0)
}
})
LazyColumn(
state = listState,
contentPadding = innerPadding,
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
val list = (0..75).map { it.toString() }
items(count = list.size) {
Text(
text = list[it],
modifier = Modifier.fillMaxWidth()
)
}
}
}
)
Несмотря на то, что прокрутка к элементу работает, и элемент виден, заголовок вообще не обновлялся.
При просмотре документации LazyListState animateScrollToItem ничего не говорится о пропуске вложенных соединений прокрутки (как это делает dispatchRawDelta). Даже в приведенном выше примере элемент scrollTo не обновляет состояние заголовка. Проблема также возникает с обычным прокручиваемым столбцом, LazyGrid и т. д.
Я думал о других способах исправить это:
- Получение количества прокручиваемых пикселей и отправка его в nestedScrollConnection, но нет надежного способа получить прокручиваемые пиксели из LazyColumn
- Измерение всех элементов и передача этого, но когда элементы будут признаны недействительными, это не удастся
Я чувствую, что часть этой связи отсутствует. У кого-нибудь есть идеи?