ProductPromotion
Logo

Kotlin

made by https://0x3d.site

GitHub - denisidoro/krouter: A lightweight Android activity router
A lightweight Android activity router. Contribute to denisidoro/krouter development by creating an account on GitHub.
Visit Site

GitHub - denisidoro/krouter: A lightweight Android activity router

GitHub - denisidoro/krouter: A lightweight Android activity router

Krouter

A lightweight Android activity router written in Kotlin.

crossroads

Basic usage

// anywhere in the app, preferably on application creation
val krouter = Krouter.from(context, hashMapOf(
    "user/:id/likes" to UserLikesActivity::class.java
))

// anywhere that can access the val above
krouter.start("user/42/likes") // this will start UserLikesActivity

// inside UserLikesActivity, possibly inside onCreate()
val id: Int = intent.getIntExtra("id", 0) // 42

Adding more extras

In order to add more extras to the intent, one can do the following:

krouter.getRouter("user/42/likes")!!
    .withIntent { it.putExtra("name", "John") }
    .start()

Starting for result

In order to set a request code:

krouter.getRouter("user/42/likes")!!
    .startForResult(activity, 123) // 123 is the request code

Advanced routing configuration

It is possible to instantiate Krouter establishing a regular expression that the parameter must specify:

val krouter = Krouter(context, hashMapOf(
    Route("user/:id/likes", hashMapOf(
        "id" to Schema("^[0-9]{2}$")
    )) to UserLikesActivity::class.java
)

There are default implementations for integer, float, double, long, char:

// the constants must be statically imported from Schema.Type
Route("user/:id/likes", hashMapOf("id" to Schema(INT)))
Route("my/balance/:value", hashMapOf("value" to Schema(FLOAT)))

If no schema is defined, Krouter will try to infer the type accordingly. If no schema is suitable, the param will be coerced to a String.

Interceptor

You can add some interceptors to Krouter:

// If you are not logged in, go to login
krouter.addInterceptor(object : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Router? {

        val route = chain.request()
        if(route?.url == "user/:id" && !login) {
            val target = chain.proceed(route)
            val router = krouter.getRouter("login")
            router?.intent?.putExtra("nav", target?.url)
            router?.update()
            return router
        }
        return chain.proceed(route)
    }

})

Installation

Add the dependency:

dependencies {
    compile 'com.github.denisidoro.github:krouter:0.0.2'
}

Best practices

  • Use dependency injection: Krouter was idealized to be used in conjunction with Dagger.
  • Compose routers: say you have an activity flow in your app that's only accessible to users who are admin, for instance. If you don't want to deal with a huge routing map that has routes all flows, then create multiple Krouter instances. val globalKrouter and @AdminScope val adminKrouter, for example.

More Resources
to explore the angular.

mail [email protected] to add your project or resources here 🔥.

Related Articles
to learn about angular.

FAQ's
to learn more about Angular JS.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory