Skip to content

Commit c07822e

Browse files
committed
update
1 parent 2007745 commit c07822e

File tree

6 files changed

+76
-51
lines changed

6 files changed

+76
-51
lines changed

app/src/main/java/com/wzq/jd/compose/app/data/ArtclePageSource.kt renamed to app/src/main/java/com/wzq/jd/compose/app/data/ArticlePageSource.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ import com.wzq.jd.compose.app.data.model.ArticleItem
99
*
1010
*/
1111
class ArticlePageSource : PagingSource<Int, ArticleItem>() {
12+
/**
13+
* only refresh current page
14+
* or return a fixed num refresh all
15+
*/
1216
override fun getRefreshKey(state: PagingState<Int, ArticleItem>): Int? {
1317
return state.anchorPosition?.let { anchorPosition ->
1418
val anchorPage = state.closestPageToPosition(anchorPosition)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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 ProjectPageSource : PagingSource<Int, ArticleItem>() {
12+
/**
13+
* only refresh current page
14+
* or return a fixed num refresh all
15+
*/
16+
override fun getRefreshKey(state: PagingState<Int, ArticleItem>): Int? {
17+
return state.anchorPosition?.let { anchorPosition ->
18+
val anchorPage = state.closestPageToPosition(anchorPosition)
19+
anchorPage?.prevKey?.plus(1) ?: anchorPage?.nextKey?.minus(1)
20+
}
21+
}
22+
23+
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, ArticleItem> {
24+
val position = params.key ?: 0
25+
val resp = DataRepos.remoteRepo.getProjectList(position)
26+
return resp.fold({ data ->
27+
LoadResult.Page(
28+
data = data.data.listData, prevKey = null, nextKey = position + 1
29+
)
30+
}, {
31+
LoadResult.Error(throwable = it)
32+
})
33+
}
34+
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import androidx.paging.PagingData
1616
import androidx.paging.compose.collectAsLazyPagingItems
1717
import androidx.paging.compose.itemKey
1818
import com.wzq.jd.compose.app.data.model.ArticleItem
19-
import com.wzq.jd.compose.app.page.PageState
2019
import com.wzq.jd.compose.app.ui.widget.HtmlText
2120
import io.ktor.http.encodeURLPath
2221
import kotlinx.coroutines.flow.Flow
@@ -27,14 +26,16 @@ import kotlinx.coroutines.flow.Flow
2726
*/
2827
@Composable
2928
fun HomeIndexPage(
30-
state: PageState<List<ArticleItem>>,
3129
onItemClick: (String) -> Unit,
3230
pageData: Flow<PagingData<ArticleItem>>
3331
) {
3432
val lazyPagingItems = pageData.collectAsLazyPagingItems()
3533
LazyColumn {
3634
items(lazyPagingItems.itemCount, lazyPagingItems.itemKey()) {
37-
ArticleItemPage(itemData = lazyPagingItems[it]!!, onItemClick)
35+
val item = lazyPagingItems[it]
36+
if (item != null) {
37+
ArticleItemPage(itemData = item, onItemClick)
38+
}
3839
}
3940
}
4041

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

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
99
import androidx.compose.foundation.layout.padding
1010
import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid
1111
import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells
12-
import androidx.compose.foundation.lazy.staggeredgrid.items
1312
import androidx.compose.material3.Card
1413
import androidx.compose.material3.ExperimentalMaterial3Api
1514
import androidx.compose.material3.MaterialTheme
@@ -20,31 +19,36 @@ import androidx.compose.ui.Modifier
2019
import androidx.compose.ui.graphics.Color
2120
import androidx.compose.ui.layout.ContentScale
2221
import androidx.compose.ui.unit.dp
22+
import androidx.paging.PagingData
23+
import androidx.paging.compose.collectAsLazyPagingItems
24+
import androidx.paging.compose.itemKey
2325
import coil.compose.AsyncImage
2426
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
2727
import io.ktor.http.encodeURLPath
28+
import kotlinx.coroutines.flow.Flow
2829

2930
/**
3031
* create by wzq on 2023/12/1
3132
*
3233
*/
3334
@Composable
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()) }
35+
fun HomeProjectPage(
36+
pageData: Flow<PagingData<ArticleItem>>,
37+
navigateToWeb: (String) -> Unit,
38+
) {
39+
val data = pageData.collectAsLazyPagingItems()
40+
LazyVerticalStaggeredGrid(columns = StaggeredGridCells.Fixed(2),
41+
contentPadding = PaddingValues(8.dp),
42+
verticalItemSpacing = 8.dp,
43+
horizontalArrangement = Arrangement.spacedBy(8.dp),
44+
content = {
45+
items(data.itemCount, data.itemKey()) { position ->
46+
val item = data[position]
47+
if (item != null) {
48+
ProjectItem(item = item) { navigateToWeb(item.link.encodeURLPath()) }
4349
}
44-
})
45-
} else {
46-
LoadScreen()
47-
}
50+
}
51+
})
4852
}
4953

5054
@OptIn(ExperimentalMaterial3Api::class)
@@ -56,7 +60,9 @@ fun ProjectItem(item: ArticleItem, onItemClick: () -> Unit) {
5660
model = item.envelopePic,
5761
contentDescription = null,
5862
modifier = Modifier.fillMaxWidth(),
59-
contentScale = ContentScale.FillWidth
63+
contentScale = ContentScale.FillWidth,
64+
onLoading = {
65+
}
6066
)
6167
Box(
6268
modifier = Modifier

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ fun HomeScreen(viewModel: HomeViewModel, navActions: NavActions) {
5656
) { currentPagerNum ->
5757
when (currentPagerNum) {
5858
0 -> HomeIndexPage(
59-
state = viewModel.indexState.value,
60-
pageData = viewModel.pager,
61-
onItemClick = { navActions.toWebScreen(it) })
59+
pageData = viewModel.articleList,
60+
onItemClick = { navActions.toWebScreen(it) },
61+
)
6262

6363
1 -> HomeProjectPage(
64-
state = viewModel.projectState.value,
64+
pageData = viewModel.projectList,
6565
navigateToWeb = { navActions.toWebScreen(it) })
6666

6767
2 -> HomeCategoryPage(

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

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

33
import androidx.compose.runtime.mutableStateListOf
4-
import androidx.compose.runtime.mutableStateOf
54
import androidx.lifecycle.ViewModel
65
import androidx.lifecycle.viewModelScope
76
import androidx.paging.Pager
87
import androidx.paging.PagingConfig
98
import androidx.paging.cachedIn
109
import com.wzq.jd.compose.app.data.ArticlePageSource
1110
import com.wzq.jd.compose.app.data.DataRepos
11+
import com.wzq.jd.compose.app.data.ProjectPageSource
1212
import com.wzq.jd.compose.app.data.local.AppDatabase
13-
import com.wzq.jd.compose.app.data.model.ArticleItem
1413
import com.wzq.jd.compose.app.data.model.Categories
15-
import com.wzq.jd.compose.app.page.PageState
1614
import kotlinx.coroutines.launch
1715

1816
/**
@@ -21,38 +19,20 @@ import kotlinx.coroutines.launch
2119
*/
2220
class HomeViewModel : ViewModel() {
2321

24-
val indexState = mutableStateOf<PageState<List<ArticleItem>>>(PageState.Loading)
25-
26-
val projectState = mutableStateOf<PageState<List<ArticleItem>>>(PageState.Loading)
27-
2822
val categories = mutableStateListOf<Categories>()
2923

3024
private val categoriesDao = AppDatabase.instance.categoriesDao()
3125

32-
init {
33-
getArticleList()
34-
getProjectList()
35-
getCategories()
36-
}
37-
38-
val pager = Pager(PagingConfig(20), 0) {
26+
val articleList = Pager(PagingConfig(20), 0) {
3927
ArticlePageSource()
4028
}.flow.cachedIn(viewModelScope)
4129

42-
private fun getArticleList(pageNum: Int = 0) {
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-
// }
48-
}
30+
val projectList = Pager(PagingConfig(20), 0) {
31+
ProjectPageSource()
32+
}.flow.cachedIn(viewModelScope)
4933

50-
private fun getProjectList() {
51-
viewModelScope.launch {
52-
DataRepos.remoteRepo.getProjectList().onSuccess {
53-
projectState.value = PageState.Success(it.data.listData)
54-
}.onFailure { PageState.Failure(it) }
55-
}
34+
init {
35+
getCategories()
5636
}
5737

5838
private fun getCategories() {

0 commit comments

Comments
 (0)