JetBrains / compose-multiplatform

Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.
https://jetbrains.com/lp/compose-multiplatform
Apache License 2.0
15.87k stars 1.15k forks source link

IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true #5049

Closed kasem-sm closed 1 month ago

kasem-sm commented 2 months ago

I have a LazyVerticalStaggeredGrid and I render items based on it's type (with difference aspect ratio), when I scroll and (I guess) just before the "ItemTwo()" is about to be visible on the screen, the app crashes.

Affected Platform - As of now, I have experienced the crash only on iOS

Versions

To Reproduce Steps to reproduce the behavior:

  1. Run this code snippet:
    @Composable
    fun BugReproduction() {
       LazyVerticalStaggeredGrid(
            modifier = Modifier
                .fillMaxSize()
                .pullRefresh(refreshState),
            contentPadding = PaddingValues(
                top = paddingValues.calculateTopPadding(),
                start = 16.dp + paddingValues.calculateStartPadding(layoutDirection),
                end = 16.dp + paddingValues.calculateStartPadding(layoutDirection),
                bottom = paddingValues.calculateBottomPadding()
            ),
            horizontalArrangement = Arrangement.spacedBy(8.dp),
            columns = StaggeredGridCells.Adaptive(150.dp),
            verticalItemSpacing = 12.dp,
            state = lazyListState,
        ) {
           items(
              state.wallpapers,
              key = { it.id + it.type.name }
          ) { item ->
              if (item.type == WallpaperType.One) {
                   ItemOne(
                      wallpaper = item,
                      aspRatio = 1 / 1f // (Modifier = Modifier.aspectRatio(aspRatio))
                  )
              } else {
                   ItemTwo(
                      wallpaper = item, // (internal modifier has aspectRatio of 1 / 2f,
                  )
              }
          }
       }
    }
  2. Scroll down

Expected behavior Should not crash

Screenshots If applicable, add screenshots to help explain your problem.

Additional context

Crash Log ```Uncaught Kotlin exception: kotlin.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true at 0 TrueAI 0x1017385fb kfun:kotlin.Throwable#(kotlin.String?){} + 119 at 1 TrueAI 0x101731b07 kfun:kotlin.Exception#(kotlin.String?){} + 115 at 2 TrueAI 0x101731d27 kfun:kotlin.RuntimeException#(kotlin.String?){} + 115 at 3 TrueAI 0x10173234f kfun:kotlin.IllegalStateException#(kotlin.String?){} + 115 at 4 TrueAI 0x10265e6eb kfun:androidx.compose.ui.node.NodeCoordinator#localToRoot(androidx.compose.ui.geometry.Offset){}androidx.compose.ui.geometry.Offset + 327 at 5 TrueAI 0x10279232f kfun:androidx.compose.ui.node.NodeCoordinator#localToRoot(androidx.compose.ui.geometry.Offset){}androidx.compose.ui.geometry.Offset-trampoline + 59 at 6 TrueAI 0x10265cde7 kfun:androidx.compose.ui.node.NodeCoordinator#localToWindow(androidx.compose.ui.geometry.Offset){}androidx.compose.ui.geometry.Offset + 147 at 7 TrueAI 0x1027912c7 kfun:androidx.compose.ui.layout.LayoutCoordinates#localToWindow(androidx.compose.ui.geometry.Offset){}androidx.compose.ui.geometry.Offset-trampoline + 99 at 8 TrueAI 0x1025c9c53 kfun:androidx.compose.ui.layout#positionInWindow__at__androidx.compose.ui.layout.LayoutCoordinates(){}androidx.compose.ui.geometry.Offset + 155 at 9 TrueAI 0x102be3db3 kfun:dev.chrisbanes.haze.SkiaHazeNode.measure$lambda$1$lambda$0#internal + 339 at 10 TrueAI 0x102be4df3 kfun:dev.chrisbanes.haze.SkiaHazeNode.$measure$lambda$1$lambda$0$FUNCTION_REFERENCE$9.invoke#internal + 103 at 11 TrueAI 0x102be4f0b kfun:dev.chrisbanes.haze.SkiaHazeNode.$measure$lambda$1$lambda$0$FUNCTION_REFERENCE$9.$invoke(androidx.compose.ui.graphics.GraphicsLayerScope){}#internal + 99 at 12 TrueAI 0x101877347 kfun:kotlin.Function1#invoke(1:0){}1:1-trampoline + 107 at 13 TrueAI 0x1026639af kfun:androidx.compose.ui.node.NodeCoordinator.updateLayerParameters$lambda$3#internal + 259 at 14 TrueAI 0x10266433b kfun:androidx.compose.ui.node.NodeCoordinator.$updateLayerParameters$lambda$3$FUNCTION_REFERENCE$2.invoke#internal + 71 at 15 TrueAI 0x10266440b kfun:androidx.compose.ui.node.NodeCoordinator.$updateLayerParameters$lambda$3$FUNCTION_REFERENCE$2.$invoke(){}#internal + 71 at 16 TrueAI 0x10187883f kfun:kotlin.Function0#invoke(){}1:0-trampoline + 99 at 17 TrueAI 0x101c807cf kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1?;kotlin.Function1?;kotlin.Function0<0:0>){0§}0:0 + 943 at 18 TrueAI 0x101cb620f kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver.ObservedScopeMap.observe#internal + 819 at 19 TrueAI 0x101cb36c3 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0){0§} + 1363 at 20 TrueAI 0x10266d31b kfun:androidx.compose.ui.node.OwnerSnapshotObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0){0§} + 227 at 21 TrueAI 0x10265b52f kfun:androidx.compose.ui.node.NodeCoordinator.updateLayerParameters#internal + 1195 at 22 TrueAI 0x102656623 kfun:androidx.compose.ui.node.NodeCoordinator#onMeasureResultChanged(kotlin.Int;kotlin.Int){} + 891 at 23 TrueAI 0x10279c24b kfun:androidx.compose.ui.node.NodeCoordinator#onMeasureResultChanged(kotlin.Int;kotlin.Int){}-trampoline + 67 at 24 TrueAI 0x102655a83 kfun:androidx.compose.ui.node.NodeCoordinator#(androidx.compose.ui.layout.MeasureResult){} + 647 at 25 TrueAI 0x102608c03 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 963 at 26 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 27 TrueAI 0x10283df2f kfun:androidx.compose.foundation.layout.FillNode.measure#internal + 1003 at 28 TrueAI 0x102798303 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 at 29 TrueAI 0x102608be3 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 931 at 30 TrueAI 0x10279addb kfun:androidx.compose.ui.node.NodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 67 at 31 TrueAI 0x102639cff kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$lambda$0#internal + 175 at 32 TrueAI 0x102639e8b kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$$lambda$0$FUNCTION_REFERENCE$0.invoke#internal + 71 at 33 TrueAI 0x102639f5b kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$$lambda$0$FUNCTION_REFERENCE$0.$invoke(){}#internal + 71 at 34 TrueAI 0x10187883f kfun:kotlin.Function0#invoke(){}1:0-trampoline + 99 at 35 TrueAI 0x101c807cf kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1?;kotlin.Function1?;kotlin.Function0<0:0>){0§}0:0 + 943 at 36 TrueAI 0x101cb620f kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver.ObservedScopeMap.observe#internal + 819 at 37 TrueAI 0x101cb36c3 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0){0§} + 1363 at 38 TrueAI 0x10266d31b kfun:androidx.compose.ui.node.OwnerSnapshotObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0){0§} + 227 at 39 TrueAI 0x10266d033 kfun:androidx.compose.ui.node.OwnerSnapshotObserver#observeMeasureSnapshotReads(androidx.compose.ui.node.LayoutNode;kotlin.Boolean;kotlin.Function0){} + 411 at 40 TrueAI 0x1026390ab kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure#internal + 679 at 41 TrueAI 0x10262c7c3 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 1131 at 42 TrueAI 0x10262c30f kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 711 at 43 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 44 TrueAI 0x102808f1b kfun:androidx.compose.foundation.layout.BoxMeasurePolicy.measure#internal + 947 at 45 TrueAI 0x1027926fb kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 at 46 TrueAI 0x1026016df kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 875 at 47 TrueAI 0x10279addb kfun:androidx.compose.ui.node.NodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 67 at 48 TrueAI 0x102639cff kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$lambda$0#internal + 175 at 49 TrueAI 0x102639e8b kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$$lambda$0$FUNCTION_REFERENCE$0.invoke#internal + 71 at 50 TrueAI 0x102639f5b kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$$lambda$0$FUNCTION_REFERENCE$0.$invoke(){}#internal + 71 at 51 TrueAI 0x10187883f kfun:kotlin.Function0#invoke(){}1:0-trampoline + 99 at 52 TrueAI 0x101c807cf kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1?;kotlin.Function1?;kotlin.Function0<0:0>){0§}0:0 + 943 at 53 TrueAI 0x101cb620f kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver.ObservedScopeMap.observe#internal + 819 at 54 TrueAI 0x101cb36c3 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0){0§} + 1363 at 55 TrueAI 0x10266d31b kfun:androidx.compose.ui.node.OwnerSnapshotObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0){0§} + 227 at 56 TrueAI 0x10266d033 kfun:androidx.compose.ui.node.OwnerSnapshotObserver#observeMeasureSnapshotReads(androidx.compose.ui.node.LayoutNode;kotlin.Boolean;kotlin.Function0){} + 411 at 57 TrueAI 0x1026390ab kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure#internal + 679 at 58 TrueAI 0x10262c7c3 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 1131 at 59 TrueAI 0x10262c30f kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 711 at 60 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 61 TrueAI 0x102837153 kfun:androidx.compose.foundation.layout.RowColumnMeasurementHelper#measureWithoutPlacing(androidx.compose.ui.layout.MeasureScope;androidx.compose.ui.unit.Constraints;kotlin.Int;kotlin.Int){}androidx.compose.foundation.layout.RowColumnMeasureHelperResult + 1991 at 62 TrueAI 0x102827343 kfun:androidx.compose.foundation.layout.RowColumnMeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult + 915 at 63 TrueAI 0x1027926fb kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 at 64 TrueAI 0x1026016df kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 875 at 65 TrueAI 0x10279addb kfun:androidx.compose.ui.node.NodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 67 at 66 TrueAI 0x102639cff kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$lambda$0#internal + 175 at 67 TrueAI 0x102639e8b kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$$lambda$0$FUNCTION_REFERENCE$0.invoke#internal + 71 at 68 TrueAI 0x102639f5b kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$$lambda$0$FUNCTION_REFERENCE$0.$invoke(){}#internal + 71 at 69 TrueAI 0x10187883f kfun:kotlin.Function0#invoke(){}1:0-trampoline + 99 at 70 TrueAI 0x101c807cf kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1?;kotlin.Function1?;kotlin.Function0<0:0>){0§}0:0 + 943 at 71 TrueAI 0x101cb620f kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver.ObservedScopeMap.observe#internal + 819 at 72 TrueAI 0x101cb36c3 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0){0§} + 1363 at 73 TrueAI 0x10266d31b kfun:androidx.compose.ui.node.OwnerSnapshotObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0){0§} + 227 at 74 TrueAI 0x10266d033 kfun:androidx.compose.ui.node.OwnerSnapshotObserver#observeMeasureSnapshotReads(androidx.compose.ui.node.LayoutNode;kotlin.Boolean;kotlin.Function0){} + 411 at 75 TrueAI 0x1026390ab kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure#internal + 679 at 76 TrueAI 0x10262c7c3 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 1131 at 77 TrueAI 0x10262c30f kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 711 at 78 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 79 TrueAI 0x102808f1b kfun:androidx.compose.foundation.layout.BoxMeasurePolicy.measure#internal + 947 at 80 TrueAI 0x1027926fb kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 at 81 TrueAI 0x1026016df kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 875 at 82 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 83 TrueAI 0x10258007b kfun:androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure#internal + 203 at 84 TrueAI 0x102798303 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 at 85 TrueAI 0x102608be3 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 931 at 86 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 87 TrueAI 0x10258007b kfun:androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure#internal + 203 at 88 TrueAI 0x102798303 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 at 89 TrueAI 0x102608be3 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 931 at 90 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 91 TrueAI 0x102eb7407 kfun:androidx.compose.material3.MinimumInteractiveModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult + 243 at 92 TrueAI 0x102798303 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 at 93 TrueAI 0x102608be3 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 931 at 94 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 95 TrueAI 0x102805e0b kfun:androidx.compose.foundation.layout.AspectRatioNode.measure#internal + 419 at 96 TrueAI 0x102798303 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 at 97 TrueAI 0x102608be3 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 931 at 98 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 99 TrueAI 0x10283fd9f kfun:androidx.compose.foundation.layout.SizeNode.measure#internal + 1215 at 100 TrueAI 0x102798303 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 at 101 TrueAI 0x102608be3 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 931 at 102 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 103 TrueAI 0x102805e0b kfun:androidx.compose.foundation.layout.AspectRatioNode.measure#internal + 419 at 104 TrueAI 0x102798303 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 at 105 TrueAI 0x102608be3 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 931 at 106 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 107 TrueAI 0x10283fd9f kfun:androidx.compose.foundation.layout.SizeNode.measure#internal + 1215 at 108 TrueAI 0x102798303 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 at 109 TrueAI 0x102608be3 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 931 at 110 TrueAI 0x10279addb kfun:androidx.compose.ui.node.NodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 67 at 111 TrueAI 0x102639cff kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$lambda$0#internal + 175 at 112 TrueAI 0x102639e8b kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$$lambda$0$FUNCTION_REFERENCE$0.invoke#internal + 71 at 113 TrueAI 0x102639f5b kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$$lambda$0$FUNCTION_REFERENCE$0.$invoke(){}#internal + 71 at 114 TrueAI 0x10187883f kfun:kotlin.Function0#invoke(){}1:0-trampoline + 99 at 115 TrueAI 0x101c807cf kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1?;kotlin.Function1?;kotlin.Function0<0:0>){0§}0:0 + 943 at 116 TrueAI 0x101cb620f kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver.ObservedScopeMap.observe#internal + 819 at 117 TrueAI 0x101cb36c3 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0){0§} + 1363 at 118 TrueAI 0x10266d31b kfun:androidx.compose.ui.node.OwnerSnapshotObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0){0§} + 227 at 119 TrueAI 0x10266d033 kfun:androidx.compose.ui.node.OwnerSnapshotObserver#observeMeasureSnapshotReads(androidx.compose.ui.node.LayoutNode;kotlin.Boolean;kotlin.Function0){} + 411 at 120 TrueAI 0x1026390ab kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure#internal + 679 at 121 TrueAI 0x10262c7c3 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 1131 at 122 TrueAI 0x10262c30f kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 711 at 123 TrueAI 0x102784bd7 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 at 124 TrueAI 0x10298d3af kfun:androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScopeImpl#measure(kotlin.Int;androidx.compose.ui.unit.Constraints){}kotlin.collections.List + 1027 at 125 TrueAI 0x102ae5867 kfun:androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope#measure(kotlin.Int;androidx.compose.ui.unit.Constraints){}kotlin.collections.List-trampoline + 115 Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.runtime.BroadcastFrameClock@1d931948, StandaloneCoroutine{Cancelling}@1c9aee48, FlushCoroutineDispatcher@124648e0] at 0 TrueAI 0x1017385fb kfun:kotlin.Throwable#(kotlin.String?){} + 119 at 1 TrueAI 0x101731b07 kfun:kotlin.Exception#(kotlin.String?){} + 115 at 2 TrueAI 0x101731d27 kfun:kotlin.RuntimeException#(kotlin.String?){} + 115 at 3 TrueAI 0x1019af04f kfun:kotlinx.coroutines.internal.DiagnosticCoroutineContextException#(kotlin.coroutines.CoroutineContext){} + 167 at 4 TrueAI 0x101983a23 kfun:kotlinx.coroutines.internal#handleUncaughtCoroutineException(kotlin.coroutines.CoroutineContext;kotlin.Throwable){} + 647 at 5 TrueAI 0x101906e4f kfun:kotlinx.coroutines#handleCoroutineException(kotlin.coroutines.CoroutineContext;kotlin.Throwable){} + 515 at 6 TrueAI 0x1018faa63 kfun:kotlinx.coroutines.StandaloneCoroutine.handleJobException#internal + 167 at 7 TrueAI 0x1019b7ac3 kfun:kotlinx.coroutines.JobSupport#handleJobException(kotlin.Throwable){}kotlin.Boolean-trampoline + 59 at 8 TrueAI 0x101911767 kfun:kotlinx.coroutines.JobSupport.finalizeFinishingState#internal + 1135 at 9 TrueAI 0x101919bcf kfun:kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath#internal + 2035 at 10 TrueAI 0x1019193a3 kfun:kotlinx.coroutines.JobSupport.tryMakeCompleting#internal + 755 at 11 TrueAI 0x101918ed3 kfun:kotlinx.coroutines.JobSupport#makeCompletingOnce(kotlin.Any?){}kotlin.Any? + 379 at 12 TrueAI 0x1018f6ebf kfun:kotlinx.coroutines.AbstractCoroutine#resumeWith(kotlin.Result<1:0>){} + 211 at 13 TrueAI 0x10187c267 kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 at 14 TrueAI 0x10173e3cf kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#resumeWith(kotlin.Result){} + 1163 at 15 TrueAI 0x10187c267 kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 at 16 TrueAI 0x10198e373 kfun:kotlinx.coroutines.internal.ScopeCoroutine#afterResume(kotlin.Any?){} + 243 at 17 TrueAI 0x1019b2baf kfun:kotlinx.coroutines.AbstractCoroutine#afterResume(kotlin.Any?){}-trampoline + 59 at 18 TrueAI 0x1018f6f1b kfun:kotlinx.coroutines.AbstractCoroutine#resumeWith(kotlin.Result<1:0>){} + 303 at 19 TrueAI 0x10187c267 kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 at 20 TrueAI 0x10173e3cf kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#resumeWith(kotlin.Result){} + 1163 at 21 TrueAI 0x10187c267 kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 at 22 TrueAI 0x10198e373 kfun:kotlinx.coroutines.internal.ScopeCoroutine#afterResume(kotlin.Any?){} + 243 at 23 TrueAI 0x1019b2baf kfun:kotlinx.coroutines.AbstractCoroutine#afterResume(kotlin.Any?){}-trampoline + 59 at 24 TrueAI 0x1018f6f1b kfun:kotlinx.coroutines.AbstractCoroutine#resumeWith(kotlin.Result<1:0>){} + 303 at 25 TrueAI 0x10187c267 kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 at 26 TrueAI 0x10173e3cf kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#resumeWith(kotlin.Result){} + 1163 at 27 TrueAI 0x10187c267 kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 at 28 TrueAI 0x101987777 kfun:kotlinx.coroutines.DispatchedTask#run(){} + 1879 at 29 TrueAI 0x1019b632f kfun:kotlinx.coroutines.Runnable#run(){}-trampoline + 91 at 30 TrueAI 0x1026bbb3f kfun:androidx.compose.ui.platform.FlushCoroutineDispatcher.dispatch$lambda$1$lambda$0#internal + 475 at 31 TrueAI 0x1026bd0a7 kfun:androidx.compose.ui.platform.FlushCoroutineDispatcher.$dispatch$lambda$1$lambda$0$FUNCTION_REFERENCE$4.invoke#internal + 75 at 32 TrueAI 0x1026bd1a3 kfun:androidx.compose.ui.platform.FlushCoroutineDispatcher.$dispatch$lambda$1$lambda$0$FUNCTION_REFERENCE$4.$invoke(){}#internal + 71 at 33 TrueAI 0x10187883f kfun:kotlin.Function0#invoke(){}1:0-trampoline + 99 at 34 TrueAI 0x1026bb447 kfun:androidx.compose.ui.platform.FlushCoroutineDispatcher.performRun#internal + 319 at 35 TrueAI 0x1026bbcc7 kfun:androidx.compose.ui.platform.FlushCoroutineDispatcher.dispatch$lambda$1#internal + 239 at 36 TrueAI 0x1026bcb53 kfun:androidx.compose.ui.platform.FlushCoroutineDispatcher.$dispatch$lambda$1$FUNCTION_REFERENCE$0.invoke#internal + 139 at 37 TrueAI 0x10187c86b kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 at 38 TrueAI 0x101741a47 kfun:kotlin.coroutines.intrinsics.object-4.invokeSuspend#internal + 731 at 39 TrueAI 0x10187c187 kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#invokeSuspend(kotlin.Result){}kotlin.Any?-trampoline + 67 at 40 TrueAI 0x10173e1b3 kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#resumeWith(kotlin.Result){} + 623 at 41 TrueAI 0x10187c267 kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 at 42 TrueAI 0x101987777 kfun:kotlinx.coroutines.DispatchedTask#run(){} + 1879 at 43 TrueAI 0x1019b632f kfun:kotlinx.coroutines.Runnable#run(){}-trampoline + 91 at 44 TrueAI 0x1019b169b kfun:kotlinx.coroutines.DarwinMainDispatcher.dispatch$lambda$0#internal + 67 at 45 TrueAI 0x1019b1917 kfun:kotlinx.coroutines.DarwinMainDispatcher.$dispatch$lambda$0$FUNCTION_REFERENCE$1.invoke#internal + 71 at 46 TrueAI 0x1019b19e7 kfun:kotlinx.coroutines.DarwinMainDispatcher.$dispatch$lambda$0$FUNCTION_REFERENCE$1.$invoke(){}#internal + 71 at 47 TrueAI 0x10187883f kfun:kotlin.Function0#invoke(){}1:0-trampoline + 99 at 48 TrueAI 0x1019b292b _6f72672e6a6574627261696e732e6b6f746c696e783a6b6f746c696e782d636f726f7574696e65732d636f72652f6f70742f6275696c644167656e742f776f726b2f343465633665383530643563363366302f6b6f746c696e782d636f726f7574696e65732d636f72652f6e617469766544617277696e2f7372632f44697370617463686572732e6b74_knbridge13 + 191 at 49 libdispatch.dylib 0x1090280ef _dispatch_call_block_and_release + 23 at 50 libdispatch.dylib 0x10902993b _dispatch_client_callout + 15 at 51 libdispatch.dylib 0x1090395e3 _dispatch_main_queue_drain + 1227 at 52 libdispatch.dylib 0x109039107 _dispatch_main_queue_callback_4CF + 39 at 53 CoreFoundation 0x1803f1a2f __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 11 at 54 CoreFoundation 0x1803ec147 __CFRunLoopRun + 1935 at 55 CoreFoundation 0x1803eb5a3 CFRunLoopRunSpecific + 571 at 56 GraphicsServices 0x18e9fbae3 GSEventRunModal + 159 at 57 UIKitCore 0x1852f02e3 -[UIApplication _run] + 867 at 58 UIKitCore 0x1852f3f5b UIApplicationMain + 123 at 59 SwiftUI 0x1c51fc1af OUTLINED_FUNCTION_70 + 499 at 60 SwiftUI 0x1c51fc04f OUTLINED_FUNCTION_70 + 147 at 61 SwiftUI 0x1c4f02fa3 OUTLINED_FUNCTION_2 + 91 at 62 TrueAI 0x100b7332b $s6TrueAI0A5AIAppV5$mainyyFZ + 39 at 63 TrueAI 0x100b736e3 main + 11 (/Users/qasimmuni/AndroidStudioProjects/PodTrueAI/iosApp/iosApp/App/TrueAIApp.swift:) at 64 dyld 0x107401543 0x0 + 4416607555 at 65 ??? 0x1075220df 0x0 + 4417790175 at 66 ??? 0xe052ffffffffffff 0x0 + -2282480586146709505```
igordmn commented 1 month ago

Moved to https://youtrack.jetbrains.com/issue/CMP-5049/IllegalStateException-LayoutCoordinate-operations-are-only-valid-when-isAttached-is-true. See the comment there.

okushnikov commented 1 month ago

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.