Skip to content

Commit 4fd1ab3

Browse files
committed
Solivagant
1 parent 63101f2 commit 4fd1ab3

File tree

3 files changed

+97
-4
lines changed

3 files changed

+97
-4
lines changed

.idea/kotlinc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build.gradle.kts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
22

33
plugins {
44
kotlin("jvm") version "1.9.23"
5+
id("org.jetbrains.compose") version "1.6.10-beta02"
56
}
67

78
group = "com.hoc.kotlin_playground"
@@ -26,12 +27,21 @@ dependencies {
2627
testImplementation(kotlin("test"))
2728

2829
implementation("io.github.hoc081098:FlowExt:0.8.0")
29-
implementation("io.github.hoc081098:kmp-viewmodel:0.7.1")
30+
val kmpViewModel = "0.7.1"
31+
implementation("io.github.hoc081098:kmp-viewmodel:$kmpViewModel")
32+
implementation("io.github.hoc081098:kmp-viewmodel-savedstate:$kmpViewModel")
33+
implementation("io.github.hoc081098:kmp-viewmodel-compose:$kmpViewModel")
3034
implementation("io.github.hoc081098:channel-event-bus:0.0.2")
3135
implementation("io.github.hoc081098:solivagant-navigation:0.3.0")
36+
implementation(compose.runtime)
37+
implementation(compose.foundation)
38+
implementation(compose.material3)
39+
implementation(compose.materialIconsExtended)
40+
implementation(compose.desktop.currentOs)
3241

33-
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")
34-
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.8.0")
42+
val coroutines = "1.8.0"
43+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines")
44+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:$coroutines")
3545
implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7")
3646

3747
implementation("io.reactivex.rxjava3:rxjava:3.1.8")
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.hoc081098.kotlin_playground.solivagant
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.layout.Box
5+
import androidx.compose.material3.Button
6+
import androidx.compose.material3.Text
7+
import androidx.compose.runtime.Composable
8+
import androidx.compose.runtime.Immutable
9+
import androidx.compose.runtime.remember
10+
import androidx.compose.ui.Alignment
11+
import androidx.compose.ui.graphics.Color
12+
import androidx.compose.ui.window.Window
13+
import androidx.compose.ui.window.application
14+
import com.hoc081098.solivagant.lifecycle.LocalLifecycleOwner
15+
import com.hoc081098.solivagant.navigation.ClearOnDispose
16+
import com.hoc081098.solivagant.navigation.NavEventNavigator
17+
import com.hoc081098.solivagant.navigation.NavHost
18+
import com.hoc081098.solivagant.navigation.NavRoot
19+
import com.hoc081098.solivagant.navigation.NavRoute
20+
import com.hoc081098.solivagant.navigation.ProvideCompositionLocals
21+
import com.hoc081098.solivagant.navigation.SavedStateSupport
22+
import com.hoc081098.solivagant.navigation.ScreenDestination
23+
import com.hoc081098.solivagant.navigation.rememberWindowLifecycleOwner
24+
import kotlinx.collections.immutable.persistentSetOf
25+
26+
fun main() {
27+
val savedStateSupport = SavedStateSupport()
28+
29+
application {
30+
savedStateSupport.ClearOnDispose()
31+
Window(
32+
onCloseRequest = ::exitApplication,
33+
title = "Solivagant",
34+
) {
35+
val lifecycleOwner = checkNotNull(rememberWindowLifecycleOwner()) { "rememberWindowLifecycleOwner returns null" }
36+
savedStateSupport.ProvideCompositionLocals(LocalLifecycleOwner provides lifecycleOwner) { MyApp() }
37+
}
38+
}
39+
}
40+
41+
val Navigator by lazy(LazyThreadSafetyMode.NONE) { NavEventNavigator() }
42+
43+
@Composable
44+
fun MyApp() =
45+
NavHost(
46+
startRoute = FirstRoute,
47+
destinations = remember {
48+
persistentSetOf(
49+
FirstRouteDestination,
50+
SecondRouteDestination,
51+
)
52+
},
53+
navEventNavigator = Navigator,
54+
)
55+
56+
@Immutable
57+
data object FirstRoute : NavRoot
58+
59+
val FirstRouteDestination = ScreenDestination<FirstRoute> { _, modifier ->
60+
Box(
61+
modifier = modifier.background(Color.Red.copy(alpha = 0.2f)),
62+
contentAlignment = Alignment.Center,
63+
) {
64+
Button(onClick = { Navigator.navigateTo(SecondRoute) }) {
65+
Text("Go to second route")
66+
}
67+
}
68+
}
69+
70+
71+
@Immutable
72+
data object SecondRoute : NavRoute
73+
74+
val SecondRouteDestination = ScreenDestination<SecondRoute> { _, modifier ->
75+
Box(
76+
modifier = modifier.background(Color.Green.copy(alpha = 0.2f)),
77+
contentAlignment = Alignment.Center,
78+
) {
79+
Button(onClick = Navigator::navigateBack) {
80+
Text("Back to first route")
81+
}
82+
}
83+
}

0 commit comments

Comments
 (0)