mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-18 00:57:02 +05:30
MainActivity: snap to top of list when pressing hottest posts tab
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
7e7eff6c8e
commit
04658e99fd
1 changed files with 17 additions and 2 deletions
|
@ -3,6 +3,7 @@ package dev.msfjarvis.lobsters.ui.main
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.lazy.LazyListState
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.material.BottomNavigation
|
import androidx.compose.material.BottomNavigation
|
||||||
import androidx.compose.material.BottomNavigationItem
|
import androidx.compose.material.BottomNavigationItem
|
||||||
|
@ -12,6 +13,7 @@ import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.Providers
|
import androidx.compose.runtime.Providers
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.setContent
|
import androidx.compose.ui.platform.setContent
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
|
@ -33,6 +35,8 @@ import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncher
|
||||||
import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncherAmbient
|
import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncherAmbient
|
||||||
import dev.msfjarvis.lobsters.ui.viewmodel.LobstersViewModel
|
import dev.msfjarvis.lobsters.ui.viewmodel.LobstersViewModel
|
||||||
import dev.msfjarvis.lobsters.util.IconResource
|
import dev.msfjarvis.lobsters.util.IconResource
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
|
@ -54,16 +58,21 @@ class MainActivity : AppCompatActivity() {
|
||||||
@Composable
|
@Composable
|
||||||
fun LobstersApp() {
|
fun LobstersApp() {
|
||||||
val viewModel: LobstersViewModel = viewModel()
|
val viewModel: LobstersViewModel = viewModel()
|
||||||
|
val coroutineScope = rememberCoroutineScope()
|
||||||
val navController = rememberNavController()
|
val navController = rememberNavController()
|
||||||
val hottestPosts = viewModel.posts.collectAsLazyPagingItems()
|
val hottestPosts = viewModel.posts.collectAsLazyPagingItems()
|
||||||
val savedPosts by viewModel.savedPosts.collectAsState()
|
val savedPosts by viewModel.savedPosts.collectAsState()
|
||||||
|
val hottestPostsListState = rememberLazyListState()
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
bottomBar = {
|
bottomBar = {
|
||||||
LobstersBottomNav(navController)
|
LobstersBottomNav(
|
||||||
|
navController,
|
||||||
|
hottestPostsListState,
|
||||||
|
coroutineScope,
|
||||||
|
)
|
||||||
},
|
},
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
val hottestPostsListState = rememberLazyListState()
|
|
||||||
NavHost(navController, startDestination = Destination.startDestination.route) {
|
NavHost(navController, startDestination = Destination.startDestination.route) {
|
||||||
composable(Destination.Hottest.route) {
|
composable(Destination.Hottest.route) {
|
||||||
HottestPosts(
|
HottestPosts(
|
||||||
|
@ -87,6 +96,8 @@ fun LobstersApp() {
|
||||||
@Composable
|
@Composable
|
||||||
fun LobstersBottomNav(
|
fun LobstersBottomNav(
|
||||||
navController: NavHostController,
|
navController: NavHostController,
|
||||||
|
hottestPostsListState: LazyListState,
|
||||||
|
coroutineScope: CoroutineScope,
|
||||||
) {
|
) {
|
||||||
BottomNavigation {
|
BottomNavigation {
|
||||||
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
||||||
|
@ -104,6 +115,10 @@ fun LobstersBottomNav(
|
||||||
launchSingleTop = true
|
launchSingleTop = true
|
||||||
popUpTo(navController.graph.startDestination) { inclusive = false }
|
popUpTo(navController.graph.startDestination) { inclusive = false }
|
||||||
}
|
}
|
||||||
|
} else if (screen.route == Destination.Hottest.route) {
|
||||||
|
coroutineScope.launch {
|
||||||
|
hottestPostsListState.snapToItemIndex(0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue