具有材料3的脚手架状态的参考错误未解决



Android Studio为ScaffoldStateMaterial3抛出Unresolved Reference错误。我怎样才能让它工作?

import androidx.compose.foundation.clickable
import androidx.compose.material3.*
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.navigation.NavController
import kotlinx.coroutines.launch
@Composable
fun CustomAppBar(
title: String,
backGroundColor: Color = Color.White,
actions: @Composable () -> Unit = { },
scaffoldState: ScaffoldState? = null, // Errors here...
navController: NavController,
) {
val scope = rememberCoroutineScope()
SmallTopAppBar(
title = {
Text(
title,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
},
colors = TopAppBarDefaults.smallTopAppBarColors(
containerColor = containerBackGroundColor,
titleContentColor = titleContentColor
),
navigationIcon = if (navController?.previousBackStackEntry != null) {
{
IconButton(onClick = { navController.navigateUp() }) {
Icon(
imageVector = Icons.Filled.ArrowBack,
contentDescription = "Back"
)
}
}
} else {
{
IconButton(onClick = {
scope.launch {
scaffoldState?.drawerState?.open()
}
}) {
Icon(
Icons.Filled.Menu,
contentDescription = "Nav drawer icon",
)
}
}
},
actions = {
actions()
}
)
}

依赖项

implementation "androidx.core:core-ktx:1.8.0"
implementation "androidx.compose.ui:ui:1.2.1"
implementation "androidx.compose.material3:material3:1.0.0-beta01"
implementation "androidx.compose.ui:ui-tooling-preview:1.2.1"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.3.1"
implementation "androidx.activity:activity-compose:1.3.1"
implementation "androidx.compose.compiler:compiler:1.3.0"
implementation "androidx.navigation:navigation-runtime:2.5.1"
implementation "com.google.accompanist:accompanist-navigation-animation:0.23.1"

我已经查看了我的依赖项,ScaffoldStatecom.google.android.material:material:$materialVersion"的一部分。

就我而言,我有1.7.0-alpha03com.google.android.material:material:1.7.0-alpha03(此时可能有更新的版本(。

我相信如果你加上那个,然后正确的导入:

import androidx.compose.material.ScaffoldState你应该能够使用它。

别忘了同步Gradle。

ScaffoldState在m3中不存在,官方文件对此及其替代方案进行了解释:

M2脚手架状态类在M3中不再存在,因为它包含不再需要的drawerState参数。要使用M3脚手架显示小吃条,请使用SnackbarHostState:

import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
val snackbarHostState = remember { SnackbarHostState() }
val scope = rememberCoroutineScope()
Scaffold(
snackbarHost = { SnackbarHost(snackbarHostState) },
content = {
…
scope.launch {
snackbarHostState.showSnackbar(…)
}
}
)

M2脚手架上的所有抽屉*参数已从M3脚手架上移除。其中包括drawerShape和drawerContent等参数。要显示带有M3脚手架的抽屉,请使用可组合的导航抽屉,例如ModalNavigationDrawer,而不是

import androidx.compose.material3.DrawerValue
import androidx.compose.material3.ModalDrawerSheet
import androidx.compose.material3.ModalNavigationDrawer
import androidx.compose.material3.Scaffold
import androidx.compose.material3.rememberDrawerState
val drawerState = rememberDrawerState(DrawerValue.Closed)
val scope = rememberCoroutineScope()
ModalNavigationDrawer(
drawerState = drawerState,
drawerContent = {
ModalDrawerSheet(
drawerShape = …,
drawerTonalElevation = …,
drawerContainerColor = …,
drawerContentColor = …,
content = { … }
)
},
gesturesEnabled = …,
scrimColor = …,
content = {
Scaffold(
content = {
…
scope.launch {
drawerState.open()
}
}
)
}
)

有关从Material3中删除的项目及其替换项目的更多信息,请参阅下面的链接。

在Compose 中从材料2迁移到材料3

这是Windows。转至File > Invalidate Caches > (Check Everything) Invalidate Caches and Restart。不妨在连接互联网的同时尝试Build > Rebuild Project,以确保所有依赖项都能正确下载。希望您不需要手动从内部文件夹中分解部分下载的库。。。这就像头朝下跳进脏衣服里。金达还让我想起了复仇者联盟的场景,他们修理了一个部分炸毁的涡轮推进器。

最新更新