Status Update
Comments
dm...@gmail.com <dm...@gmail.com> #2
Over to Ralston to take a look. I imagine with the new relocation logic it should be fixed?
je...@gmail.com <je...@gmail.com> #3
What is happening here is that the TextField does not know that it is in a scrollable container, and since the keyboard is going to hide the currently focused text, the text field calls View.requestRectangleOnScreen which causes the entire app to pan up, and that clips the top bar.
The Relocation APIs are experimental right now. It is not used in TextField as we are past the alpha stage and can only use stable APIs in TextField. So this bug can only be fixed post 1.0
lp...@google.com <lp...@google.com>
an...@google.com <an...@google.com> #4
This should be fixed by
I verified that this sample code now works when soft input mode is AdjustResize.
ap...@google.com <ap...@google.com> #5
Branch: androidx-main
commit 0523a3b7d3ae78829baf54b2abf3bc5dcfc6b6d7
Author: Andrey Kulikov <andreykulikov@google.com>
Date: Fri Dec 22 13:50:31 2023
Make sure we do not remeasure deactivated nodes
Even when it is requested via Remeasurement.forceRemeasure(). Deactivated nodes are always skipped during the regular measure pass, so here it should be a no-op. For fully detached nodes it is a no-op as well.
Bug: 316683578
Test: new test in LazyColumnTest
Change-Id: Ic017fdca075806236b071f58bb48095e951126c0
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/lazy/list/LazyColumnTest.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/MeasureAndLayoutDelegate.kt
bl...@gmail.com <bl...@gmail.com> #6
This also happens within Pager
component (foundation 1.6.0-beta03); looks like the same issue:
Exception java.lang.IllegalArgumentException: measure is called on a deactivated node
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0 (LayoutNodeLayoutDelegate.kt:1)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release (LayoutNode.kt:1)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA (MeasureAndLayoutDelegate.kt:1)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout-0kLqBqw (MeasureAndLayoutDelegate.kt:1)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout-0kLqBqw (AndroidComposeView.android.kt:1)
at androidx.compose.ui.node.LayoutNode.forceRemeasure (LayoutNode.kt:1)
at androidx.compose.foundation.pager.PagerState.performScroll (PagerState.kt:1)
at androidx.compose.foundation.pager.PagerState.access$performScroll (PagerState.kt:1)
at androidx.compose.foundation.pager.PagerState$scrollableState$1.invoke (PagerState.kt:1)
at androidx.compose.foundation.pager.PagerState$scrollableState$1.invoke (PagerState.kt:1)
at androidx.compose.foundation.gestures.DefaultScrollableState$scrollScope$1.scrollBy (ScrollableState.kt:1)
at androidx.compose.foundation.gestures.ScrollingLogic$dispatchScroll$performScroll$1.invoke-MK-Hz9U (Scrollable.kt:1)
at androidx.compose.foundation.gestures.ScrollingLogic$dispatchScroll$performScroll$1.invoke (Scrollable.kt:1)
at androidx.compose.foundation.AndroidEdgeEffectOverscrollEffect.applyToScroll-Rhakbz0 (AndroidOverscroll.android.kt:1)
at androidx.compose.foundation.gestures.ScrollingLogic.dispatchScroll-3eAAhYA (Scrollable.kt:1)
at androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1.invoke-MK-Hz9U (Scrollable.kt:1)
at androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1.invoke (Scrollable.kt:1)
at androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$scope$1.scrollBy (Scrollable.kt:1)
at androidx.compose.foundation.gestures.snapping.SnapFlingBehaviorKt$animateWithTarget$2.invoke (SnapFlingBehavior.kt:1)
at androidx.compose.foundation.gestures.snapping.SnapFlingBehaviorKt$animateWithTarget$2.invoke (SnapFlingBehavior.kt:1)
at androidx.compose.animation.core.SuspendAnimationKt.doAnimationFrame (SuspendAnimation.kt:1)
at androidx.compose.animation.core.SuspendAnimationKt.doAnimationFrameWithScale (SuspendAnimation.kt:1)
at androidx.compose.animation.core.SuspendAnimationKt.access$doAnimationFrameWithScale (SuspendAnimation.kt:1)
at androidx.compose.animation.core.SuspendAnimationKt$animate$9.invoke (SuspendAnimation.kt:1)
at androidx.compose.animation.core.SuspendAnimationKt$animate$9.invoke (SuspendAnimation.kt:1)
at androidx.compose.animation.core.SuspendAnimationKt$callWithFrameNanos$2.invoke (SuspendAnimation.kt:1)
at androidx.compose.animation.core.SuspendAnimationKt$callWithFrameNanos$2.invoke (SuspendAnimation.kt:1)
at androidx.compose.runtime.BroadcastFrameClock$FrameAwaiter.resume (BroadcastFrameClock.kt:1)
at androidx.compose.runtime.BroadcastFrameClock.sendFrame (BroadcastFrameClock.kt:1)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke (Recomposer.kt:1)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke (Recomposer.kt:1)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame (AndroidUiFrameClock.android.kt:1)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch (AndroidUiDispatcher.android.kt:1)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch (AndroidUiDispatcher.android.kt:1)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame (AndroidUiDispatcher.android.kt)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:1299)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:1309)
at android.view.Choreographer.doCallbacks (Choreographer.java:923)
at android.view.Choreographer.doFrame (Choreographer.java:847)
at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1283)
at android.os.Handler.handleCallback (Handler.java:942)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loopOnce (Looper.java:226)
at android.os.Looper.loop (Looper.java:313)
at android.app.ActivityThread.main (ActivityThread.java:8762)
at java.lang.reflect.Method.invoke
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:604)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1067)
fu...@gmail.com <fu...@gmail.com> #7
facing the same issue
jk...@gmail.com <jk...@gmail.com> #8
b9...@gmail.com <b9...@gmail.com> #9
Did this issue fix in 1.6.0-rc01
?
an...@google.com <an...@google.com> #10
Yes
b9...@gmail.com <b9...@gmail.com> #11
Thanks. It would be better to change the status of the issue to fixed
or released
. Also I didn't see it from the release note of 1.6.0-rc01
ho...@quora.com <ho...@quora.com> #12
We upgraded from 1.5 to 1.6.0-rc01 and started seeing this crash in production. Perhaps it hasn't been completely fixed?
Thanks!
Fatal Exception: java.lang.IllegalArgumentException: measure is called on a deactivated node
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:604)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(LayoutNodeLayoutDelegate.kt:596)
at androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScopeImpl.measure-0kLqBqw(LazyLayoutMeasureScope.kt:127)
at androidx.compose.foundation.lazy.LazyListMeasuredItemProvider.getAndMeasure(LazyListMeasuredItemProvider.java:48)
at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke-0kLqBqw(LazyList.kt:195)
at androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-5IMabDg(LazyListMeasure.kt:195)
at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke-0kLqBqw(LazyList.kt:313)
at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke(LazyList.kt:178)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke-0kLqBqw(LazyLayout.kt:107)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke(LazyLayout.kt:100)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:708)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:126)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$2.invoke-3p2s80s(AndroidOverscroll_android.kt:584)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$2.invoke(AndroidOverscroll_android.kt:583)
at androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s(LayoutModifier.kt:291)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$1.invoke-3p2s80s(AndroidOverscroll.android.kt:568)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$1.invoke(AndroidOverscroll.android.kt:567)
at androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s(LayoutModifier.kt:291)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.foundation.layout.FillNode.measure-3p2s80s(Size.kt:699)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.kt:252)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.kt:251)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.java:2303)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:500)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:256)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:113)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.java:1613)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.java:36)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:620)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.java:1144)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release$default(LayoutNode.java:1135)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA(MeasureAndLayoutDelegate.kt:356)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:514)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded$default(MeasureAndLayoutDelegate.kt:491)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:377)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:971)
at androidx.compose.ui.node.Owner.measureAndLayout$default(Owner.kt:228)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:1224)
at android.view.View.draw(View.java:23586)
at android.view.View.updateDisplayListIfDirty(View.java:22398)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4598)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4571)
at android.view.View.updateDisplayListIfDirty(View.java:22349)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4598)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4571)
at android.view.View.updateDisplayListIfDirty(View.java:22349)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4598)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4571)
at android.view.View.updateDisplayListIfDirty(View.java:22349)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4598)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4571)
at android.view.View.updateDisplayListIfDirty(View.java:22349)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:709)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:715)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:843)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:5079)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4778)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3972)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2592)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9703)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1484)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1492)
at android.view.Choreographer.doCallbacks(Choreographer.java:1103)
at android.view.Choreographer.doFrame(Choreographer.java:1008)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1467)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:223)
at android.os.Looper.loop(Looper.java:324)
at android.app.ActivityThread.main(ActivityThread.java:8547)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1061)
an...@google.com <an...@google.com> #13
Based on the stacktrace it is a different bug, the previous one was related to fling. Could you please file a separate bug with more details on when it happens? Thanks
ho...@quora.com <ho...@quora.com> #14
ok thanks for looking into this and the response! Filed a separate bug:
le...@google.com <le...@google.com> #15
Closing since both the main issue and linked issue have been fixed.
ap...@google.com <ap...@google.com> #16
Branch: androidx-main
commit b8a0ca7770206de4ebae3facb5005be9b2c972ba
Author: Levi Albuquerque <levima@google.com>
Date: Thu Sep 12 11:12:29 2024
Update the fling cancellation behavior in Scrollables.
Now in Scrollables, the fling will no longer be driven by the inner most scrollable child, but rather each Scrollable will re-start the fling with the remaining velocity when the inner scrollable hits the bounds. The scope used to launch the fling animation will be the local Scrollable Node scope.
Because this is a behavior change, we are introducing with the flag NestedFlingCancellationBehavior. From the perspective of a regular Scrollable nothing should change and this will only affect nested scrollables.
Test: Added additional tests in ScrollableTest to verify the new behavior.
Bug: 332677564
Bug: 316683578
Bug: 303224944
Fixes: 175010956
Fixes: 260129627
Relnote: N/A
Change-Id: I9326ad40271d77d6b2f8038c6fb9eb313873d8b6
M compose/foundation/foundation/api/current.txt
M compose/foundation/foundation/api/restricted_current.txt
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehaviorTest.kt
A compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/ComposeFoundationFlags.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior.kt
A compose/foundation/foundation/src/commonStubsMain/kotlin/androidx/compose/foundation/gestures/Scrollable.commonStubs.kt
A compose/foundation/foundation/src/jvmMain/kotlin/androidx/compose/foundation/gestures/Scrollable.jvm.kt
pr...@google.com <pr...@google.com> #17
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.8.0-alpha03
androidx.compose.foundation:foundation-android:1.8.0-alpha03
androidx.compose.foundation:foundation-jvmstubs:1.8.0-alpha03
androidx.compose.foundation:foundation-linuxx64stubs:1.8.0-alpha03
Description
Jetpack Compose component(s) used: many
Android Studio Build: 2023.2.1 Canary 18
Kotlin version: 1.9.21
I have not yet a repro but reporting for some hints about possible causes.
I first had very rarely the same crash when using Chris Banes snapper, finally migrated to foundation version as it's now more or less similar but the crash seems to still occur.
Posting in foundation as seems tied to snapping or Lazy lists but not really sure.
Stack trace (if applicable):
```
Fatal Exception: java.lang.IllegalArgumentException: measure is called on a deactivated node
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:604)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.kt:1147)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA(MeasureAndLayoutDelegate.kt:354)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout-0kLqBqw(MeasureAndLayoutDelegate.kt:434)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout-0kLqBqw(AndroidComposeView.android.kt:1067)
at androidx.compose.ui.node.LayoutNode.forceRemeasure(LayoutNode.kt:1221)
at androidx.compose.foundation.lazy.LazyListState.onScroll$foundation_release(LazyListState.kt:345)
at androidx.compose.foundation.lazy.LazyListState$scrollableState$1.invoke(LazyListState.kt:185)
at androidx.compose.foundation.lazy.LazyListState$scrollableState$1.invoke(LazyListState.kt:185)
at androidx.compose.foundation.gestures.DefaultScrollableState$scrollScope$1.scrollBy(ScrollableState.kt:166)
at androidx.compose.foundation.gestures.ScrollingLogic$dispatchScroll$performScroll$1.invoke-MK-Hz9U(Scrollable.kt:762)
at androidx.compose.foundation.gestures.ScrollingLogic$dispatchScroll$performScroll$1.invoke(Scrollable.kt:752)
at androidx.compose.foundation.AndroidEdgeEffectOverscrollEffect.applyToScroll-Rhakbz0(AndroidOverscroll.android.kt:180)
at androidx.compose.foundation.gestures.ScrollingLogic.dispatchScroll-3eAAhYA(Scrollable.kt:778)
at androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1.invoke-MK-Hz9U(Scrollable.kt:833)
at androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1.invoke(Scrollable.kt:832)
at androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$scope$1.scrollBy(Scrollable.kt:837)
at androidx.compose.foundation.gestures.snapping.SnapFlingBehaviorKt$animateWithTarget$2.invoke(SnapFlingBehavior.kt:451)
at androidx.compose.foundation.gestures.snapping.SnapFlingBehaviorKt$animateWithTarget$2.invoke(SnapFlingBehavior.kt:444)
at androidx.compose.animation.core.SuspendAnimationKt.doAnimationFrame(SuspendAnimation.kt:361)
at androidx.compose.animation.core.SuspendAnimationKt.doAnimationFrameWithScale(SuspendAnimation.kt:339)
at androidx.compose.animation.core.SuspendAnimationKt.access$doAnimationFrameWithScale(SuspendAnimation.kt:1)
at androidx.compose.animation.core.SuspendAnimationKt$animate$9.invoke(SuspendAnimation.kt:279)
at androidx.compose.animation.core.SuspendAnimationKt$animate$9.invoke(SuspendAnimation.kt:278)
at androidx.compose.animation.core.SuspendAnimationKt$callWithFrameNanos$2.invoke(SuspendAnimation.kt:304)
at androidx.compose.animation.core.SuspendAnimationKt$callWithFrameNanos$2.invoke(SuspendAnimation.kt:303)
at androidx.compose.runtime.BroadcastFrameClock$FrameAwaiter.resume(BroadcastFrameClock.kt:42)
at androidx.compose.runtime.BroadcastFrameClock.sendFrame(BroadcastFrameClock.kt:71)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:579)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:572)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1341)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1352)
at android.view.Choreographer.doCallbacks(Choreographer.java:952)
at android.view.Choreographer.doFrame(Choreographer.java:878)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1326)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8194)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
```