【问题标题】:Unresolved Reference error for ScaffoldState with Material3使用 Material3 的 ScaffoldState 的未解决参考错误
【发布时间】:2022-11-06 20:02:59
【问题描述】:

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"

【问题讨论】:

  • 我使用1.3.0-alpha02 代表androidx.compose.ui:uiandroidx.compose.ui:ui-tooling-preview1.6.0-alpha05 代表androidx.activity:activity-compose1.0.0-alpha15 代表androidx.compose.material3:material3(可能有更新的版本,尚未更新)。还有……0.26.0-alpha也是我的伴奏版;非物质 3 版本是1.7.0-alpha03(对于com.google.android.material:material)和..1.9.0-alpha05 是`androidx.core:core-ktx:`。使用 Gradle 7.2.1。我确定我不是最新的。针对 API 32 / Kotlin 1.7.10。

标签: android android-jetpack-compose material-components-android android-jetpack-compose-material3


【解决方案1】:

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

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

我确定您是否添加了那个,然后添加了正确的导入:

import androidx.compose.material.ScaffoldState 你应该可以使用它。

不要忘记同步 Gradle。

【讨论】:

  • 这可行,但是在同一模块或项目中使用Material2Material3 是否违反最佳实践?
  • 我看不出这会违反哪种“最佳”做法。您“可以/应该”拥有一个包含这些依赖项的 gradle 模块,并且您的每个功能(无论它们是否是单独的模块)都将提取此 Material 模块提供的依赖项。并非所有 Material3 都已准备好,因此在一段时间内您需要同时拥有两者。
【解决方案2】:

是窗户。转到File > Invalidate Caches > (Check Everything) Invalidate Caches and Restart。不妨尝试Build > Rebuild Project,同时保持与互联网的连接,以确保正确下载所有依赖项。希望您不需要从内部文件夹手动切碎部分下载的库......这就像一头扎进脏衣服。 Kinda 也让我想起了复仇者联盟的场景,他们修复了部分爆炸的涡轮推进器。

【讨论】:

  • Windows 和这个有什么关系?问题中没有提到Windows。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
相关资源
最近更新 更多