アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

【Jetpack Compose】@ComposableをInner関数で使用しないほうが良い

env

composeOptions {
    kotlinCompilerVersion "1.5.10"
    kotlinCompilerExtensionVersion "1.0.0-rc01"
}

code

2つ目のViewを押すと called が2回呼ばれています。
TestViewをRoot関数の外に出すと1回だけになりました。
何故か更新の無いはずのRowの最初のViewが再コンポーズされていました。

@Composable
fun Root() {
    @Composable
    fun TestView(
        text: String,
        onClick: () -> Unit,
    ) {
        Button(onClick = onClick) {
            Log.d("LOG", "called")
            Text(text)
        }
    }

    val addCount = remember {
        mutableStateOf(0)
    }

    Row {
        TestView(
            text = "first view",
            onClick = {

            },
        )
        TestView(
            text = "second view" + addCount.value,
            onClick = {
                addCount.value++
            },
        )
    }
}