Skip to content

Commit c0f0dd8

Browse files
committed
wip: Pull to refresh on home screen
1 parent c96add6 commit c0f0dd8

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import androidx.compose.foundation.layout.fillMaxWidth
1515
import androidx.compose.foundation.layout.height
1616
import androidx.compose.foundation.layout.padding
1717
import androidx.compose.foundation.layout.systemBarsPadding
18+
import androidx.compose.material.ExperimentalMaterialApi
19+
import androidx.compose.material.pullrefresh.PullRefreshIndicator
20+
import androidx.compose.material.pullrefresh.pullRefresh
21+
import androidx.compose.material.pullrefresh.rememberPullRefreshState
1822
import androidx.compose.material3.VerticalDivider
1923
import androidx.compose.runtime.Composable
2024
import androidx.compose.runtime.LaunchedEffect
@@ -23,6 +27,7 @@ import androidx.compose.runtime.derivedStateOf
2327
import androidx.compose.runtime.getValue
2428
import androidx.compose.runtime.mutableStateOf
2529
import androidx.compose.runtime.remember
30+
import androidx.compose.runtime.rememberCoroutineScope
2631
import androidx.compose.runtime.setValue
2732
import androidx.compose.ui.Alignment
2833
import androidx.compose.ui.Modifier
@@ -35,6 +40,8 @@ import androidx.navigation.NavController
3540
import androidx.navigation.compose.NavHost
3641
import androidx.navigation.compose.composable
3742
import androidx.navigation.compose.rememberNavController
43+
import kotlinx.coroutines.delay
44+
import kotlinx.coroutines.launch
3845
import kotlinx.serialization.Serializable
3946
import to.bitkit.R
4047
import to.bitkit.ext.requiresPermission
@@ -162,6 +169,7 @@ fun HomeScreen(
162169
}
163170
}
164171

172+
@OptIn(ExperimentalMaterialApi::class)
165173
@Composable
166174
private fun HomeContentView(
167175
rootNavController: NavController,
@@ -182,7 +190,28 @@ private fun HomeContentView(
182190
showEmptyStateSetting && balances.totalSats == 0uL
183191
}
184192
}
185-
Box(modifier = Modifier.fillMaxSize()) {
193+
194+
val scope = rememberCoroutineScope()
195+
var isRefreshing by remember { mutableStateOf(false) }
196+
197+
fun refresh() = scope.launch {
198+
// TODO use viewmodel state?!
199+
isRefreshing = true
200+
onRefresh()
201+
delay(1500)
202+
isRefreshing = false
203+
}
204+
205+
val pullRefreshState = rememberPullRefreshState(
206+
refreshing = isRefreshing,
207+
onRefresh = ::refresh
208+
)
209+
210+
Box(
211+
modifier = Modifier
212+
.fillMaxSize()
213+
.pullRefresh(pullRefreshState)
214+
) {
186215
Column(
187216
modifier = Modifier
188217
.padding(horizontal = 16.dp)
@@ -235,6 +264,12 @@ private fun HomeContentView(
235264
.align(Alignment.BottomCenter)
236265
)
237266
}
267+
268+
PullRefreshIndicator(
269+
refreshing = isRefreshing,
270+
state = pullRefreshState,
271+
modifier = Modifier.align(Alignment.TopCenter)
272+
)
238273
}
239274
}
240275
}

0 commit comments

Comments
 (0)