五、开始项目实战(搭建完整项目)

五、开始项目实战(搭建完整项目)

经过前面的基础知识回顾,我们现在已经熟悉了Kotlin的基本语法和Compose的基础组件使用,并且也使用了viewmodel状态管理!

接下来我们要引入hilt自动注入框架和room数据库管理框架,正式开启我们的项目!
项目地址:https://gitee.com/Jiahengfei/j-note

1、引入相关包

完整的引入配置在项目中查看

kotlin 复制代码
// Room
implementation(libs.androidx.room.runtime)
implementation(libs.androidx.room.ktx)
kapt(libs.androidx.room.compiler)
kotlin 复制代码
// Hilt for DI
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
implementation(libs.androidx.hilt.navigation.compose)
kotlin 复制代码
//其他
mplementation("com.google.code.gson:gson:2.10.1")
kapt("com.squareup:javapoet:1.13.0")
annotationProcessor("com.squareup:javapoet:1.13.0") // 兼容 Java 模块(可选)

//闪屏
implementation("androidx.core:core-splashscreen:1.0.1")
kotlin 复制代码
# Room
room = "2.6.1"

# Hilt
hilt = "2.52"
hilt-navigation-compose = "1.2.0"

# Room
androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" }
androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" }
androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" }

# Hilt
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" }
androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hilt-navigation-compose" }

hilt = { id = "com.google.dagger.hilt.android", version = "2.52" }
kotlin 复制代码
//注意这里要引入一下kapt,以实现hilt根据注解的自动注入
plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
    alias(libs.plugins.kotlin.compose)
    kotlin("kapt")
    alias(libs.plugins.hilt)
}

这里想到以前用java好像封装过一个类似的注入库,有时间贴出来分享一下

2、项目架构

项目地址:https://gitee.com/Jiahengfei/j-note

kotlin 复制代码
data//存放数据
	local//本地数据
		converter//用来存放Room使用的存储类型转换工具
		dao//数据库操作类
		entity//数据库实体类
	repository//数据操作库,这里封装本地数据获取和网络数据获取,让ViewModel不再关注数据来源//
di//一些注入类
ui//页面
	component//可复用组件
	model//状态实体类
	screen//页面
	theme//主题
viewmodel//viewmodel类
MainActivity.kt
MyApplication.kt

3、Room和Hilt相关注解解释

  • Room相关
    • @TypeConverter:用来声明一个类型转换器,指引Room存储和解析不可以存库的类型
    • @Dao:表示一个数据库操作类
    • @Query:表示一个查询方法,其中可以写sql语句
    • @Insert:表示一个插入方法,可以选择插入模式(例如onConflict = OnConflictStrategy.REPLACE表示主键冲突的时候替换插入)
    • @Update:表示一个更新方法
    • @Delete:表示一个删除方法
    • @Entity:表示一个数据库表,可以再tableName中设置表名
    • @PrimaryKey(autoGenerate = true):表示一个主键,autoGenerate=true表示开启主键自增
    • @Database:表示一个数据库
    • @TypeConverters:声明使用的类型转换器
  • Hilt相关
    • @HiltAndroidApp:表示主应用已被注入
    • @AndroidEntryPoint:表示该视图已经被Hilt管理
    • @HiltViewModel:表示自动注入viewmodel
    • @Inject:声明自动生成对象(注解加在构造方法上)
    • @Module:表示一个管理模型
    • @Singleton:自动管理一个单利对象

4、引入闪屏页

谷歌提供了默认的闪屏页,不用自己写一个activity,也不需要去处理进入应用时的黑屏操作。

kotlin 复制代码
//创建闪屏页面
val splashScreen = installSplashScreen()
super.onCreate(savedInstanceState)

只需要在onCreate方法之前调用installSplashScreen()即可!

如果不主动关闭的话,他会默认在加塞完Composable组件后关闭。

好啦,今天就先写到这里,明天我们开始首页内容的编写。

相关推荐
橙子1991101614 小时前
UI 绘制相关
ui
Math_teacher_fan15 小时前
Flutter 跨平台开发实战:鸿蒙与音乐律动艺术(六)、Lissajous 利萨茹曲线:频率耦合的轨迹艺术
flutter·ui·数学建模·华为·harmonyos·鸿蒙系统
jinanwuhuaguo19 小时前
OpenClaw联邦之心——从孤岛记忆到硅基集体潜意识的拓扑学革命(第二十三篇)
android·人工智能·kotlin·拓扑学·openclaw
jiejiejiejie_20 小时前
Flutter for OpenHarmony 萌系 UI 实战合集:骨架屏 + 引导页一站式指南
flutter·ui·华为
Ulyanov20 小时前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》 开发环境搭建与工具链极简主义 —— 拒绝臃肿,构建工业级基座
开发语言·python·qt·ui·架构·系统仿真
Ulyanov21 小时前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》:QML 声明式语法与霓虹按钮 —— 当 Python 遇见现代美学
开发语言·python·ui·qml·系统仿真·雷达电子对抗仿真
pengyu1 天前
【Kotlin 协程修仙录 · 筑基境 · 后阶】 | 调度器的艺术:Dispatchers 四大护法与 withContext 性能密码
android·kotlin
千码君20161 天前
flutter: 分享一下基于trae cn 构建的过程
java·vscode·flutter·kotlin·trae
薛定猫AI1 天前
【深度解析】Open Code Skills 工作流:用知识图谱、Spec 驱动与 UI 设计系统提升 AI Coding Agent 生产力
人工智能·ui·知识图谱
ZC跨境爬虫1 天前
跟着 MDN 学 HTML day_7:(进阶文本语义标签全覆盖)
前端·javascript·css·ui·html