mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-06-07 16:29:55 +00:00
Add: Main NavHost
This commit is contained in:
parent
815a39df60
commit
2aee70f09f
@ -0,0 +1,84 @@
|
||||
package com.machiav3lli.fdroid.ui.navigation
|
||||
|
||||
import androidx.compose.animation.AnimatedVisibilityScope
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.animation.fadeIn
|
||||
import androidx.compose.animation.fadeOut
|
||||
import androidx.compose.animation.slideInVertically
|
||||
import androidx.compose.animation.slideOutVertically
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavBackStackEntry
|
||||
import androidx.navigation.NavGraphBuilder
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.activity
|
||||
import com.google.accompanist.navigation.animation.AnimatedNavHost
|
||||
import com.google.accompanist.navigation.animation.composable
|
||||
import com.machiav3lli.fdroid.database.DatabaseX
|
||||
import com.machiav3lli.fdroid.ui.activities.PrefsActivityX
|
||||
import com.machiav3lli.fdroid.ui.fragments.Source
|
||||
import com.machiav3lli.fdroid.ui.pages.ExplorePage
|
||||
import com.machiav3lli.fdroid.ui.pages.InstalledPage
|
||||
import com.machiav3lli.fdroid.ui.pages.LatestPage
|
||||
import com.machiav3lli.fdroid.ui.viewmodels.MainNavFragmentViewModelX
|
||||
|
||||
@OptIn(ExperimentalAnimationApi::class)
|
||||
@Composable
|
||||
fun MainNavHost(
|
||||
modifier: Modifier = Modifier,
|
||||
navController: NavHostController
|
||||
) =
|
||||
AnimatedNavHost(
|
||||
modifier = modifier,
|
||||
navController = navController,
|
||||
startDestination = NavItem.Explore.destination
|
||||
) {
|
||||
slideDownComposable(NavItem.Explore.destination) {
|
||||
val viewModel = viewModel<MainNavFragmentViewModelX>(
|
||||
factory = MainNavFragmentViewModelX.Factory(
|
||||
DatabaseX.getInstance(navController.context),
|
||||
Source.AVAILABLE,
|
||||
Source.AVAILABLE,
|
||||
)
|
||||
)
|
||||
ExplorePage(viewModel)
|
||||
}
|
||||
slideDownComposable(route = NavItem.Latest.destination) {
|
||||
val viewModel = viewModel<MainNavFragmentViewModelX>(
|
||||
factory = MainNavFragmentViewModelX.Factory(
|
||||
DatabaseX.getInstance(navController.context),
|
||||
Source.UPDATED,
|
||||
Source.NEW,
|
||||
)
|
||||
)
|
||||
LatestPage(viewModel)
|
||||
}
|
||||
slideDownComposable(NavItem.Installed.destination) {
|
||||
val viewModel = viewModel<MainNavFragmentViewModelX>(
|
||||
factory = MainNavFragmentViewModelX.Factory(
|
||||
DatabaseX.getInstance(navController.context),
|
||||
Source.INSTALLED,
|
||||
Source.UPDATES,
|
||||
)
|
||||
)
|
||||
InstalledPage(viewModel)
|
||||
}
|
||||
activity(NavItem.Prefs.destination) {
|
||||
this.activityClass = PrefsActivityX::class
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalAnimationApi::class)
|
||||
fun NavGraphBuilder.slideDownComposable(
|
||||
route: String,
|
||||
composable: @Composable (AnimatedVisibilityScope.(NavBackStackEntry) -> Unit)
|
||||
) {
|
||||
composable(
|
||||
route,
|
||||
enterTransition = { slideInVertically { height -> -height } + fadeIn() },
|
||||
exitTransition = { slideOutVertically { height -> height } + fadeOut() }
|
||||
) {
|
||||
composable(it)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user