Skip to content

Commit 4610e44

Browse files
committed
update
1 parent d704ba6 commit 4610e44

File tree

3 files changed

+45
-25
lines changed

3 files changed

+45
-25
lines changed

app/src/main/java/com/wzq/jd/compose/app/page/categories/CategoriesViewModel.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,7 @@ class CategoriesViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
1919

2020
val pagerData = mutableStateMapOf<Int, List<ArticleItem>>()
2121

22-
init {
23-
getItemList(initPosition)
24-
}
25-
26-
fun getItemList(index: Int) {
22+
fun getItemList(index: Int, batch: Int = 0) {
2723
viewModelScope.launch {
2824
if (pagerData.containsKey(index)) {
2925
return@launch

app/src/main/java/com/wzq/jd/compose/app/page/categories/CategoryScreen.kt

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,14 @@ import androidx.compose.material3.Tab
2424
import androidx.compose.material3.Text
2525
import androidx.compose.material3.TopAppBarDefaults
2626
import androidx.compose.runtime.Composable
27+
import androidx.compose.runtime.LaunchedEffect
2728
import androidx.compose.runtime.derivedStateOf
2829
import androidx.compose.runtime.remember
2930
import androidx.compose.runtime.rememberCoroutineScope
31+
import androidx.compose.runtime.snapshotFlow
3032
import androidx.compose.ui.Alignment
3133
import androidx.compose.ui.Modifier
34+
import androidx.compose.ui.graphics.Color
3235
import androidx.compose.ui.unit.dp
3336
import com.wzq.jd.compose.app.page.ErrorScreen
3437
import com.wzq.jd.compose.app.page.NavActions
@@ -57,6 +60,12 @@ fun CategoryScreen(
5760
}
5861
val scope = rememberCoroutineScope()
5962

63+
LaunchedEffect(key1 = pagerState, block = {
64+
snapshotFlow { pagerState.currentPage }.collect {
65+
viewModel.getItemList(pagerState.currentPage, 3)
66+
}
67+
})
68+
;
6069
Column(
6170
modifier = Modifier
6271
.fillMaxSize()
@@ -73,13 +82,13 @@ fun CategoryScreen(
7382
},
7483
colors = TopAppBarDefaults.centerAlignedTopAppBarColors(containerColor = MaterialTheme.colorScheme.primaryContainer)
7584
)
76-
ScrollableTabRow(selectedTabIndex = currentSelectedIndex.value,
85+
ScrollableTabRow(
86+
selectedTabIndex = currentSelectedIndex.value,
7787
edgePadding = 0.dp,
78-
divider = {}) {
88+
) {
7989
dataList.forEachIndexed { index, knowledgeCategories ->
8090
Tab(selected = currentSelectedIndex.value == index, onClick = {
8191
scope.launch {
82-
viewModel.getItemList(index)
8392
pagerState.scrollToPage(index)
8493
}
8594
}) {
@@ -88,7 +97,7 @@ fun CategoryScreen(
8897
}
8998

9099
}
91-
Divider(thickness = 8.dp)
100+
Divider(thickness = 8.dp, color = Color.Transparent)
92101
HorizontalPager(
93102
state = pagerState, beyondBoundsPageCount = 3
94103
) { page ->

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

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

3-
import androidx.compose.foundation.layout.Box
3+
import androidx.compose.foundation.ExperimentalFoundationApi
4+
import androidx.compose.foundation.layout.fillMaxSize
45
import androidx.compose.foundation.layout.padding
6+
import androidx.compose.foundation.pager.HorizontalPager
7+
import androidx.compose.foundation.pager.rememberPagerState
58
import androidx.compose.material.icons.Icons
69
import androidx.compose.material.icons.filled.AccountCircle
710
import androidx.compose.material.icons.filled.Home
@@ -17,43 +20,55 @@ import androidx.compose.material3.Scaffold
1720
import androidx.compose.material3.Text
1821
import androidx.compose.material3.TopAppBarDefaults
1922
import androidx.compose.runtime.Composable
20-
import androidx.compose.runtime.mutableIntStateOf
21-
import androidx.compose.runtime.remember
23+
import androidx.compose.runtime.rememberCoroutineScope
2224
import androidx.compose.ui.Modifier
2325
import com.wzq.jd.compose.app.page.NavActions
26+
import kotlinx.coroutines.launch
2427

2528
/**
2629
* create by wzq on 2023/11/24
2730
*
2831
*/
32+
@OptIn(ExperimentalFoundationApi::class)
2933
@Composable
3034
fun HomeScreen(viewModel: HomeViewModel, navActions: NavActions) {
31-
val pagerState = remember { mutableIntStateOf(0) }
35+
val pagerState = rememberPagerState(0) { 3 }
36+
val localScope = rememberCoroutineScope()
3237

3338
Scaffold(topBar = {
3439
HomeTopBar {
3540
navActions.toSearch()
3641
}
3742
}, bottomBar = {
3843
HomeBottomBar { index ->
39-
pagerState.intValue = index
44+
localScope.launch {
45+
pagerState.scrollToPage(index)
46+
}
4047
}
4148
}) { paddingValues ->
42-
Box(modifier = Modifier.padding(paddingValues)) {
43-
when (pagerState.intValue) {
44-
0 -> HomeIndexPage(viewModel.homeList) {
45-
navActions.toWebScreen(it)
46-
}
49+
HorizontalPager(
50+
state = pagerState, modifier = Modifier
51+
.padding(paddingValues)
52+
.fillMaxSize(),
53+
beyondBoundsPageCount = pagerState.pageCount
54+
) { currentPagerNum ->
55+
when (currentPagerNum) {
56+
0 -> HomeIndexPage(
57+
articleList = viewModel.homeList,
58+
onItemClick = { navActions.toWebScreen(it) })
59+
60+
1 -> HomeProjectPage(
61+
projectList = viewModel.projectList,
62+
navigateToWeb = { navActions.toWebScreen(it) })
4763

48-
1 -> HomeProjectPage(projectList = viewModel.projectList) {
49-
navActions.toWebScreen(it)
50-
}
64+
2 -> HomeCategoryPage(
65+
categories = viewModel.categories,
66+
onItemClick = { categories, i -> navActions.toCategory(i, categories) })
5167

52-
2 -> HomeCategoryPage(categories = viewModel.categories) { item, childIndex ->
53-
navActions.toCategory(childIndex, item)
54-
}
68+
else -> throw Exception("todo")
5569
}
5670
}
71+
5772
}
5873
}
5974

0 commit comments

Comments
 (0)