O que posso fazer se eu precisar colocar um lazycolumn
dentro de um lazycolumn
? Estou recebendo este erro:
IllegalStateException: O componente com rolagem vertical foi medido com restrições de altura máxima infinita, o que não é permitido.
Eu sei que, como diz o documento ( https://developer.android.com/develop/ui/compose/lists#avoid-nesting-scrollable ), devemos evitar aninhar componentes roláveis na mesma direção.
Mas meu aplicativo é um aplicativo especial, como um "construtor de aplicativos" no qual o usuário pode construir um aplicativo usando diferentes tipos de itens, por exemplo: textos, imagens, contêineres de rolagem vertical ( lazycolumns
), contêineres de rolagem horizontal ( lazyrows
), etc. e, por exemplo, o usuário é livre para colocar uma rolagem vertical, com algum texto e uma rolagem horizontal, e essa rolagem horizontal pode ter uma rolagem vertical dentro.
Preciso saber como conseguir isso
Você pode colocar um
LazyColumn
em outroLazyColumn
ou qualquer outro Composable comscroll
Modifier, mas não pode ter Composable rolável aninhado com Constraints com maxWidth/Height igual aConstraints.Infinity
na direção de rolagem porque o Modifier scroll tem uma verificação se Constrains de entrada têm maxConstraints.Infinity
. Se você alterar esse infinitoConstraints.Infinity
para algo finito, pode colocar um rolável dentro de outro.Definir
heightIn(max)
como finito altera maxHeight (esta é a maior altura com a qual um Composable pode ser medido) Composable rolável aninhado pode ser medido entre min-max para que possa ser tão grande quanto seu conteúdo ou você pode definir uma altura fixa para limitar o Composable aninhado para que ele não trave comhttps://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/CheckScrollableContainerConstraints.kt;l=30
Editar
Este número máximo apresenta o quão alto
LazyColumn
ele pode ser. Quanto maior, mais itens serão compostos de uma vez e será menos preguiçoso, mais parecido com Column com scroll.Compõe 582 no meu emulador. E é por isso que há um aviso no link que compartilhei sobre desempenho.
Essa abordagem é útil quando você não sabe quantos itens uma LazyColumn pode ter e usa um número grande para medir sua altura entre 0 e algum número grande para obter a altura do conteúdo ou coloca uma LazyGrid com um pequeno número de itens em uma LazyColumn em vez de implementá-la você mesmo.
Quando você deseja colocar uma LazyList em outra, considere o fato de que, dependendo do tamanho da janela de visualização, o número de itens que ela compõe também muda.