saket / cascade

Nested popup menus with smooth height animations for Android
https://saket.github.io/cascade
Apache License 2.0
2.02k stars 67 forks source link

App Crash when clicking on menu item #33

Closed yoongtran closed 11 months ago

yoongtran commented 1 year ago

App crash when I clicked on a menu item with children. Device Android 11

Crash Log: java.lang.IllegalArgumentException: Cannot perform operation for Unspecified type. at androidx.compose.ui.unit.TextUnitKt.checkArithmetic--R2X_6o(TextUnit.kt:344) at me.saket.cascade.CascadeColumnScope$DefaultImpls.DropdownMenuHeader(Cascade.kt:458) at me.saket.cascade.CascadeKt$CascadeColumnScope$1.DropdownMenuHeader(Cascade.kt:393) at me.saket.cascade.CascadeColumnScope$DropdownMenuItem$1.invoke(Cascade.kt:305) at me.saket.cascade.CascadeColumnScope$DropdownMenuItem$1.invoke(Cascade.kt:305) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at me.saket.cascade.CascadeKt$CascadeDropdownMenuContent$2$2.invoke(Cascade.kt:259) at me.saket.cascade.CascadeKt$CascadeDropdownMenuContent$2$2.invoke(Cascade.kt:250) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:135) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.animation.AnimatedContentKt$AnimatedContent$5$1$4.invoke(AnimatedContent.kt:658) at androidx.compose.animation.AnimatedContentKt$AnimatedContent$5$1$4.invoke(AnimatedContent.kt:648) 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.animation.AnimatedVisibilityKt.AnimatedEnterExitImpl(AnimatedVisibility.kt:939) at androidx.compose.animation.AnimatedVisibilityKt.AnimatedVisibility(AnimatedVisibility.kt:607) at androidx.compose.animation.AnimatedContentKt$AnimatedContent$5$1.invoke(AnimatedContent.kt:638) at androidx.compose.animation.AnimatedContentKt$AnimatedContent$5$1.invoke(AnimatedContent.kt:625) 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.animation.AnimatedContentKt.AnimatedContent(AnimatedContent.kt:671) at androidx.compose.animation.AnimatedContentKt.AnimatedContent(AnimatedContent.kt:131) at me.saket.cascade.CascadeKt$CascadeDropdownMenuContent$2.invoke(Cascade.kt:246) at me.saket.cascade.CascadeKt$CascadeDropdownMenuContent$2.invoke(Cascade.kt:233) 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.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:162) at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2465) at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:2733) at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:3364) at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:3342) 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:3342) at androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:3307) at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:772) at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:1047) at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:124) at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:541) 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) 2023-02-17 13:49:48.070 18917-18917 AndroidRuntime com.phunware.modules.mapping.sample E 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:1054) at android.view.Choreographer.doCallbacks(Choreographer.java:878) at android.view.Choreographer.doFrame(Choreographer.java:807) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1041) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:368) at android.app.ActivityThread.main(ActivityThread.java:7710) 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:954) Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.runtime.PausableMonotonicFrameClock@61d3318, androidx.compose.ui.platform.MotionDurationScaleImpl@c904171, StandaloneCoroutine{Cancelling}@bc27b56, AndroidUiDispatcher@de6e7d7]

saket commented 1 year ago

Can you share some code to reproduce this?

yoongtran commented 1 year ago

Thanks. I followed the sample code and here are the versions I am on. Android Studio Electric Eel | 2022.1.1 Patch 1 androidx.compose:compose-bom:2023.01.00

Crash occurs with this code: `var isMenuVisible by rememberSaveable { mutableStateOf(false) }

Box(
    contentAlignment = Alignment.Center,
    modifier = Modifier
        .fillMaxSize()
        .background(color = Color.White),
) {
    FilledIconButton(
        onClick = { isMenuVisible = !isMenuVisible },
        colors = IconButtonDefaults.filledIconButtonColors(
            containerColor = MaterialTheme.colorScheme.background
        ),
    ) {
        val state = rememberCascadeState()
        CascadeDropdownMenu(
            expanded = isMenuVisible,
            state = state,
            onDismissRequest = {},
        ) {
            DropdownMenuItem(
                text = { Text("Remove") },
                childrenHeader = {
                    DropdownMenuHeader { Text("Are you sure?") }
                },
                children = {
                    androidx.compose.material3.DropdownMenuItem(text = { Text("Burn them all") }, onClick = { })
                    androidx.compose.material3.DropdownMenuItem(text = { Text("Take me back") }, onClick = { state.navigateBack() })
                },
            )
        }

        Icon(
            imageVector = ImageVector.vectorResource(id = R.drawable.ic_floor_selector),
            contentDescription = null,
            tint = MaterialTheme.colorScheme.primary,
        )
    }
}`
saket commented 1 year ago

I'm sorry but I wasn't able to reproduce this on my side. What device were you using?

https://github.com/saket/cascade/assets/2387680/e2bb306b-0603-4ed7-9424-73a2504ce050

saket commented 11 months ago

Closing due to inactivity. Please feel free to reopen.