Skip to content

Instantly share code, notes, and snippets.

View mohanmanu484's full-sized avatar

Mohan mohanmanu484

  • Banglore
View GitHub Profile
fun handleDeeplink(
navController: NavHostController,
deeplink: String
) {
val navigation = when {
deeplink.startsWith("/login") -> {
val id = extractId(deeplink)
Navigation.Login(id)
}
@Composable
fun SampleNavHost() {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = Navigation.Login.route
) {
composable(Navigation.Login) {
val id: LoginScreenArg = it.savedStateHandle.getArgs()
// Your composable code here
fun NavGraphBuilder.composable(
routeProvider: RouteProvider,
content: @Composable AnimatedContentScope.(NavBackStackEntry) -> Unit
) {
composable(
route = routeProvider.route,
arguments = routeProvider.arguments,
deepLinks = routeProvider.deeplink,
content = content
)
class LoginScreenArg(val id: String)
class BuySellScreenArg(val ppRefId: String,
val isModifyFlow: Boolean,
val orderId: String?)
inline fun <reified T> SavedStateHandle.getArgs(): T {
return when (T::class) {
LoginScreenArg::class -> {
LoginScreenArg(id = this.get<String>("id")!!) as T
sealed interface Navigation {
fun getRoute(): String
class Login(val id: String) : Navigation {
override fun getRoute(): String {
return route.replace("{id}", id)
}
companion object : RouteProvider {
override val route: String
interface LoginGraph {
@Route(
screenName = "LoginScreen",
route = "login/{id}",
deeplinks = [
"share.market://app/login/{id}",
"https://example.com/login/{id}"
]
)
fun getLoginRoute(
@Route(
screenName = "LoginScreen",
route = "login/{id}",
deeplinks = [
"share.market://app/login/{id}",
"https://example.com/login/{id}"
]
)
fun getLoginRoute(@Path("id") id: Int, @Query("isAdmin") isAdmin: Boolean = false)
@Route(
screenName = "BuySellScreen",
route = "orders/{pprefId}?isModifyFlow={isModifyFlow}&orderId={orderId}",
useRouteAsDefaultDeeplink = true
)
fun getBuySellRoute(
@Path("pprefId") id: String,
@Query("isModifyFlow") isModifyFlow: Boolean = false,
@Query("orderId") orderId: String? = null
)
@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.SOURCE)
annotation class Route(
val screenName: String,
val route: String,
val deeplinks: Array<String> = [],
val useRouteAsDefaultDeeplink: Boolean = false
)
@Composable
fun SampleNavHost() {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = Navigation.Login.route
) {
composable(route = "/ipo/{id}?isHomepage={isHomePage}",
arguments = listOf(
navArgument("id") {