这与官方公布的LookaheadScope
人中的doc人略有不同.
这就是分支,main分支,它总是工作得很好,而develop分支,更改有限,会引发异常.
有限的变化主要是在布局上.
要突出显示以下内容:
在总是运转良好的主分支机构中,
if (isInColumn) {
Column {
item0()
item1()
item2()
item3()
}
} else {
Row {
item0()
item1()
item2()
item3()
}
}
布局略有不同: (这个 idea 只是为了try 引入更复杂的布局)
if (isInColumn) {
Column {
item0()
item1()
Row {
item2()
item3()
}
}
} else {
Row {
Column {
item0()
item1()
}
item2()
item3()
}
}
第一次点击总是有效的,然而,第二次点击总是崩溃.
抛出的完整异常:
FATAL EXCEPTION: main
Process: com.idiotleon.demo.demolookaheadapplication, PID: 24551
java.lang.IllegalStateException: Cannot insert LayoutNode@cc72396 children: 0 measurePolicy: androidx.compose.foundation.layout.BoxKt$EmptyBoxMeasurePolicy$1@5465a19 because it already has a parent. This tree: |-LayoutNode@5d08563 children: 1 measurePolicy: androidx.compose.foundation.layout.RowColumnImplKt$rowColumnMeasurePolicy$1@6be2ade
|-LayoutNode@01962b1 children: 0 measurePolicy: androidx.compose.foundation.layout.BoxKt$EmptyBoxMeasurePolicy$1@5465a19 Other tree: |-LayoutNode@68fe1f5 children: 1 measurePolicy: androidx.compose.foundation.layout.RowColumnImplKt$rowColumnMeasurePolicy$1@6be2ade
|-LayoutNode@cc72396 children: 0 measurePolicy: androidx.compose.foundation.layout.BoxKt$EmptyBoxMeasurePolicy$1@5465a19
at androidx.compose.ui.node.LayoutNode.insertAt$ui_release(LayoutNode.kt:246)
at androidx.compose.ui.node.UiApplier.insertBottomUp(UiApplier.android.kt:31)
at androidx.compose.ui.node.UiApplier.insertBottomUp(UiApplier.android.kt:21)
at androidx.compose.runtime.ComposerImpl$insertMovableContentGuarded$1$1$3.invoke(Composer.kt:3102)
at androidx.compose.runtime.ComposerImpl$insertMovableContentGuarded$1$1$3.invoke(Composer.kt:3097)
at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:810)
at androidx.compose.runtime.CompositionImpl.applyLateChanges(Composition.kt:852)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:607)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:510)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:34)
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:1410)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1420)
at android.view.Choreographer.doCallbacks(Choreographer.java:1047)
at android.view.ChoreographerExtImpl.checkScrollOptSceneEnable(ChoreographerExtImpl.java:442)
at android.view.Choreographer.doFrame(Choreographer.java:918)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1395)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:240)
at android.os.Looper.loop(Looper.java:351)
at android.app.ActivityThread.main(ActivityThread.java:8416)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.runtime.PausableMonotonicFrameClock@69eb7b6, androidx.compose.ui.platform.MotionDurationScaleImpl@a51dcb7, StandaloneCoroutine{Cancelling}@2a4ec24, AndroidUiDispatcher@803b38d]
这个例外是关于什么的?新布局 node 看起来一开始无法删除,因此无法插入.
请问如何调试和解决这个问题? 谢谢.