Status Update
Comments
so...@google.com <so...@google.com>
ig...@gmail.com <ig...@gmail.com> #2
We recently landed stability improvements and bugfixes in aosp/2258262 and will stabilize ModalBottomSheetLayout following a few release cycles. We are still evaluating the future API of BottomSheetScaffold and are expecting it to stay experimental for a bit more while we migrate it to Swipeable V2.
on...@aol.com <on...@aol.com> #3
ig...@gmail.com <ig...@gmail.com> #4
Currently slated for 1.7
so...@google.com <so...@google.com>
ig...@gmail.com <ig...@gmail.com> #5
Bumping to P1 as it is been a long while since we need to land this.
ig...@gmail.com <ig...@gmail.com> #6
Do we expect this to land by EOW? It's in the SLO chaselist now and very on fire.
ig...@gmail.com <ig...@gmail.com> #7
ig...@gmail.com <ig...@gmail.com> #8
Branch: androidx-main
commit e299b64fa3574b44e745173f406bc3b49e1d47f7
Author: Jossi Wolf <jossiwolf@google.com>
Date: Mon Nov 27 19:34:32 2023
[M2] Stabilize ModalBottomSheetLayout
Relnote: Material (2) modal bottom sheets have been promoted from experimental to stable. Deprecated constructors have been removed. The animation spec is now a tween spec in accordance with guidelines.
Fixes: 278692145, 266780235, 261409034
Test: Added modalBottomSheet_show_animatesToHalfExpandedFirstAndToExpandedAfter
Change-Id: Ic53f4fe7c7183569cb7322c8f56f571be5316be0
M compose/material/material/api/current.txt
M compose/material/material/api/restricted_current.txt
M compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/ModalBottomSheetStateTest.kt
M compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/ModalBottomSheetTest.kt
M compose/material/material/src/commonMain/kotlin/androidx/compose/material/ModalBottomSheet.kt
di...@gmail.com <di...@gmail.com> #9
Branch: androidx-main
commit 8cae2e36009d6c9c6905c4385e2db39100eff3ef
Author: Jossi Wolf <jossiwolf@google.com>
Date: Wed Nov 29 14:21:26 2023
[M2] Stabilize BottomSheetScaffold
Relnote: Material (2) standard bottom sheets have been promoted from experimental to stable. Deprecated constructors have been removed. The animation spec is now a tween spec in accordance with guidelines.
Fixes: 278692145, 261409034
Test: Existing tests
Change-Id: I3c1a892338d183db35ecf3c023255682b4e785bd
M compose/material/material/api/current.txt
M compose/material/material/api/restricted_current.txt
M compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/BottomSheetScaffoldTest.kt
M compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt
di...@gmail.com <di...@gmail.com> #10
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.material:material:1.7.0-alpha03
androidx.compose.material:material-android:1.7.0-alpha03
androidx.compose.material:material-desktop:1.7.0-alpha03
ig...@gmail.com <ig...@gmail.com> #11
Hello,
This is a minimal reproducible code:
@OptIn(ExperimentalMaterialApi::class)
@Composable
private fun Modal() {
val sheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden)
val coroutineScope = rememberCoroutineScope()
ModalBottomSheetLayout(
sheetState = sheetState,
sheetContent = {
Card(modifier = Modifier.height(256.dp)) {
Text(text = "BottomSheet!")
}
}
) {
Button(onClick = {
coroutineScope.launch { sheetState.show() }
}) {
Text(text = "Open BottomSheet")
}
}
}
In the code above, if the Card
height is not set or set to a lower value (e.g. 128.dp) it does not crash when rotating from landscape.
ig...@gmail.com <ig...@gmail.com> #12
I was able to implement a workaround to make it work without crashing.
For more information, please take a look at this PR with more explanation:
ig...@gmail.com <ig...@gmail.com> #13
Well, it's a step forward. 😊
Hopefully will be fixed in time for the stable release. 🎉
ma...@google.com <ma...@google.com> #14
fix for rc01 was intended to just make it not to crush with somewhat a sane behaviour, as it's very unclear what to do in general when the anchor is gone. We will try to account for it in the swipeable API redesign later on in the next compose versions.
As with all other experimental components in compose, the behaviour will stay the same in the stable version as well. Apologies if this causes inconvenience or instabilities, but given the Experimental flag the only proper long term solution I can suggest right now is to implement your own ModalBottomsheetLayout.
ig...@gmail.com <ig...@gmail.com> #15
Updating an experimental library to just make it not crash looks good to me. I was aware of the risks when applying to experimental features.
Thanks a lot for your feedback and continuous work to make better solutions. 😊
ig...@gmail.com <ig...@gmail.com> #16
This issue still reproducible in Compose 1.1.0-rc01!
Please, consider making the same change you did when releasing 1.0.0, where the ModalBottomSheet is closed when rotating the screen, otherwise it may impact the applications with this behavior when updating to latest stable.
Stack trace on Compose 1.1.0-rc01:
2022-01-18 10:17:52.117 12256-12256/com.escodro.alkaa E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.escodro.alkaa, PID: 12256
java.lang.IllegalArgumentException: The initial value must have an associated anchor.
at androidx.compose.material.SwipeableState.ensureInit$material_release(Swipeable.kt:138)
at androidx.compose.material.SwipeableKt$swipeable$3.invoke(Swipeable.kt:594)
at androidx.compose.material.SwipeableKt$swipeable$3.invoke(Swipeable.kt:573)
at androidx.compose.ui.ComposedModifierKt$materialize$result$1.invoke(ComposedModifier.kt:263)
at androidx.compose.ui.ComposedModifierKt$materialize$result$1.invoke(ComposedModifier.kt:258)
at androidx.compose.ui.Modifier$Element$DefaultImpls.foldIn(Modifier.kt:107)
at androidx.compose.ui.ComposedModifier.foldIn(ComposedModifier.kt:172)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.ComposedModifierKt.materialize(ComposedModifier.kt:258)
at androidx.compose.ui.layout.LayoutKt$materializerOf$1.invoke-Deg8D_g(Layout.kt:221)
at androidx.compose.ui.layout.LayoutKt$materializerOf$1.invoke(Layout.kt:220)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.material.SurfaceKt$Surface$6.invoke(Surface.kt:302)
at androidx.compose.material.SurfaceKt$Surface$6.invoke(Surface.kt:255)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:252)
at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:110)
at androidx.compose.material.ModalBottomSheetKt$ModalBottomSheetLayout$1.invoke(ModalBottomSheet.kt:262)
at androidx.compose.material.ModalBottomSheetKt$ModalBottomSheetLayout$1.invoke(ModalBottomSheet.kt:247)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
at androidx.compose.runtime.internal.ComposableLambdaImpl$invoke$1.invoke(ComposableLambda.jvm.kt:127)
at androidx.compose.runtime.internal.ComposableLambdaImpl$invoke$1.invoke(ComposableLambda.jvm.kt:127)
at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:140)
at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2158)
at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:2404)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2585)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2571)
at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:247)
at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source:1)
at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2571)
at androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:2547)
at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:620)
at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:786)
at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:105)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:456)
2022-01-18 10:17:52.117 12256-12256/com.escodro.alkaa E/AndroidRuntime: at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:425)
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:970)
at android.view.Choreographer.doCallbacks(Choreographer.java:796)
at android.view.Choreographer.doFrame(Choreographer.java:727)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
ma...@google.com <ma...@google.com> #17
This is a different issue from what I can see.
We've made a fix to react properly when the anchors have been changed, the problem in
Do you have a minimal repro sample for your problem?
ig...@gmail.com <ig...@gmail.com> #18
I'm afraid that the issue can be different, but the way to reproduce it is the same.
In fact, the minimal reproducible code I shared on
I'm attaching a simple project with Compose 1.0.0-rc01 and the code above.
How to reproduce:
- Open app
- Rotate to landscape
- Click on "BottomSheet" button
- Rotate screen to portrait
The issue does not reproduce if:
- Click on Bottom Sheet while the screen is on portrait than rotate landscape and portrait again;
- Does not set the height of sheetContent, or set
Modifier.setMaxSize()
.
Logs:
2022-01-21 14:19:49.772 10341-10341/com.example.bottomsheet E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.bottomsheet, PID: 10341
java.lang.IllegalArgumentException: The initial value must have an associated anchor.
at androidx.compose.material.SwipeableState.ensureInit$material_release(Swipeable.kt:138)
at androidx.compose.material.SwipeableKt$swipeable$3.invoke(Swipeable.kt:594)
at androidx.compose.material.SwipeableKt$swipeable$3.invoke(Swipeable.kt:573)
at androidx.compose.ui.ComposedModifierKt$materialize$result$1.invoke(ComposedModifier.kt:263)
at androidx.compose.ui.ComposedModifierKt$materialize$result$1.invoke(ComposedModifier.kt:258)
at androidx.compose.ui.Modifier$Element$DefaultImpls.foldIn(Modifier.kt:107)
at androidx.compose.ui.ComposedModifier.foldIn(ComposedModifier.kt:172)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:149)
at androidx.compose.ui.ComposedModifierKt.materialize(ComposedModifier.kt:258)
at androidx.compose.ui.layout.LayoutKt$materializerOf$1.invoke-Deg8D_g(Layout.kt:221)
at androidx.compose.ui.layout.LayoutKt$materializerOf$1.invoke(Layout.kt:220)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.material.SurfaceKt$Surface$6.invoke(Surface.kt:302)
at androidx.compose.material.SurfaceKt$Surface$6.invoke(Surface.kt:255)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:252)
at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:110)
at androidx.compose.material.ModalBottomSheetKt$ModalBottomSheetLayout$1.invoke(ModalBottomSheet.kt:262)
at androidx.compose.material.ModalBottomSheetKt$ModalBottomSheetLayout$1.invoke(ModalBottomSheet.kt:247)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
at androidx.compose.runtime.internal.ComposableLambdaImpl$invoke$1.invoke(ComposableLambda.jvm.kt:127)
at androidx.compose.runtime.internal.ComposableLambdaImpl$invoke$1.invoke(ComposableLambda.jvm.kt:127)
at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:140)
at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2158)
at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:2404)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2585)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2571)
at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:247)
at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source:1)
at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2571)
at androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:2547)
at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:620)
at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:786)
at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:105)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:456)
2022-01-21 14:19:49.775 10341-10341/com.example.bottomsheet E/AndroidRuntime: at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:425)
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:970)
at android.view.Choreographer.doCallbacks(Choreographer.java:796)
at android.view.Choreographer.doFrame(Choreographer.java:727)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Thanks a lot!
ig...@gmail.com <ig...@gmail.com> #19
This issue still reproducible in Compose 1.1.0 stable!
Please, consider giving it some attention because it will potentially crash applications using ModalBottomSheetLayout when migrating to 1.0.0 to 1.1.0!
jo...@google.com <jo...@google.com>
ig...@gmail.com <ig...@gmail.com> #20
The code on
le...@gmail.com <le...@gmail.com> #21
jo...@google.com <jo...@google.com> #22
Hi, this area is subject to ongoing work. Unfortunately, we cannot provide any timelines; however, we are working on fixes and will update this issue once we have something new!
pr...@gmail.com <pr...@gmail.com> #23
Hmm, .heightIn(min = 8.dp) workaround in my case
jo...@google.com <jo...@google.com> #24
This issue occurs when a ModalBottomSheetState
is at currentValue = HalfExpanded
and is then recreated as it won't have a HalfExpanded
anchor. See key
to rememberSaveable
though to avoid recreation of the state with an illegal initial value. However, users would still need to ensure they are passing in the correct initialValue
.
ap...@google.com <ap...@google.com> #25
Branch: androidx-main
commit faf197e56d6c5af3071dc9e4749b83a8dc181b95
Author: Jossi Wolf <jossiwolf@google.com>
Date: Mon Dec 05 17:19:31 2022
Don't restore ModalBottomSheetState if initialValue changed
If the initialValue changed in the composition after a configuration change, we'd still attempt to restore the previous state. If the `currentValue` (saved by ModalBottomSheetState.Saver) was `HalfExpanded` before, this would result in a crash when rotating from portrait -> landscape as there is no HalfExpanded state in landscape.
Test: modalBottomSheet_tallSheet_rotateLandscape_openSheet_staysOpen
Relnote: Fixed a bug where ModalBottomSheetLayout would crash if it was HalfExpanded when rotating from portrait to landscape. Please ensure you are passing in the correct `initialValue`, for example by checking the configuration.
Bug:
Change-Id: Ie8df79fae22ea27329024e0ea3b3f6a240151b87
M compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ModalBottomSheetTest.kt
M compose/material/material/src/commonMain/kotlin/androidx/compose/material/ModalBottomSheet.kt
jo...@google.com <jo...@google.com>
na...@google.com <na...@google.com> #26
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.material:material:1.4.0-alpha04
as...@google.com <as...@google.com> #27
jo...@google.com <jo...@google.com> #28
1.4.0-alpha04 contains a fix for this issue. If you are still seeing it, would you mind attaching a repro?
as...@google.com <as...@google.com> #29
jo...@google.com <jo...@google.com> #30
Thanks! Is it the same stack trace?
as...@google.com <as...@google.com> #31
Nope, different one:
FATAL EXCEPTION: main
Process: com.example.juicetracker, PID: 18722
java.lang.IllegalArgumentException: The initial value must have an associated anchor.
at androidx.compose.material.SwipeableState.ensureInit$material_release(Swipeable.kt:138)
at androidx.compose.material.SwipeableKt$swipeable$3.invoke(Swipeable.kt:594)
at androidx.compose.material.SwipeableKt$swipeable$3.invoke(Swipeable.kt:573)
at androidx.compose.ui.ComposedModifierKt$materialize$result$1.invoke(ComposedModifier.kt:278)
at androidx.compose.ui.ComposedModifierKt$materialize$result$1.invoke(ComposedModifier.kt:273)
at androidx.compose.ui.Modifier$Element.foldIn(Modifier.kt:114)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:272)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:272)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:272)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:272)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:272)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:272)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:272)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:272)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:272)
at androidx.compose.ui.CombinedModifier.foldIn(Modifier.kt:272)
at androidx.compose.ui.ComposedModifierKt.materialize(ComposedModifier.kt:273)
at androidx.compose.ui.layout.LayoutKt$materializerOf$1.invoke-Deg8D_g(Layout.kt:193)
at androidx.compose.ui.layout.LayoutKt$materializerOf$1.invoke(Layout.kt:192)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.material.SurfaceKt$Surface$1.invoke(Surface.kt:675)
at androidx.compose.material.SurfaceKt$Surface$1.invoke(Surface.kt:117)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:114)
at androidx.compose.material.ModalBottomSheetKt$ModalBottomSheetLayout$1.invoke(ModalBottomSheet.kt:341)
at androidx.compose.material.ModalBottomSheetKt$ModalBottomSheetLayout$1.invoke(ModalBottomSheet.kt:326)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
at androidx.compose.runtime.internal.ComposableLambdaImpl$invoke$1.invoke(ComposableLambda.jvm.kt:127)
at androidx.compose.runtime.internal.ComposableLambdaImpl$invoke$1.invoke(ComposableLambda.jvm.kt:127)
at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:145)
at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2375)
at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:2643)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:3260)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:3238)
at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:341)
at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source:1)
at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3238)
at androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:3203)
at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:771)
at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:1031)
at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:125)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:534)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:503)
2023-01-20 18:10:59.744 18722-18722 AndroidRuntime com.example.juicetracker E 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:1229)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239)
at android.view.Choreographer.doCallbacks(Choreographer.java:899)
at android.view.Choreographer.doFrame(Choreographer.java:827)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.runtime.PausableMonotonicFrameClock@e16e7a, androidx.compose.ui.platform.MotionDurationScaleImpl@c01662b, StandaloneCoroutine{Cancelling}@9fbca88, AndroidUiDispatcher@51adc21]
jo...@google.com <jo...@google.com> #32
Discussed offline, this code path doesn't exist in 1.4.0-alpha04 anymore. The issue #27 was seeing was likely
Description
Steps to Reproduce:
Expected behavior:
The Modal should be redrawn in portrait
Actual behavior:
Throws java.lang.IllegalArgumentException: The initial value must have an associated anchor.
The issue is reproducing in the "Tasks" tabs. If the Modal is already opened when rotating to landscape, it does not reproduce, only if opened in landscape.
Additional logs: