#.Metro
🚇Метро: простая библиотека маршрутизации на Kotlin
//в Application
Metro.init(this)
Обратите внимание: станции поддерживают Activity, Service, Fragment
//Добавьте аннотацию в соответствующий класс
@Station("/main")
class MainActivity {}
MetroMap.addStation("/main", MainActivity::class.java)
//Переход к Activity
Metro.with(this)
.path("/main")
.put("currIndex", 1)
.go()
//Переход к Service
Metro.with(this)
.path("/main")
.serviceLauncher()
.go()
//Переход к Fragment
Metro.with(this)
.path("/main")
.fragmentLauncher()
.go()
Metro.with(this)
.path("/main")
.fail { error ->
Log.e("metro", error.toString())
}
.go()
//Добавление промежуточной станции (похоже на предварительную обработку запросов)
MetroMap.addTransferStation(object : Transfer {
override fun run(chain: Transfer.Chain): Ticket {
val ticket = chain.ticket()
Logger.d("Целевой маршрут = ${ticket.path}")
return chain.proceed(ticket)
}
})
//Авторизация пользователя
class UserAuthTransfer : Transfer {
override fun transfer(chain: Transfer.Chain): Ticket {
val ticket = chain.ticket()
if (needLogin(ticket.path)) {
ticket.clear()
ticket.path = "/account/login"
ticket.overridePendingTransition(R.anim.slide_in_from_bottom, R.anim.noting)
}
return chain.proceed(ticket)
}
}
``` private fun needLogin(path: String) = when {
path.isEmpty() -> false
//Добавление страниц, требующих проверки авторизации
path.startsWith("/main") -> true
else -> false
}
}
project/build.gradle
allprojects {
repositories {
......
maven { url "https://jitpack.io" }
}
}
конкретный модуль build.gradle, например app.gradle
Обратите внимание: по умолчанию используется библиотека версии kotlin1.3.60
//Plugin for Kapt, required!
apply plugin: 'kotlin-kapt'
//Generated route configuration classes are named with UUIDs. If you want to make the generated route configuration class specific to a module, add the following operation.
kapt {
arguments {
arg("metroModuleName", project.getName())
}
}
//Standard dependencies
dependencies {
//Only need to depend on the core library once in the base module
implementation 'com.github.caoyanglee.Metro:lib:{latestVersion}'
//In modules that require routing functionality, use annotation processors
kapt 'com.github.caoyanglee.Metro:compiler:{latestVersion}'
}
По умолчанию Metro.init(this)
автоматически сканирует все конфигурационные файлы маршрутов, что является затратной операцией. Мы рекомендуем выполнить следующие оптимизации:
Metro.init(
context = this,
autoLoadConfigClass = false //Не использовать автоматическую загрузку
)
//Указание конкретных конфигурационных файлов маршрута для быстрой загрузки
Metro.loadConfigClass("MetroRoute_xxx")
Примечание: Конфигурационные файлы маршрутов генерируются в директориях build/generated/source/kaptKotlin/debug
каждого модуля. Все конфигурационные классы находятся в пакете com.pmm.metro.route
, различаются только названия классов.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )