Skip to content

Commit 9143980

Browse files
committed
refactor: fix ScrollState
1 parent d07f921 commit 9143980

File tree

3 files changed

+58
-18
lines changed

3 files changed

+58
-18
lines changed

presentation/src/main/java/io/github/shinhyo/brba/presentation/ui/NavGraph.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ package io.github.shinhyo.brba.presentation.ui
1818
import androidx.activity.compose.BackHandler
1919
import androidx.compose.foundation.layout.navigationBarsPadding
2020
import androidx.compose.foundation.layout.padding
21+
import androidx.compose.foundation.lazy.rememberLazyListState
22+
import androidx.compose.foundation.rememberScrollState
2123
import androidx.compose.material.*
2224
import androidx.compose.runtime.Composable
2325
import androidx.compose.runtime.MutableState
@@ -98,16 +100,20 @@ fun NavScreen(
98100
},
99101
) {
100102
val modifier = Modifier.padding(it)
103+
val listScrollState = rememberScrollState()
104+
val favoriteScrollState = rememberLazyListState()
101105
when (selectedTab.value) {
102106
BottomNavTabs.LIST -> ListScreen(
103-
hiltViewModel(),
104-
actions.moveDetail,
105-
modifier
107+
modifier = modifier,
108+
viewModel = hiltViewModel(),
109+
scrollState = listScrollState,
110+
select = actions.moveDetail,
106111
)
107112
BottomNavTabs.FAVORITE -> FavoriteScreen(
108-
hiltViewModel(),
109-
actions.moveDetail,
110-
modifier
113+
modifier = modifier,
114+
viewModel = hiltViewModel(),
115+
scrollState = favoriteScrollState,
116+
select = actions.moveDetail,
111117
)
112118
}
113119
}

presentation/src/main/java/io/github/shinhyo/brba/presentation/ui/favorite/FavoriteScreen.kt

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.compose.foundation.background
2020
import androidx.compose.foundation.clickable
2121
import androidx.compose.foundation.layout.*
2222
import androidx.compose.foundation.lazy.LazyColumn
23+
import androidx.compose.foundation.lazy.LazyListState
2324
import androidx.compose.foundation.lazy.items
2425
import androidx.compose.material.Card
2526
import androidx.compose.material.Icon
@@ -46,27 +47,51 @@ import io.github.shinhyo.brba.presentation.ui.common.IconFavorite
4647

4748
@Composable
4849
fun FavoriteScreen(
50+
modifier: Modifier = Modifier,
4951
viewModel: FavoriteViewModel,
52+
scrollState: LazyListState,
53+
select: (Character) -> Unit,
54+
) {
55+
Body(
56+
modifier = modifier,
57+
viewModel = viewModel,
58+
scrollState = scrollState,
59+
select = select,
60+
)
61+
}
62+
63+
@Composable
64+
private fun Body(
65+
modifier: Modifier,
66+
viewModel: FavoriteViewModel,
67+
scrollState: LazyListState,
5068
select: (Character) -> Unit,
51-
modifier: Modifier = Modifier
5269
) {
5370
val list = viewModel.list.collectAsState()
5471
if (list.value.isEmpty()) {
5572
EmptyScreen()
5673
} else {
57-
ListScreen(modifier, list, select, viewModel)
74+
ListScreen(
75+
modifier = modifier,
76+
list = list,
77+
select = select,
78+
viewModel = viewModel,
79+
state = scrollState
80+
)
5881
}
5982
}
6083

6184
@Composable
6285
private fun ListScreen(
6386
modifier: Modifier,
87+
viewModel: FavoriteViewModel,
6488
list: State<List<Character>>,
89+
state: LazyListState,
6590
select: (Character) -> Unit,
66-
viewModel: FavoriteViewModel
6791
) {
6892
LazyColumn(
6993
modifier = modifier,
94+
state = state,
7095
contentPadding = PaddingValues(start = 8.dp, top = 32.dp, end = 8.dp, bottom = 32.dp),
7196
verticalArrangement = Arrangement.spacedBy(8.dp),
7297
) {

presentation/src/main/java/io/github/shinhyo/brba/presentation/ui/list/ListScreen.kt

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,31 +39,39 @@ import coil.compose.rememberImagePainter
3939
import io.github.shinhyo.brba.domain.model.Character
4040
import io.github.shinhyo.brba.presentation.R
4141
import io.github.shinhyo.brba.presentation.ui.common.IconFavorite
42+
import timber.log.Timber
4243
import kotlin.math.ceil
4344

4445
@Composable
4546
fun ListScreen(
47+
modifier: Modifier = Modifier,
4648
viewModel: ListViewModel,
49+
scrollState: ScrollState,
4750
select: (Character) -> Unit,
48-
modifier: Modifier = Modifier
4951
) {
50-
val listScrollState = rememberScrollState()
51-
val clickFavorite: (Character) -> Unit = viewModel::upsertFavorite
52-
Body(viewModel, select, clickFavorite, listScrollState, modifier)
52+
Body(
53+
modifier = modifier,
54+
viewModel = viewModel,
55+
scrollState = scrollState,
56+
select = select,
57+
)
5358
}
5459

5560
@Composable
5661
private fun Body(
62+
modifier: Modifier,
5763
viewModel: ListViewModel,
64+
scrollState: ScrollState,
5865
select: (Character) -> Unit,
59-
clickFavorite: (Character) -> Unit,
60-
state: ScrollState,
61-
modifier: Modifier
6266
) {
67+
Timber.d("Body")
68+
// val scrollState = rememberScrollState()
69+
// Timber.i("Body: scrollState.value ${scrollState.value}")
6370
val uiState = viewModel.uiState.collectAsState()
71+
val clickFavorite: (Character) -> Unit = viewModel::upsertFavorite
6472
Column(
6573
modifier = modifier
66-
.verticalScroll(state)
74+
.verticalScroll(scrollState)
6775
.statusBarsPadding()
6876
) {
6977
Text(
@@ -80,7 +88,8 @@ private fun Body(
8088
) {
8189
uiState.value.list.forEach {
8290
FeaturedList(
83-
character = it, select = select,
91+
character = it,
92+
select = select,
8493
clickFavorite = clickFavorite
8594
)
8695
}

0 commit comments

Comments
 (0)