156 lines
5.7 KiB
Kotlin
156 lines
5.7 KiB
Kotlin
|
|
package com.aiosman.riderpro.ui
|
||
|
|
|
||
|
|
import ModificationListScreen
|
||
|
|
import androidx.compose.animation.ExperimentalSharedTransitionApi
|
||
|
|
import androidx.compose.animation.SharedTransitionLayout
|
||
|
|
import androidx.compose.foundation.layout.Box
|
||
|
|
import androidx.compose.foundation.layout.WindowInsets
|
||
|
|
import androidx.compose.foundation.layout.navigationBars
|
||
|
|
import androidx.compose.foundation.layout.padding
|
||
|
|
import androidx.compose.runtime.Composable
|
||
|
|
import androidx.compose.runtime.CompositionLocalProvider
|
||
|
|
import androidx.compose.ui.Modifier
|
||
|
|
import androidx.compose.ui.platform.LocalDensity
|
||
|
|
import androidx.compose.ui.unit.dp
|
||
|
|
import androidx.navigation.NavHostController
|
||
|
|
import androidx.navigation.NavType
|
||
|
|
import androidx.navigation.compose.NavHost
|
||
|
|
import androidx.navigation.compose.composable
|
||
|
|
import androidx.navigation.compose.rememberNavController
|
||
|
|
import androidx.navigation.navArgument
|
||
|
|
import com.aiosman.riderpro.LocalAnimatedContentScope
|
||
|
|
import com.aiosman.riderpro.LocalNavController
|
||
|
|
import com.aiosman.riderpro.LocalSharedTransitionScope
|
||
|
|
import com.aiosman.riderpro.ui.comment.CommentsScreen
|
||
|
|
import com.aiosman.riderpro.ui.follower.FollowerScreen
|
||
|
|
import com.aiosman.riderpro.ui.gallery.OfficialGalleryScreen
|
||
|
|
import com.aiosman.riderpro.ui.gallery.OfficialPhotographerScreen
|
||
|
|
import com.aiosman.riderpro.ui.gallery.ProfileTimelineScreen
|
||
|
|
import com.aiosman.riderpro.ui.index.IndexScreen
|
||
|
|
import com.aiosman.riderpro.ui.like.LikeScreen
|
||
|
|
import com.aiosman.riderpro.ui.location.LocationDetailScreen
|
||
|
|
import com.aiosman.riderpro.ui.message.NotificationsScreen
|
||
|
|
import com.aiosman.riderpro.ui.modification.EditModificationScreen
|
||
|
|
import com.aiosman.riderpro.ui.post.NewPostScreen
|
||
|
|
import com.aiosman.riderpro.ui.post.PostScreen
|
||
|
|
|
||
|
|
sealed class NavigationRoute(
|
||
|
|
val route: String,
|
||
|
|
) {
|
||
|
|
data object Index : NavigationRoute("Index")
|
||
|
|
data object ProfileTimeline : NavigationRoute("ProfileTimeline")
|
||
|
|
data object LocationDetail : NavigationRoute("LocationDetail/{x}/{y}")
|
||
|
|
data object OfficialPhoto : NavigationRoute("OfficialPhoto")
|
||
|
|
data object OfficialPhotographer : NavigationRoute("OfficialPhotographer")
|
||
|
|
data object Post : NavigationRoute("Post/{id}")
|
||
|
|
data object ModificationList : NavigationRoute("ModificationList")
|
||
|
|
data object MyMessage : NavigationRoute("MyMessage")
|
||
|
|
data object Comments : NavigationRoute("Comments")
|
||
|
|
data object Likes : NavigationRoute("Likes")
|
||
|
|
data object Followers : NavigationRoute("Followers")
|
||
|
|
data object NewPost : NavigationRoute("NewPost")
|
||
|
|
data object EditModification : NavigationRoute("EditModification")
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
@Composable
|
||
|
|
fun NavigationController(navController: NavHostController) {
|
||
|
|
val navigationBarHeight = with(LocalDensity.current) {
|
||
|
|
WindowInsets.navigationBars.getBottom(this).toDp()
|
||
|
|
}
|
||
|
|
|
||
|
|
NavHost(
|
||
|
|
navController = navController,
|
||
|
|
startDestination = NavigationRoute.Index.route,
|
||
|
|
) {
|
||
|
|
composable(route = NavigationRoute.Index.route) {
|
||
|
|
CompositionLocalProvider(
|
||
|
|
LocalAnimatedContentScope provides this,
|
||
|
|
) {
|
||
|
|
IndexScreen()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
composable(route = NavigationRoute.ProfileTimeline.route) {
|
||
|
|
ProfileTimelineScreen()
|
||
|
|
}
|
||
|
|
composable(
|
||
|
|
route = NavigationRoute.LocationDetail.route,
|
||
|
|
arguments = listOf(
|
||
|
|
navArgument("x") { type = NavType.FloatType },
|
||
|
|
navArgument("y") { type = NavType.FloatType }
|
||
|
|
)
|
||
|
|
) {
|
||
|
|
Box(
|
||
|
|
modifier = Modifier.padding(bottom = navigationBarHeight)
|
||
|
|
) {
|
||
|
|
val x = it.arguments?.getFloat("x") ?: 0f
|
||
|
|
val y = it.arguments?.getFloat("y") ?: 0f
|
||
|
|
LocationDetailScreen(
|
||
|
|
x, y
|
||
|
|
)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
composable(route = NavigationRoute.OfficialPhoto.route) {
|
||
|
|
OfficialGalleryScreen()
|
||
|
|
}
|
||
|
|
composable(route = NavigationRoute.OfficialPhotographer.route) {
|
||
|
|
OfficialPhotographerScreen()
|
||
|
|
}
|
||
|
|
composable(
|
||
|
|
route = NavigationRoute.Post.route,
|
||
|
|
arguments = listOf(navArgument("id") { type = NavType.StringType })
|
||
|
|
) { backStackEntry ->
|
||
|
|
CompositionLocalProvider(
|
||
|
|
LocalAnimatedContentScope provides this,
|
||
|
|
) {
|
||
|
|
val id = backStackEntry.arguments?.getString("id")
|
||
|
|
PostScreen(
|
||
|
|
id!!
|
||
|
|
)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
composable(route = NavigationRoute.ModificationList.route) {
|
||
|
|
ModificationListScreen()
|
||
|
|
}
|
||
|
|
composable(route = NavigationRoute.MyMessage.route) {
|
||
|
|
NotificationsScreen()
|
||
|
|
}
|
||
|
|
composable(route = NavigationRoute.Comments.route) {
|
||
|
|
CommentsScreen()
|
||
|
|
}
|
||
|
|
composable(route = NavigationRoute.Likes.route) {
|
||
|
|
LikeScreen()
|
||
|
|
}
|
||
|
|
composable(route = NavigationRoute.Followers.route) {
|
||
|
|
FollowerScreen()
|
||
|
|
}
|
||
|
|
composable(route = NavigationRoute.NewPost.route) {
|
||
|
|
NewPostScreen()
|
||
|
|
}
|
||
|
|
composable(route = NavigationRoute.EditModification.route) {
|
||
|
|
Box(
|
||
|
|
modifier = Modifier.padding(top = 64.dp)
|
||
|
|
) {
|
||
|
|
EditModificationScreen()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
@OptIn(ExperimentalSharedTransitionApi::class)
|
||
|
|
@Composable
|
||
|
|
fun Navigation() {
|
||
|
|
val navController = rememberNavController()
|
||
|
|
SharedTransitionLayout {
|
||
|
|
CompositionLocalProvider(
|
||
|
|
LocalNavController provides navController,
|
||
|
|
LocalSharedTransitionScope provides this@SharedTransitionLayout,
|
||
|
|
) {
|
||
|
|
Box {
|
||
|
|
NavigationController(navController = navController)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|