Skip to content

Commit 28ed102

Browse files
committed
update
1 parent 1337c7c commit 28ed102

File tree

9 files changed

+52
-32
lines changed

9 files changed

+52
-32
lines changed

app/build.gradle.kts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
plugins {
33
alias(libs.plugins.androidApp)
44

5+
alias(libs.plugins.google.ksp)
6+
57
alias(libs.plugins.kotlin.android)
68
alias(libs.plugins.kotlin.serialization)
79
alias(libs.plugins.kotlin.parcelize)
@@ -55,8 +57,6 @@ android {
5557
}
5658

5759
dependencies {
58-
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
59-
6060
implementation(libs.core.ktx)
6161
implementation(libs.lifecycle.runtime.ktx)
6262
implementation(libs.activity.compose)
@@ -71,6 +71,9 @@ dependencies {
7171

7272
implementation(libs.androidx.navigation.compose)
7373

74+
implementation(libs.androidx.room.runtime)
75+
ksp(libs.androidx.room.compiler)
76+
7477
implementation(libs.ktor.client.core)
7578
implementation(libs.ktor.client.okhttp)
7679
implementation(libs.ktor.client.content.negotiation)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.wzq.jd.compose.app.page
2+
3+
import androidx.compose.foundation.layout.Box
4+
import androidx.compose.foundation.layout.fillMaxSize
5+
import androidx.compose.material3.CircularProgressIndicator
6+
import androidx.compose.runtime.Composable
7+
import androidx.compose.ui.Alignment
8+
import androidx.compose.ui.Modifier
9+
10+
@Composable
11+
fun LoadScreen() {
12+
Box(modifier = Modifier.fillMaxSize()) {
13+
CircularProgressIndicator(modifier = Modifier.align(Alignment.Center))
14+
}
15+
}

app/src/main/java/com/wzq/jd/compose/app/page/home/HomeIndexPage.kt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
11
package com.wzq.jd.compose.app.page.home
22

3-
import androidx.compose.foundation.layout.Box
43
import androidx.compose.foundation.layout.Row
5-
import androidx.compose.foundation.layout.fillMaxSize
64
import androidx.compose.foundation.layout.fillMaxWidth
75
import androidx.compose.foundation.layout.padding
86
import androidx.compose.foundation.lazy.LazyColumn
97
import androidx.compose.foundation.lazy.items
108
import androidx.compose.material3.Card
11-
import androidx.compose.material3.CircularProgressIndicator
129
import androidx.compose.material3.ExperimentalMaterial3Api
1310
import androidx.compose.material3.MaterialTheme
1411
import androidx.compose.material3.Text
1512
import androidx.compose.runtime.Composable
16-
import androidx.compose.ui.Alignment
1713
import androidx.compose.ui.Modifier
1814
import androidx.compose.ui.graphics.toArgb
1915
import androidx.compose.ui.unit.dp
2016
import com.wzq.jd.compose.app.data.model.ArticleItem
17+
import com.wzq.jd.compose.app.page.LoadScreen
2118
import com.wzq.jd.compose.app.page.PageState
2219
import com.wzq.jd.compose.app.ui.widget.HtmlText
2320
import io.ktor.http.encodeURLPath
@@ -30,9 +27,7 @@ import io.ktor.http.encodeURLPath
3027
fun HomeIndexPage(state: PageState<List<ArticleItem>>, onItemClick: (String) -> Unit) {
3128
when(state) {
3229
PageState.Loading -> {
33-
Box(modifier = Modifier.fillMaxSize()) {
34-
CircularProgressIndicator(modifier = Modifier.align(Alignment.Center))
35-
}
30+
LoadScreen()
3631
}
3732
is PageState.Success -> {
3833
LazyColumn(content = {

app/src/main/java/com/wzq/jd/compose/app/page/home/HomeProjectPage.kt

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,29 @@ import androidx.compose.ui.layout.ContentScale
2222
import androidx.compose.ui.unit.dp
2323
import coil.compose.AsyncImage
2424
import com.wzq.jd.compose.app.data.model.ArticleItem
25+
import com.wzq.jd.compose.app.page.LoadScreen
26+
import com.wzq.jd.compose.app.page.PageState
2527
import io.ktor.http.encodeURLPath
2628

2729
/**
2830
* create by wzq on 2023/12/1
2931
*
3032
*/
3133
@Composable
32-
fun HomeProjectPage(projectList: List<ArticleItem>, navigateToWeb: (String) -> Unit) {
33-
LazyVerticalStaggeredGrid(columns = StaggeredGridCells.Fixed(2),
34-
contentPadding = PaddingValues(8.dp),
35-
verticalItemSpacing = 8.dp,
36-
horizontalArrangement = Arrangement.spacedBy(8.dp),
37-
content = {
38-
items(projectList) {
39-
ProjectItem(item = it) { navigateToWeb(it.link.encodeURLPath()) }
40-
}
41-
})
42-
34+
fun HomeProjectPage(state: PageState<List<ArticleItem>>, navigateToWeb: (String) -> Unit) {
35+
if (state is PageState.Success) {
36+
LazyVerticalStaggeredGrid(columns = StaggeredGridCells.Fixed(2),
37+
contentPadding = PaddingValues(8.dp),
38+
verticalItemSpacing = 8.dp,
39+
horizontalArrangement = Arrangement.spacedBy(8.dp),
40+
content = {
41+
items(state.data) {
42+
ProjectItem(item = it) { navigateToWeb(it.link.encodeURLPath()) }
43+
}
44+
})
45+
} else {
46+
LoadScreen()
47+
}
4348
}
4449

4550
@OptIn(ExperimentalMaterial3Api::class)

app/src/main/java/com/wzq/jd/compose/app/page/home/HomeScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ fun HomeScreen(viewModel: HomeViewModel, navActions: NavActions) {
6060
onItemClick = { navActions.toWebScreen(it) })
6161

6262
1 -> HomeProjectPage(
63-
projectList = viewModel.projectList,
63+
state = viewModel.projectState.value,
6464
navigateToWeb = { navActions.toWebScreen(it) })
6565

6666
2 -> HomeCategoryPage(

app/src/main/java/com/wzq/jd/compose/app/page/home/HomeViewModel.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import kotlinx.coroutines.launch
1717
class HomeViewModel : ViewModel() {
1818

1919
val indexState = mutableStateOf<PageState<List<ArticleItem>>>(PageState.Loading)
20+
21+
val projectState = mutableStateOf<PageState<List<ArticleItem>>>(PageState.Loading)
2022
val projectList = mutableStateListOf<ArticleItem>()
2123
val categories = mutableStateListOf<Categories>()
2224

@@ -37,9 +39,8 @@ class HomeViewModel : ViewModel() {
3739
private fun getProjectList() {
3840
viewModelScope.launch {
3941
DataRepos.remoteRepo.getProjectList().onSuccess {
40-
projectList.clear()
41-
projectList.addAll(it.data.listData)
42-
}
42+
projectState.value = PageState.Success(it.data.listData)
43+
}.onFailure { PageState.Failure(it) }
4344
}
4445
}
4546

app/src/main/java/com/wzq/jd/compose/app/page/search/SearchScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ fun SearchScreen(
7272
}
7373

7474
is PageState.Success -> {
75-
val list: List<ArticleItem> = state.get() ?: emptyList()
75+
val list: List<ArticleItem> = state.data
7676
LazyColumn(content = {
7777
items(list, key = { it.id }) {
7878
ArticleItemPage(itemData = it) {}

app/src/main/java/com/wzq/jd/compose/app/page/search/SearchViewModel.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.compose.runtime.mutableStateOf
66
import androidx.lifecycle.ViewModel
77
import androidx.lifecycle.viewModelScope
88
import com.wzq.jd.compose.app.data.DataRepos
9+
import com.wzq.jd.compose.app.data.model.ArticleItem
910
import com.wzq.jd.compose.app.data.model.HotWords
1011
import com.wzq.jd.compose.app.page.PageState
1112
import kotlinx.coroutines.Dispatchers
@@ -24,7 +25,7 @@ class SearchViewModel : ViewModel() {
2425

2526
val hotWords = mutableStateListOf<HotWords>()
2627

27-
val pageState = mutableStateOf<PageState>(PageState.None)
28+
val pageState = mutableStateOf<PageState<List<ArticleItem>>>(PageState.None)
2829

2930
init {
3031
getHotWords()

gradle/libs.versions.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,25 @@ kotlin = "1.9.20"
55
ksp = "1.9.10-1.0.13"
66

77
core-ktx = "1.12.0"
8-
appcompat = "1.6.1"
98
lifecycle-runtime-ktx = "2.6.2"
109

11-
activity-compose = "1.8.1"
10+
activity-compose = "1.8.2"
1211
compose-bom = "2023.10.01"
12+
navigation-compose = "2.7.6"
1313

1414
ktor = "2.3.6"
15-
1615
coil = "2.5.0"
16+
room = "2.6.1"
17+
logging-interceptor = "4.12.0"
1718

1819
junit = "4.13.2"
1920
androidx-test-ext-junit = "1.1.5"
2021
espresso-core = "3.5.1"
21-
logging-interceptor = "4.12.0"
22-
navigation-compose = "2.7.5"
2322

2423
[libraries]
2524
androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigation-compose" }
26-
appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" }
25+
androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }
26+
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
2727
core-ktx = { module = "androidx.core:core-ktx", version.ref = "core-ktx" }
2828

2929
coil = { module = "io.coil-kt:coil-compose", version.ref = "coil" }

0 commit comments

Comments
 (0)