Skip to content

Commit 91c2439

Browse files
committed
fix: can't update home page when request failed
PullToRefreshBox relies on scroll state of child composable. Make child composable has full size to fix it.
1 parent 36d3434 commit 91c2439

File tree

2 files changed

+31
-28
lines changed

2 files changed

+31
-28
lines changed

app/src/main/kotlin/day/vitayuzu/neodb/ui/page/home/HomeScreen.kt

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import androidx.compose.foundation.layout.Column
77
import androidx.compose.foundation.layout.PaddingValues
88
import androidx.compose.foundation.layout.Spacer
99
import androidx.compose.foundation.layout.consumeWindowInsets
10-
import androidx.compose.foundation.layout.fillMaxWidth
10+
import androidx.compose.foundation.layout.fillMaxSize
1111
import androidx.compose.foundation.layout.height
1212
import androidx.compose.foundation.layout.padding
1313
import androidx.compose.foundation.pager.HorizontalPager
@@ -53,28 +53,27 @@ fun HomeScreen(modifier: Modifier = Modifier, viewModel: HomeViewModel = hiltVie
5353
val appNavigator = LocalNavigator.current
5454

5555
// TODO: show fetched data immediately
56-
PullToRefreshBox(
57-
isRefreshing = uiState.isLoading,
58-
onRefresh = { viewModel.updateTrending() },
56+
Scaffold(
5957
modifier = modifier,
58+
bottomBar = { SharedBottomBar() },
59+
floatingActionButton = {
60+
SharedFab(onClick = { appNavigator goto AppNavigator.Search }) {
61+
Icon(
62+
imageVector = Icons.Default.Search,
63+
contentDescription = "Perform search",
64+
)
65+
}
66+
},
6067
) {
61-
Scaffold(
62-
bottomBar = { SharedBottomBar() },
63-
floatingActionButton = {
64-
SharedFab(onClick = { appNavigator goto AppNavigator.Search }) {
65-
Icon(
66-
imageVector = Icons.Default.Search,
67-
contentDescription = "Perform search",
68-
)
69-
}
70-
},
68+
PullToRefreshBox(
69+
isRefreshing = uiState.isLoading,
70+
onRefresh = { viewModel.updateTrending() },
71+
modifier = Modifier.padding(it).consumeWindowInsets(it),
7172
) {
7273
Column(
73-
modifier = Modifier
74-
.padding(it)
75-
.consumeWindowInsets(it)
76-
.fillMaxWidth()
77-
.verticalScroll(rememberScrollState()),
74+
// PullToRefresh relies on child scroll event to detect scroll gestures,
75+
// so make sure child composable has enough height.
76+
modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()),
7877
verticalArrangement = Arrangement.spacedBy(16.dp, Alignment.Top),
7978
) {
8079
// Book

app/src/main/kotlin/day/vitayuzu/neodb/ui/page/library/LibraryPage.kt

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.compose.foundation.background
44
import androidx.compose.foundation.layout.Arrangement
55
import androidx.compose.foundation.layout.PaddingValues
66
import androidx.compose.foundation.layout.consumeWindowInsets
7+
import androidx.compose.foundation.layout.fillMaxSize
78
import androidx.compose.foundation.layout.padding
89
import androidx.compose.foundation.lazy.LazyColumn
910
import androidx.compose.foundation.lazy.LazyRow
@@ -37,22 +38,25 @@ import day.vitayuzu.neodb.util.ShelfType
3738
fun LibraryPage(modifier: Modifier = Modifier, viewModel: LibraryViewModel = hiltViewModel()) {
3839
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
3940

40-
PullToRefreshBox(
41-
isRefreshing = uiState.isLoading,
42-
onRefresh = viewModel::refresh,
41+
val appNavigator = LocalNavigator.current
42+
Scaffold(
4343
modifier = modifier,
44-
) {
45-
val appNavigator = LocalNavigator.current
46-
47-
Scaffold(bottomBar = { SharedBottomBar() }, floatingActionButton = {
44+
bottomBar = { SharedBottomBar() },
45+
floatingActionButton = {
4846
SharedFab(onClick = { appNavigator goto AppNavigator.Search }) {
4947
Icon(
5048
imageVector = Icons.Default.Search,
5149
contentDescription = "Perform search",
5250
)
5351
}
54-
}) { paddings ->
55-
LazyColumn(Modifier.padding(paddings).consumeWindowInsets(paddings)) {
52+
},
53+
) {
54+
PullToRefreshBox(
55+
isRefreshing = uiState.isLoading,
56+
onRefresh = viewModel::refresh,
57+
modifier = Modifier.padding(it).consumeWindowInsets(it),
58+
) {
59+
LazyColumn(Modifier.fillMaxSize()) {
5660
stickyHeader {
5761
// FIXME: In some locale like Chinese we don't need scrollable row
5862
// so it is not centered.

0 commit comments

Comments
 (0)