Skip to content

Commit 2007745

Browse files
committed
update
1 parent 8f899e9 commit 2007745

File tree

5 files changed

+59
-19
lines changed

5 files changed

+59
-19
lines changed

app/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ dependencies {
8080
implementation(libs.androidx.room.runtime)
8181
ksp(libs.androidx.room.compiler)
8282

83+
implementation("androidx.paging:paging-compose:3.3.0-alpha02")
84+
8385
implementation(libs.ktor.client.core)
8486
implementation(libs.ktor.client.okhttp)
8587
implementation(libs.ktor.client.content.negotiation)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.wzq.jd.compose.app.data
2+
3+
import androidx.paging.PagingSource
4+
import androidx.paging.PagingState
5+
import com.wzq.jd.compose.app.data.model.ArticleItem
6+
7+
/**
8+
* create by wzq on 2023/12/26
9+
*
10+
*/
11+
class ArticlePageSource : PagingSource<Int, ArticleItem>() {
12+
override fun getRefreshKey(state: PagingState<Int, ArticleItem>): Int? {
13+
return state.anchorPosition?.let { anchorPosition ->
14+
val anchorPage = state.closestPageToPosition(anchorPosition)
15+
anchorPage?.prevKey?.plus(1) ?: anchorPage?.nextKey?.minus(1)
16+
}
17+
}
18+
19+
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, ArticleItem> {
20+
val position = params.key ?: 0
21+
val resp = DataRepos.remoteRepo.getArticleList(position)
22+
return resp.fold({ data ->
23+
LoadResult.Page(
24+
data = data.data.listData, prevKey = null, nextKey = position + 1
25+
)
26+
}, {
27+
LoadResult.Error(throwable = it)
28+
})
29+
}
30+
}

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

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.Row
44
import androidx.compose.foundation.layout.fillMaxWidth
55
import androidx.compose.foundation.layout.padding
66
import androidx.compose.foundation.lazy.LazyColumn
7-
import androidx.compose.foundation.lazy.items
87
import androidx.compose.material3.Card
98
import androidx.compose.material3.ExperimentalMaterial3Api
109
import androidx.compose.material3.MaterialTheme
@@ -13,30 +12,30 @@ import androidx.compose.runtime.Composable
1312
import androidx.compose.ui.Modifier
1413
import androidx.compose.ui.graphics.toArgb
1514
import androidx.compose.ui.unit.dp
15+
import androidx.paging.PagingData
16+
import androidx.paging.compose.collectAsLazyPagingItems
17+
import androidx.paging.compose.itemKey
1618
import com.wzq.jd.compose.app.data.model.ArticleItem
17-
import com.wzq.jd.compose.app.page.LoadScreen
1819
import com.wzq.jd.compose.app.page.PageState
1920
import com.wzq.jd.compose.app.ui.widget.HtmlText
2021
import io.ktor.http.encodeURLPath
22+
import kotlinx.coroutines.flow.Flow
2123

2224
/**
2325
* create by wzq on 2023/11/27
2426
*
2527
*/
2628
@Composable
27-
fun HomeIndexPage(state: PageState<List<ArticleItem>>, onItemClick: (String) -> Unit) {
28-
when(state) {
29-
PageState.Loading -> {
30-
LoadScreen()
29+
fun HomeIndexPage(
30+
state: PageState<List<ArticleItem>>,
31+
onItemClick: (String) -> Unit,
32+
pageData: Flow<PagingData<ArticleItem>>
33+
) {
34+
val lazyPagingItems = pageData.collectAsLazyPagingItems()
35+
LazyColumn {
36+
items(lazyPagingItems.itemCount, lazyPagingItems.itemKey()) {
37+
ArticleItemPage(itemData = lazyPagingItems[it]!!, onItemClick)
3138
}
32-
is PageState.Success -> {
33-
LazyColumn(content = {
34-
items(state.data) {
35-
ArticleItemPage(itemData = it, onItemClick)
36-
}
37-
})
38-
}
39-
else -> {}
4039
}
4140

4241
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ fun HomeScreen(viewModel: HomeViewModel, navActions: NavActions) {
5757
when (currentPagerNum) {
5858
0 -> HomeIndexPage(
5959
state = viewModel.indexState.value,
60+
pageData = viewModel.pager,
6061
onItemClick = { navActions.toWebScreen(it) })
6162

6263
1 -> HomeProjectPage(

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ import androidx.compose.runtime.mutableStateListOf
44
import androidx.compose.runtime.mutableStateOf
55
import androidx.lifecycle.ViewModel
66
import androidx.lifecycle.viewModelScope
7+
import androidx.paging.Pager
8+
import androidx.paging.PagingConfig
9+
import androidx.paging.cachedIn
10+
import com.wzq.jd.compose.app.data.ArticlePageSource
711
import com.wzq.jd.compose.app.data.DataRepos
812
import com.wzq.jd.compose.app.data.local.AppDatabase
913
import com.wzq.jd.compose.app.data.model.ArticleItem
@@ -31,12 +35,16 @@ class HomeViewModel : ViewModel() {
3135
getCategories()
3236
}
3337

38+
val pager = Pager(PagingConfig(20), 0) {
39+
ArticlePageSource()
40+
}.flow.cachedIn(viewModelScope)
41+
3442
private fun getArticleList(pageNum: Int = 0) {
35-
viewModelScope.launch {
36-
DataRepos.remoteRepo.getArticleList(pageNum)
37-
.onSuccess { indexState.value = PageState.Success(it.data.listData) }
38-
.onFailure { indexState.value = PageState.Failure(it) }
39-
}
43+
// viewModelScope.launch {
44+
// DataRepos.remoteRepo.getArticleList(pageNum)
45+
// .onSuccess { indexState.value = PageState.Success(it.data.listData) }
46+
// .onFailure { indexState.value = PageState.Failure(it) }
47+
// }
4048
}
4149

4250
private fun getProjectList() {

0 commit comments

Comments
 (0)