You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio Kotlin中Jetpack Compose的ScaffoldState无法使用问题

解决Material3中ScaffoldState无法使用的问题

Material3的Scaffold组件并没有废弃ScaffoldState的概念,而是对状态管理进行了拆分——Material2中整合在ScaffoldState里的抽屉、Snackbar等状态,在Material3中被拆分为独立的状态对象,不再通过统一的scaffoldState参数传递。

具体修改方案:

  1. 替换状态对象

    • 原来的rememberScaffoldState()需要拆分为独立的状态:
      • 抽屉状态:rememberDrawerState()
      • Snackbar状态:rememberSnackbarHostState()
    • 根据实际需求,按需创建对应的状态并传递给Scaffold的对应参数。
  2. 修改后的完整代码

package com.example.trainingtimer

import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Scaffold
import androidx.compose.material3.rememberDrawerState
import androidx.compose.material3.rememberSnackbarHostState
import androidx.compose.ui.Modifier

class MainActivity : ComponentActivity() {

    @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
    @OptIn(ExperimentalMaterial3Api::class)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            // 按需创建需要的状态,示例创建Snackbar和抽屉状态
            val snackbarHostState = rememberSnackbarHostState()
            val drawerState = rememberDrawerState()
            
            Scaffold(
                modifier = Modifier.fillMaxSize(),
                snackbarHost = { androidx.compose.material3.SnackbarHost(hostState = snackbarHostState) },
                // 如果需要抽屉,再配置以下参数
                // drawerState = drawerState,
                // drawerContent = { /* 抽屉内容 */ }
            ) {

            }
        }
    }
}
  1. 依赖版本说明
    你当前使用的androidx.compose.material3:material3:1.1.0版本完全正常,不需要降级。Material3从1.0.0开始就采用了这种拆分后的状态管理方式,所以降级到1.0.0也不会恢复原来的ScaffoldState。

补充说明:

如果仅需要Snackbar功能,只创建SnackbarHostState并配置snackbarHost参数即可;如果需要抽屉功能,再添加drawerState和drawerContent的配置。这种拆分设计让状态管理更精细化,避免创建不需要的状态对象。

内容的提问来源于stack exchange,提问作者Thibaut_Esteve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:28:15