androidcrashandroid-jetpack-compose

Android Compose unknown crash


I've got this weird crash

Fatal Exception: java.lang.IllegalStateException
You must call layoutWithConstraints first

androidx.compose.foundation.text.modifiers.MultiParagraphLayoutCache.getTextLayoutResult (MultiParagraphLayoutCache.kt:118)
androidx.compose.foundation.text.modifiers.TextAnnotatedStringNode.draw (TextAnnotatedStringNode.kt:489)
androidx.compose.ui.node.LayoutNodeDrawScope.drawDirect-x_KDEd0$ui_release (LayoutNodeDrawScope.kt:105)
androidx.compose.ui.node.LayoutNodeDrawScope.draw-x_KDEd0$ui_release (LayoutNodeDrawScope.kt:86)
androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers (NodeCoordinator.kt:365)
androidx.compose.ui.node.NodeCoordinator.draw (NodeCoordinator.kt:354)
androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw (LayoutModifierNodeCoordinator.kt:182)
androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers (NodeCoordinator.kt:362)
androidx.compose.ui.node.NodeCoordinator.access$drawContainedDrawModifiers (NodeCoordinator.kt:54)
androidx.compose.ui.node.NodeCoordinator$invoke$1.invoke (NodeCoordinator.kt:384)
androidx.compose.ui.node.NodeCoordinator$invoke$1.invoke (NodeCoordinator.kt:383)
androidx.compose.runtime.snapshots.Snapshot$Companion.observe (Snapshot.kt:2303)
androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe (SnapshotStateObserver.kt:473)
androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads (SnapshotStateObserver.kt:230)
androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release (OwnerSnapshotObserver.kt:133)
androidx.compose.ui.node.NodeCoordinator.invoke (NodeCoordinator.kt:383)
androidx.compose.ui.node.NodeCoordinator.invoke (NodeCoordinator.kt:54)
androidx.compose.ui.platform.RenderNodeApi29.record (RenderNodeApi29.android.kt:209)
androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList (RenderNodeLayer.android.kt:304)
androidx.compose.ui.platform.AndroidComposeView.dispatchDraw (AndroidComposeView.android.kt:1167)
android.view.View.draw (View.java:22957)
android.view.View.updateDisplayListIfDirty (View.java:21789)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4606)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4579)
android.view.View.updateDisplayListIfDirty (View.java:21740)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4606)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4579)
android.view.View.updateDisplayListIfDirty (View.java:21740)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4606)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4579)
android.view.View.updateDisplayListIfDirty (View.java:21740)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4606)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4579)
android.view.View.updateDisplayListIfDirty (View.java:21740)
android.view.ThreadedRenderer.updateViewTreeDisplayList (ThreadedRenderer.java:561)
android.view.ThreadedRenderer.updateRootDisplayList (ThreadedRenderer.java:567)
android.view.ThreadedRenderer.draw (ThreadedRenderer.java:673)
android.view.ViewRootImpl.draw (ViewRootImpl.java:4905)
android.view.ViewRootImpl.performDraw (ViewRootImpl.java:4620)
android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:3749)
android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:2428)
android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:9437)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:1228)
android.view.Choreographer.doCallbacks (Choreographer.java:1012)
android.view.Choreographer.doFrame (Choreographer.java:922)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1213)
android.os.Handler.handleCallback (Handler.java:938)
android.os.Handler.dispatchMessage (Handler.java:99)
android.os.Looper.loopOnce (Looper.java:233)
android.os.Looper.loop (Looper.java:334)
android.app.ActivityThread.main (ActivityThread.java:8513)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:582)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1068)

Solution

  • Migrating OP's solution from the question to an answer:

    I changed "Text" component to "BasicText" component. Also I was using the compose components (androidx.compose.ui:ui, androidx.compose.ui:ui-tooling, androidx.compose.foundation:foundation) version 1.5.0, but one of my libraries used version 1.6.0-alpha03 so it was overriding my used version 1.5.0. So I had to add these dependencies with version 1.6.0-alpha04 to override the bugged version 1.6.0-alpha03.

    I added these dependencies:

    implementation 'androidx.compose.ui:ui:1.6.0-alpha04'
    implementation 'androidx.compose.ui:ui-tooling:1.6.0-alpha04'
    implementation 'androidx.compose.material3:material3'
    implementation 'androidx.compose.foundation:foundation:1.6.0-alpha04'
    

    When changing to BasicText, I still had the crash happening, but when adding these dependencies with version 1.6.0-alpha04, the crash stopped happening. So make both changes to eliminate the crash.