Introduce Voyager lib and configure basic Navigation.

- Voyager is a navigation library that allows us to navigate between Composable screens.
- I created basic LicenseScreen and HomeScreen.
This commit is contained in:
Severiano Jaramillo 2024-03-05 22:51:16 -06:00
parent 888d29e436
commit ce79a8fc4d
7 changed files with 67 additions and 42 deletions

View file

@ -36,12 +36,13 @@ kotlin {
implementation(libs.androidx.activity.compose) implementation(libs.androidx.activity.compose)
} }
commonMain.dependencies { commonMain.dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.ui)
implementation(compose.components.resources) implementation(compose.components.resources)
implementation(compose.components.uiToolingPreview) implementation(compose.components.uiToolingPreview)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.runtime)
implementation(compose.ui)
implementation(libs.voyager.navigator)
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.1") implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.1")
} }
desktopMain.dependencies { desktopMain.dependencies {

View file

@ -1,24 +1,17 @@
package net.agorise.kee package net.agorise.kee
import App
import android.os.Bundle import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.compose.runtime.Composable import cafe.adriel.voyager.navigator.Navigator
import androidx.compose.ui.tooling.preview.Preview import net.agorise.kee.ui.screen.license.LicenseScreen
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContent { setContent {
App() Navigator(LicenseScreen())
} }
} }
} }
@Preview
@Composable
fun AppAndroidPreview() {
App()
}

View file

@ -0,0 +1,13 @@
package net.agorise.kee.ui.screen.home
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import cafe.adriel.voyager.core.screen.Screen
class HomeScreen : Screen {
@Composable
override fun Content() {
Text("Welcome to Home Screen")
}
}

View file

@ -0,0 +1,37 @@
package net.agorise.kee.ui.screen.license
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow
import net.agorise.kee.ui.screen.home.HomeScreen
import org.jetbrains.compose.ui.tooling.preview.Preview
class LicenseScreen : Screen {
@Composable
override fun Content() {
HomeScreenContent()
}
}
@Composable
fun HomeScreenContent() {
val navigator = LocalNavigator.currentOrThrow
Column {
Text("Welcome to License Screen")
Button(onClick = { navigator.replace(HomeScreen()) }) {
Text("Accept")
}
}
}
@Preview
@Composable
fun HomeScreenContentPreview() {
HomeScreenContent()
}

View file

@ -1,13 +1,13 @@
package net.agorise.kee package net.agorise.kee
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Window import androidx.compose.ui.window.Window
import androidx.compose.ui.window.WindowPosition import androidx.compose.ui.window.WindowPosition
import androidx.compose.ui.window.application import androidx.compose.ui.window.application
import androidx.compose.ui.window.rememberWindowState import androidx.compose.ui.window.rememberWindowState
import org.jetbrains.compose.ui.tooling.preview.Preview import cafe.adriel.voyager.navigator.Navigator
import net.agorise.kee.ui.screen.license.LicenseScreen
fun main() = application { fun main() = application {
val state = rememberWindowState( val state = rememberWindowState(
@ -15,12 +15,6 @@ fun main() = application {
position = WindowPosition(300.dp, 300.dp) position = WindowPosition(300.dp, 300.dp)
) )
Window(title = "Kee", onCloseRequest = ::exitApplication, state = state) { Window(title = "Kee", onCloseRequest = ::exitApplication, state = state) {
App() Navigator(LicenseScreen())
} }
} }
@Preview
@Composable
fun AppAndroidPreview() {
App()
}

View file

@ -1,4 +1,5 @@
import androidx.compose.ui.window.ComposeUIViewController import androidx.compose.ui.window.ComposeUIViewController
import net.agorise.kee.App import cafe.adriel.voyager.navigator.Navigator
import net.agorise.kee.ui.screen.license.LicenseScreen
fun MainViewController() = ComposeUIViewController { App() } fun MainViewController() = ComposeUIViewController { Navigator(LicenseScreen()) }

View file

@ -4,33 +4,19 @@ android-compileSdk = "34"
android-minSdk = "24" android-minSdk = "24"
android-targetSdk = "34" android-targetSdk = "34"
androidx-activityCompose = "1.8.2" androidx-activityCompose = "1.8.2"
androidx-appcompat = "1.6.1"
androidx-constraintlayout = "2.1.4"
androidx-core-ktx = "1.12.0"
androidx-espresso-core = "3.5.1"
androidx-material = "1.11.0"
androidx-test-junit = "1.1.5"
compose = "1.6.2" compose = "1.6.2"
compose-plugin = "1.6.0" compose-plugin = "1.6.0"
junit = "4.13.2"
kotlin = "1.9.22" kotlin = "1.9.22"
voyager = "1.0.0"
[libraries] [libraries]
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core-ktx" }
androidx-test-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-junit" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "androidx-espresso-core" }
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "androidx-appcompat" }
androidx-material = { group = "com.google.android.material", name = "material", version.ref = "androidx-material" }
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "androidx-constraintlayout" }
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" }
compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" } compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" }
compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" } compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" }
voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" }
[plugins] [plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" } androidApplication = { id = "com.android.application", version.ref = "agp" }
androidLibrary = { id = "com.android.library", version.ref = "agp" } androidLibrary = { id = "com.android.library", version.ref = "agp" }
jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" } jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" }
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }