-
-
Save levinzonr/2acc21de9050da35d2929112310fc7b5 to your computer and use it in GitHub Desktop.
Safe Routing generated files example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Routes.kt | |
object Routes { | |
/** | |
* A description of the "home" route, including its full path and an navArgs | |
*/ | |
val Home: RouteSpec<Unit> = object : RouteSpec<Unit> { | |
override val route: String = "home" | |
override val argsFactory: RouteArgsFactory<Unit> = EmptyArgsFactory | |
override val navArgs: List<NamedNavArgument> = listOf() | |
} | |
/** | |
* A description of the "details" route, including its full path and an navArgs | |
*/ | |
val Details: RouteSpec<DetailsRouteArgs> = object : RouteSpec<DetailsRouteArgs> { | |
override val route: String = "details/{id}?number={number}" | |
override val argsFactory: RouteArgsFactory<DetailsRouteArgs> = DetailsRouteArgsFactory | |
override val navArgs: List<NamedNavArgument> = DetailsRouteArgs.navArgs | |
} | |
} | |
/** | |
* This object contains helpers to build actions used to navigate to different routes based on | |
* @Route annotations | |
*/ | |
object RoutesActions { | |
/** | |
* Builds an action to "home" route | |
*/ | |
fun toHome(): String = "home" | |
/**x | |
* Builds an action to "details" route | |
*/ | |
fun toDetails(id: String): String = "details/$id" | |
fun toDetails(id: String, number: Int = 1): String = "details/$id?number=$number" | |
} | |
/** | |
* An Arguments holder for the "details" route | |
*/ | |
data class DetailsRouteArgs( | |
val id: String, | |
val number: Int | |
) { | |
companion object { | |
/** | |
* NamedNavArgs representation for DetailsRouteArgs | |
*/ | |
val navArgs: List<NamedNavArgument> = listOf( | |
navArgument("id") { | |
type = NavType.StringType | |
nullable = false | |
}, | |
navArgument("number") { | |
type = NavType.IntType | |
nullable = false | |
defaultValue = 1 | |
}, | |
) | |
} | |
} | |
object DetailsRouteArgsFactory : RouteArgsFactory<DetailsRouteArgs> { | |
/** | |
* A Helper function to obtain an instance of DetailsRouteArgs from Bundle | |
*/ | |
override fun fromBundle(bundle: Bundle?): DetailsRouteArgs { | |
val id = requireNotNull(bundle?.getString("id")) | |
val number = requireNotNull(bundle?.getInt("number")) | |
return DetailsRouteArgs(id, number) | |
} | |
/** | |
* A Helper function to obtain an instance of DetailsRouteArgs from SavedStateHandle | |
*/ | |
override fun fromSavedStateHandle(handle: SavedStateHandle?): DetailsRouteArgs { | |
val id = requireNotNull(handle?.get<String>("id")) | |
val number = requireNotNull(handle?.get<Int>("number")) | |
return DetailsRouteArgs(id, number) | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment