JetPack Compose 实战 Jetchat(2)

继续看配置app/build.gradle

 buildFeatures {
        compose true
        viewBinding true

        // Disable unused AGP features
        buildConfig false
        aidl false
        renderScript false
        resValues false
        shaders false
    }

指的注意的是这里开启和关闭功能的做法

承接上篇
import com.example.compose.jetchat.buildsrc.Libs
和我们平时写的gradle差不多,只不过Libs脚本化了变量而已。
开始看代码
Jetchat 地址:

入口类NavActivity

  • 委托,声明MainViewModel
    private val viewModel: MainViewModel by viewModels()

看代码就是打开关闭抽屉的动作

  • onCreate

关闭装饰装修系统窗口,它允许我们处理插图

        WindowCompat.setDecorFitsSystemWindows(window, false)

setContent
设置主界面,布局,类似我们 setContentView

ProvideWindowInsets(consumeWindowInsets = false)
为我们的内容提供 WindowInsets。 我们不想消耗它们,所以它们一直向下传递视图层次结构(因为我们使用片段)。

Providers(LocalBackPressedDispatcher provides this.onBackPressedDispatcher)

提供者将值绑定到 ProvidableCompositionLocal 键。 使用 CompositionLocal.current 读取 CompositionLocal 将返回 Providers 的 values 参数中为内容 lambda 中直接或间接调用的所有可组合函数提供的值。

主界面使用了Navigation,做导航用。

用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
定义了抽屉内容和点击事件

你可能感兴趣的:(JetPack Compose 实战 Jetchat(2))