无法在android compose Material3中使用rememberScaffoldState()

Vid*_*uri 38 android kotlin material-components-android android-jetpack-compose android-jetpack-compose-material3

我想用

记住脚手架状态()

在android Material3 compose中,但无法使用它。

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun AppFeatureScreen(viewModel: AppFeatureViewModel = viewModel()) {
    val scaffoldState = rememberScaffoldState()
    Scaffold() {

    }
}
Run Code Online (Sandbox Code Playgroud)

小智 21

你好,根据Google文档,你可以这样做:https: //developer.android.com/reference/kotlin/androidx/compose/material3/package-summary.html#Snackbar (androidx.compose.material3.SnackbarData,androidx.compose .ui.Modifier,kotlin.Boolean,androidx.compose.ui.graphics.Shape,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx .compose.ui.graphics.Color,androidx.compose.ui.graphics.Color)

import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope

val snackbarHostState = remember { SnackbarHostState() }
val scope = rememberCoroutineScope()
Scaffold(
    snackbarHost = { SnackbarHost(snackbarHostState) },
    floatingActionButton = {
        var clickCount by remember { mutableStateOf(0) }
        ExtendedFloatingActionButton(
            onClick = {
                // show snackbar as a suspend function
                scope.launch {
                    snackbarHostState.showSnackbar(
                        "Snackbar # ${++clickCount}"
                    )
                }
            }
        ) { Text("Show snackbar") }
    },
    content = { innerPadding ->
        Text(
            text = "Body content",
            modifier = Modifier.padding(innerPadding).fillMaxSize().wrapContentSize()
        )
    }
)
Run Code Online (Sandbox Code Playgroud)


mah*_*mnj 14

rememberScaffoldState已在材料 3 中删除,迁移文档显示

\n
\n

M2 ScaffoldState 类不再存在于 M3 中,因为它包含不再需要的抽屉状态参数。要使用 M3 Scaffold 显示小吃栏,请改用 SnackbarHostState:

\n
\n

这就是材料 3 中显示小吃栏的方式。

\n
import androidx.compose.material3.Scaffold\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\n\nval snackbarHostState = remember { SnackbarHostState() }\nval scope = rememberCoroutineScope()\n\nScaffold(\n    snackbarHost = { SnackbarHost(snackbarHostState) },\n    content = {\n        \xe2\x80\xa6\n        Button(\n          onClick = {\n            scope.launch {\n              snackbarHostState.showSnackbar(\n                 message = "Hey this is a snackbar",\n                 actionLabel = "Click me",\n                 duration = SnackbarDuration.Short\n              )\n            }\n          })\n           {\n             Text(text = "Click me")\n           }\n    }\n)\n
Run Code Online (Sandbox Code Playgroud)\n


MyN*_*yNT 7

您需要记住SnackbarHostState()并向脚手架提供 SnackbarHost 以便您可以显示小吃栏。

val snackbarHostState = remember { SnackbarHostState() }

Scaffold(
    ...
    snackbarHost = { SnackbarHost(hostState = snackbarHostState) }
    ...
)
Run Code Online (Sandbox Code Playgroud)

然后你可以用来snackbarHostState.showSnackbar显示snackbar。