主要内容:
这是去年被搁置的一个项目,我现在想了想,决定把现在它拿出来重新做,作为我简历上的一个已上线的,有实际作用的大型项目。希望我能独自顺利地完成它。
该项目预期客户端主要技术栈是 Jetpack Compose,后端主要技术栈是 Go Http 三件套。如果有余裕的话倒是想折腾一下 Kotlin.js 看看能不能上前端。
一开始我对这个项目的预期是一个更高级的文件管理,为文件附加信息,使其更好地进行管理,版本迭代和云端同步。现在我想要对这个应用有更高的期望:我想要它变成一个工作流管理的应用。我设想中的工作流是这样构成的:
从这三方面进行引申,就有了该项目的大致的期望功能:
示例代码如下:
kotlin// 先是 Repository 层 依赖更下层的 DAO 和 OkHttp 此处仅为示例
class TestRepository @Inject constructor (private val dao: FileEntityDAO) {
suspend fun UpdateValueTest(value: Int) {
withContext(Dispatchers.IO) {
dao.getAllFile()
}
}
}
// 再是 ViewModel 层 向上提供状态和接口
@HiltViewModel
class TestViewModel @Inject constructor(private val repository: TestRepository) : ViewModel() {
private val _data = MutableStateFlow<Int>(1)
val data : StateFlow<Int> get() = _data
fun updateTestData (value: Int) {
_data.value = value
viewModelScope.launch {
repository.UpdateValueTest(value)
}
}
}
// 最后是视图层 这层把 ViewModel 放在 Activity 还是 单独的 Compose 组件里都行 我认为是放在单独成页面的 Compose 组件中比较好
@Composable
fun Greeting2(name: String, modifier: Modifier = Modifier) {
val viewModel : TestViewModel = hiltViewModel()
val data by viewModel.data.collectAsState()
var editedData by remember { mutableIntStateOf(data) }
TextField(
value = editedData.toString(),
onValueChange = { newValue ->
editedData = newValue.toInt()
},
modifier = modifier
)
Button(
onClick = {
viewModel.updateTestData(editedData)
}
) {
Text(
text = "Update"
)
}
}
在项目级别的build.gradle.kts
中导入:
kotlinplugins {
...
id("com.google.dagger.hilt.android")version "2.52" apply false
}
在 App 级别的build.gradle.kts
中导入:
kotlindependencies {
...
val hiltVersion = "2.52"
implementation("com.google.dagger:hilt-android:$hiltVersion")
kapt("com.google.dagger:hilt-compiler:$hiltVersion")
implementation("androidx.hilt:hilt-navigation-compose:1.2.0")
}
App 级别的build.gradle.kts
中导入:
kotlindependencies {
...
implementation("com.squareup.okhttp3:okhttp:4.12.0")
}
警告
Gradle 进行编译不成功的时候,一定要检查以下工具的版本是否对应,这里给出一个版本记录。
org.gradle.java.home
强制指定)kotlinCompilerExtensionVersion
)版本:1.5.5(在 app 级别的 build.gradle.kts 文件内指定)如果有编译问题,大概率就是这几个东西版本冲突。
本文作者:御坂19327号
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!