feat: add segmented buttons to friends screen
This commit is contained in:
+3
-3
@@ -38,6 +38,7 @@ import dev.meloda.fast.ui.theme.LocalThemeConfig
|
|||||||
import dev.meloda.fast.ui.util.ImmutableList
|
import dev.meloda.fast.ui.util.ImmutableList
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.flow.debounce
|
import kotlinx.coroutines.flow.debounce
|
||||||
|
import kotlin.time.Duration.Companion.milliseconds
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
@@ -47,7 +48,6 @@ fun FriendsScreen(
|
|||||||
orderType: String,
|
orderType: String,
|
||||||
padding: PaddingValues,
|
padding: PaddingValues,
|
||||||
tabIndex: Int,
|
tabIndex: Int,
|
||||||
onSessionExpiredLogOutButtonClicked: () -> Unit = {},
|
|
||||||
onPhotoClicked: (url: String) -> Unit = {},
|
onPhotoClicked: (url: String) -> Unit = {},
|
||||||
onMessageClicked: (userid: Long) -> Unit = {},
|
onMessageClicked: (userid: Long) -> Unit = {},
|
||||||
setCanScrollBackward: (Boolean) -> Unit = {},
|
setCanScrollBackward: (Boolean) -> Unit = {},
|
||||||
@@ -100,13 +100,13 @@ fun FriendsScreen(
|
|||||||
|
|
||||||
LaunchedEffect(listState) {
|
LaunchedEffect(listState) {
|
||||||
snapshotFlow { listState.firstVisibleItemIndex }
|
snapshotFlow { listState.firstVisibleItemIndex }
|
||||||
.debounce(250L)
|
.debounce(250L.milliseconds)
|
||||||
.collectLatest(viewModel::setScrollIndex)
|
.collectLatest(viewModel::setScrollIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
LaunchedEffect(listState) {
|
LaunchedEffect(listState) {
|
||||||
snapshotFlow { listState.firstVisibleItemScrollOffset }
|
snapshotFlow { listState.firstVisibleItemScrollOffset }
|
||||||
.debounce(250L)
|
.debounce(250L.milliseconds)
|
||||||
.collectLatest(viewModel::setScrollOffset)
|
.collectLatest(viewModel::setScrollOffset)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+20
-12
@@ -9,12 +9,11 @@ import androidx.compose.foundation.layout.Column
|
|||||||
import androidx.compose.foundation.layout.WindowInsets
|
import androidx.compose.foundation.layout.WindowInsets
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.statusBars
|
import androidx.compose.foundation.layout.statusBars
|
||||||
import androidx.compose.foundation.pager.HorizontalPager
|
import androidx.compose.foundation.pager.HorizontalPager
|
||||||
import androidx.compose.foundation.pager.rememberPagerState
|
import androidx.compose.foundation.pager.rememberPagerState
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.Icon
|
|
||||||
import androidx.compose.material3.IconButton
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.PrimaryTabRow
|
import androidx.compose.material3.PrimaryTabRow
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
@@ -34,7 +33,6 @@ import androidx.compose.runtime.saveable.rememberSaveable
|
|||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.res.painterResource
|
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
@@ -47,11 +45,14 @@ import dev.meloda.fast.model.BaseError
|
|||||||
import dev.meloda.fast.ui.R
|
import dev.meloda.fast.ui.R
|
||||||
import dev.meloda.fast.ui.components.ActionInvokeDismiss
|
import dev.meloda.fast.ui.components.ActionInvokeDismiss
|
||||||
import dev.meloda.fast.ui.components.MaterialDialog
|
import dev.meloda.fast.ui.components.MaterialDialog
|
||||||
|
import dev.meloda.fast.ui.components.SegmentedButtonItem
|
||||||
|
import dev.meloda.fast.ui.components.SegmentedButtonsRow
|
||||||
import dev.meloda.fast.ui.components.SelectionType
|
import dev.meloda.fast.ui.components.SelectionType
|
||||||
import dev.meloda.fast.ui.model.TabItem
|
import dev.meloda.fast.ui.model.TabItem
|
||||||
import dev.meloda.fast.ui.theme.LocalHazeState
|
import dev.meloda.fast.ui.theme.LocalHazeState
|
||||||
import dev.meloda.fast.ui.theme.LocalThemeConfig
|
import dev.meloda.fast.ui.theme.LocalThemeConfig
|
||||||
import dev.meloda.fast.ui.util.ImmutableList
|
import dev.meloda.fast.ui.util.ImmutableList
|
||||||
|
import dev.meloda.fast.ui.util.buildImmutableList
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalHazeMaterialsApi::class)
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalHazeMaterialsApi::class)
|
||||||
@@ -189,16 +190,24 @@ fun FriendsRoute(
|
|||||||
),
|
),
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
actions = {
|
actions = {
|
||||||
IconButton(
|
val items = buildImmutableList {
|
||||||
onClick = {
|
add(
|
||||||
showOrderDialog = true
|
SegmentedButtonItem(
|
||||||
}
|
"filter",
|
||||||
) {
|
R.drawable.ic_filter_list_round_24
|
||||||
Icon(
|
)
|
||||||
painter = painterResource(R.drawable.ic_filter_list_round_24),
|
|
||||||
contentDescription = null
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SegmentedButtonsRow(
|
||||||
|
modifier = Modifier.padding(end = 8.dp),
|
||||||
|
items = items,
|
||||||
|
onClick = { index ->
|
||||||
|
when (items[index].key) {
|
||||||
|
"filter" -> showOrderDialog = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
PrimaryTabRow(
|
PrimaryTabRow(
|
||||||
@@ -234,7 +243,6 @@ fun FriendsRoute(
|
|||||||
orderType = orderType,
|
orderType = orderType,
|
||||||
padding = padding,
|
padding = padding,
|
||||||
tabIndex = index,
|
tabIndex = index,
|
||||||
onSessionExpiredLogOutButtonClicked = { onError(BaseError.SessionExpired) },
|
|
||||||
onPhotoClicked = onPhotoClicked,
|
onPhotoClicked = onPhotoClicked,
|
||||||
onMessageClicked = onMessageClicked,
|
onMessageClicked = onMessageClicked,
|
||||||
setCanScrollBackward = { canScrollBackward = it },
|
setCanScrollBackward = { canScrollBackward = it },
|
||||||
|
|||||||
Reference in New Issue
Block a user