Files
zz_app/books/src/commonMain/kotlin/net/keinekekse/app/App.kt
T

94 lines
3.2 KiB
Kotlin

package net.keinekekse.app
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.safeContentPadding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import io.github.oshai.kotlinlogging.KotlinLogging
import io.ktor.client.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import net.keinekekse.app.books.generated.resources.Res
import net.keinekekse.app.books.generated.resources.compose_multiplatform
import org.jetbrains.compose.resources.painterResource
import org.koin.compose.koinInject
import org.koin.core.annotation.Single
private val logger = KotlinLogging.logger {}
@Composable
@Preview
fun App() {
MaterialTheme {
/*
eigenes Theme -> https://material-foundation.github.io/material-theme-builder/
den Download in den source code übernehmen (in Theme.kt sind Anpassungen nötig)
per default hat die generierte Klasse den Namen AppTheme.
// AppTheme {
*/
val test = koinInject<TestAuth>()
var showContent by remember { mutableStateOf(false) }
Column(
modifier = Modifier
.background(MaterialTheme.colorScheme.primaryContainer)
.safeContentPadding()
.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Button(onClick = { showContent = !showContent }) {
Text("Click me!")
}
Button(onClick = {
CoroutineScope(Dispatchers.Default).launch {
logger.debug { "requesting '/test'" }
test.request("/test")
}
}) {
Text("Test Token Refresh")
}
AnimatedVisibility(showContent) {
val greeting = remember { Greeting().greet() }
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Image(painterResource(Res.drawable.compose_multiplatform), null)
Text("Compose: $greeting")
}
}
}
}
}
@Single
class TestAuth(val httpClient: HttpClient) {
private val srv = "https://kas.keinekekse.net/"
suspend fun request(url: String) {
logger.debug { "connecting" }
// val response = httpClient.get(srv + "testdb/books")
// val books: List<Book> = response.body()
val response = httpClient.get(srv + url + "testdb/books")
val body = response.bodyAsText()
logger.debug { "call to $url" }
logger.debug { response.status }
logger.debug { body }
}
}