mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 18:47:03 +05:30
android: add swipe refresh
This commit is contained in:
parent
8e96225a9d
commit
3b2367273b
5 changed files with 28 additions and 19 deletions
|
@ -13,6 +13,7 @@ dependencies {
|
|||
implementation(projects.api)
|
||||
implementation(projects.common)
|
||||
implementation(libs.accompanist.insets)
|
||||
implementation(libs.accompanist.swiperefresh)
|
||||
implementation(libs.accompanist.sysuicontroller)
|
||||
implementation(libs.androidx.activity.compose)
|
||||
implementation(libs.androidx.appcompat)
|
||||
|
|
|
@ -4,15 +4,12 @@ import androidx.compose.foundation.isSystemInDarkTheme
|
|||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.CircularProgressIndicator
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material.Scaffold
|
||||
import androidx.compose.material.primarySurface
|
||||
import androidx.compose.material.rememberScaffoldState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.SideEffect
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
|
@ -20,6 +17,8 @@ import androidx.paging.LoadState
|
|||
import androidx.paging.compose.collectAsLazyPagingItems
|
||||
import com.google.accompanist.insets.ProvideWindowInsets
|
||||
import com.google.accompanist.insets.statusBarsPadding
|
||||
import com.google.accompanist.swiperefresh.SwipeRefresh
|
||||
import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
|
||||
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
||||
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
|
||||
import dev.msfjarvis.claw.common.theme.LobstersTheme
|
||||
|
@ -46,20 +45,19 @@ fun LobstersApp(
|
|||
topBar = { ClawAppBar(modifier = Modifier.statusBarsPadding()) },
|
||||
modifier = Modifier,
|
||||
) {
|
||||
if (items.loadState.refresh != LoadState.Loading) {
|
||||
val isRefreshing = items.loadState.refresh == LoadState.Loading
|
||||
SwipeRefresh(
|
||||
state = rememberSwipeRefreshState(isRefreshing),
|
||||
onRefresh = viewModel::reloadPosts,
|
||||
) {
|
||||
if (items.itemCount == 0) {
|
||||
Box(modifier = Modifier.fillMaxSize())
|
||||
} else {
|
||||
NetworkPosts(
|
||||
items = items,
|
||||
launchUrl = urlLauncher::launch,
|
||||
modifier = Modifier.padding(top = 16.dp),
|
||||
)
|
||||
} else {
|
||||
Box(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
) {
|
||||
CircularProgressIndicator(
|
||||
modifier = Modifier.size(64.dp).align(Alignment.Center),
|
||||
color = MaterialTheme.colors.secondary,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ import androidx.paging.compose.items
|
|||
import dev.msfjarvis.claw.android.ext.toDbModel
|
||||
import dev.msfjarvis.claw.api.model.LobstersPost
|
||||
import dev.msfjarvis.claw.common.posts.LobstersCard
|
||||
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
||||
|
||||
@Composable
|
||||
fun NetworkPosts(
|
||||
|
|
|
@ -9,11 +9,21 @@ import dev.msfjarvis.claw.api.LobstersApi
|
|||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class ClawViewModel @Inject constructor(
|
||||
class ClawViewModel
|
||||
@Inject
|
||||
constructor(
|
||||
api: LobstersApi,
|
||||
) : ViewModel() {
|
||||
private val pager = Pager(PagingConfig(20)) { LobstersPagingSource(api::getHottestPosts) }
|
||||
var lastPagingSource: LobstersPagingSource? = null
|
||||
private val pager =
|
||||
Pager(PagingConfig(20)) {
|
||||
LobstersPagingSource(api::getHottestPosts).also { lastPagingSource = it }
|
||||
}
|
||||
|
||||
val pagerFlow
|
||||
get() = pager.flow
|
||||
|
||||
fun reloadPosts() {
|
||||
lastPagingSource?.invalidate()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ kotlin-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-co
|
|||
kotlin-coroutines-jvm = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", version.ref = "coroutines" }
|
||||
|
||||
accompanist-insets = { module = "com.google.accompanist:accompanist-insets", version.ref = "accompanist" }
|
||||
accompanist-swiperefresh = { module = "com.google.accompanist:accompanist-swiperefresh", version.ref = "accompanist" }
|
||||
accompanist-sysuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" }
|
||||
|
||||
androidx-activity-compose = "androidx.activity:activity-compose:1.4.0-alpha02"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue