In one of my composables, a Lazycolumn is nested inside a Column composable. I want to be able to scroll the entire Column along with the Lazycolumn. But, specifying the verticalScroll modifier property on Column results in the following exception causing the app to crash. How can I fix this?
Exception
java.lang.IllegalStateException: Vertically scrollable component was measured with an infinity maximum height constraints, which is disallowed. One of the common reasons is nesting layouts like LazyColumn and Column(Modifier.verticalScroll()).
Composable
Column(
    modifier = Modifier
        .fillMaxWidth()
        .verticalScroll(rememberScrollState())
        .padding(bottom = 100.dp),
    verticalArrangement = Arrangement.Center,
    horizontalAlignment = Alignment.CenterHorizontally
) {
    LazyColumn(
        modifier = Modifier
            .fillMaxWidth()
    ) {
        items(
            items = allItems!!,
            key = { item ->
                item.id
            }
        ) { item ->
            ShoppingListScreenItem(
                navController = navController,
                item = item,
                sharedViewModel = sharedViewModel
            ) { isChecked ->
                scope.launch {
                    shoppingListScreenViewModel.changeItemChecked(item!!, isChecked)
                }
            }
        }
    }
   ...
Button(
    modifier = Modifier.padding(vertical = 24.dp),
    onClick = {
        navController.navigate(NavScreens.AddItemScreen.route) {
            popUpTo(NavScreens.AddItemScreen.route) {
                inclusive = true
            }
        }
    }
) {
    Text("Go to add item screen")
  }
}
 
                        
This happens when you wish to measure your
LazyColumnwithConstraintswithConstraints.Infinityfor the maxHeight which is not permitted as described in error log. There should be a fixed height or you shouldn't have another Scrollable with same orientation.If you don't know exact height you can assign
Modifier.weight(1f)to LazyColumn.Contraints
This section is extra about `Constraints` and measurement you can skip this part if you are not interested in how it works.What i mean by measuring with with Constraints.Infinity is when you create a
Layoutin Compose you useYou get child Composables as
List<Measurable>which you can measure withConstraintsprovided by parent or the one you see fit by updating existing one withConstraints.copyor fixed one when you build a custom Composable withLayout.Constraints
min/maxwidth/heightchanges based on size modifier or scroll. When there is a scroll and you don't use any size modifier,Constraintsreturn minHeight =0, maxHeight= Int.MAX_VALUE asConstraints.InfinityEasiest way to check
Constraintswith different Modifiers or with scroll is getting it fromBoxWithConstraints