0Day Forums
(jetpack compose) androidx.compose.runtime.internal.ComposableLambdaImpl cannot be cast to kotlin.jvm.functions.Function0 - Printable Version

+- 0Day Forums (https://0day.red)
+-- Forum: Coding (https://0day.red/Forum-Coding)
+--- Forum: Kotlin (https://0day.red/Forum-Kotlin)
+--- Thread: (jetpack compose) androidx.compose.runtime.internal.ComposableLambdaImpl cannot be cast to kotlin.jvm.functions.Function0 (/Thread-jetpack-compose-androidx-compose-runtime-internal-ComposableLambdaImpl-cannot-be-cast-to-kotlin-jvm-functions-Function0)



(jetpack compose) androidx.compose.runtime.internal.ComposableLambdaImpl cannot be cast to kotlin.jvm.functions.Function0 - blowzetslmahno - 07-20-2023

I have an BaseUi class for my custom views and my activities extends from it. <br/>
whe i using ```Root``` function , application crashed.

**BaseUi.kt**

@ExperimentalAnimationApi
open class BaseUi : AppCompatActivity() {

@Composable
fun RtlView(content: @Composable () -> Unit) {
CompositionLocalProvider(
LocalLayoutDirection provides LayoutDirection.Rtl,
content = content
)
}

@Composable
fun LtrView(content: @Composable () -> Unit) {
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) {
content()
}
}

@Composable
fun Root(
content: @Composable () -> Unit
) {
KasbTheme {
Box(
Modifier
.fillMaxSize()
.background(LightPageBackground)
.padding(Dimen.pagePadding)
){
content()
}
}
}
}

**SplashActivity.kt**


@ExperimentalAnimationApi
class SplashActivity : BaseActivity() {

val viewModel = SplashActivityViewModel()

@ExperimentalAnimationApi
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
InitUI()
}
}

@ExperimentalAnimationApi
@Preview(showBackground = true)
@Composable
fun InitUI() {
Root {
RtlView {
Box(Modifier.fillMaxSize()) {
Image(
painter = painterResource(id = R.drawable.logo),
contentDescription = "",
modifier = Modifier.size(200.dp).align(Alignment.Center)
)
}
}
}
}
}

**Runtime error**

```
com.kasb.android E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.kasb.android, PID: 22387
java.lang.ClassCastException: androidx.compose.runtime.internal.ComposableLambdaImpl cannot be cast to kotlin.jvm.functions.Function0
at com.kasb.android.ui.activity.SplashActivity.InitUI(SplashActivity.kt:76)
at com.kasb.android.ui.activity.SplashActivity$onCreate$1.invoke(SplashActivity.kt:30)
at com.kasb.android.ui.activity.SplashActivity$onCreate$1.invoke(SplashActivity.kt:29)
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.ui.platform.ComposeView.Content(ComposeView.android.kt:384)
```


RE: (jetpack compose) androidx.compose.runtime.internal.ComposableLambdaImpl cannot be cast to kotlin.jvm.functions.Function0 - astasia108608 - 07-20-2023

not a permanent fix, but clean project gets rid of the error for one compile. Don't know why it's happening though.


RE: (jetpack compose) androidx.compose.runtime.internal.ComposableLambdaImpl cannot be cast to kotlin.jvm.functions.Function0 - grumping321665 - 07-20-2023

I had same error, and problem was caused that I was calling function form subtype of the class where it was defined

BaseActivity{
fun displayAlertDialog(content: @Composable() () -> Unit) {
bottomDialog.show(supportFragmentManager, "bottom-dialog")
bottomDialog.setContent(content)
}
@Composable
fun Screen(
activity: BaseActivity,
) {
activity.displayAlertDialog{}
}

// works fine
//if activity is subtype of BaseActivity it throws that error







RE: (jetpack compose) androidx.compose.runtime.internal.ComposableLambdaImpl cannot be cast to kotlin.jvm.functions.Function0 - unwearied692 - 07-20-2023

simple way, you just put the composable function into Class delegate,

``` in my ksp
writer.writeLine(${binding}.${handleMethod}(${IssueFixClass::class.simpleName}.${IssueFixClass.Delegate::makeClass.name}(contentListBlock$timestamp)))
```

result like this
```
binding.handleUIGroupCreator( IssueFixClass.makeClass(content64966723696806))
```



my kmm androidMain






```
actual class IssueFixClass private actual constructor(val content:@Composable @UiComposable ()->Unit){
@Composable
@UiComposable
actual fun invoke(){
content.invoke()
}
actual companion object Delegate{
actual fun makeClass(content: @Composable @UiComposable () -> Unit):IssueFixClass{
return IssueFixClass(content)
}
}
}
```