繼續(xù)看配置app/build.gradle
buildFeatures {
compose true
viewBinding true
// Disable unused AGP features
buildConfig false
aidl false
renderScript false
resValues false
shaders false
}
指的注意的是這里開啟和關(guān)閉功能的做法
承接上篇
import com.example.compose.jetchat.buildsrc.Libs
和我們平時(shí)寫的gradle差不多,只不過Libs腳本化了變量而已。
開始看代碼
Jetchat 地址:
入口類NavActivity
- 委托,聲明MainViewModel
private val viewModel: MainViewModel by viewModels()
看代碼就是打開關(guān)閉抽屜的動(dòng)作
- onCreate
關(guān)閉裝飾裝修系統(tǒng)窗口,它允許我們處理插圖
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent
設(shè)置主界面,布局,類似我們 setContentView
ProvideWindowInsets(consumeWindowInsets = false)
為我們的內(nèi)容提供 WindowInsets。 我們不想消耗它們,所以它們一直向下傳遞視圖層次結(jié)構(gòu)(因?yàn)槲覀兪褂闷危?/p>
Providers(LocalBackPressedDispatcher provides this.onBackPressedDispatcher)
提供者將值綁定到 ProvidableCompositionLocal 鍵。 使用 CompositionLocal.current 讀取 CompositionLocal 將返回 Providers 的 values 參數(shù)中為內(nèi)容 lambda 中直接或間接調(diào)用的所有可組合函數(shù)提供的值。
主界面使用了Navigation,做導(dǎo)航用。
用ViewBinding做了視圖的綁定
@Composable
fun JetchatScaffold(
scaffoldState: ScaffoldState = rememberScaffoldState(),
onProfileClicked: (String) -> Unit,
onChatClicked: (String) -> Unit,
content: @Composable (PaddingValues) -> Unit
) {
JetchatTheme {
Scaffold(
scaffoldState = scaffoldState,
drawerContent = {
JetchatDrawer(
onProfileClicked = onProfileClicked,
onChatClicked = onChatClicked
)
},
bodyContent = content
)
}
}
自定義了組件JetchatDrawer,組合使用,并定義了主題JetchatTheme
val myColors = colors ?: if (isDarkTheme) JetchatDarkPalette else JetchatLightPalette
定義了兩套主題色
JetchatDrawer
定義了抽屜內(nèi)容和點(diǎn)擊事件