aidanvii
05/19/2023, 8:15 AMimport androidx.compose.material.Text
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlin.time.Duration.Companion.seconds
fun main() = application {
Window(onCloseRequest = ::exitApplication) {
var counter: Int by remember { mutableStateOf(0) }
LaunchedEffect(Unit) {
while(isActive) {
delay(1.seconds)
counter++
}
}
Text(
text = remember(counter) {
counter.toString().also {
println("counter: $it")
}
},
)
}
}
Here’s a video to demonstrate what I mean. It will occasionally not update. org.jetbrains.compose
version is 1.4.0Joel Denke
05/19/2023, 8:19 AMaidanvii
05/19/2023, 8:20 AMJoel Denke
05/19/2023, 8:22 AMaidanvii
05/19/2023, 8:24 AMfun main() = application {
Window(onCloseRequest = ::exitApplication) {
var counter: Int by remember { mutableStateOf(0) }
LaunchedEffect(Unit) {
while (isActive) {
delay(1.seconds)
counter++
println(counter)
}
}
Text(
text = counter.toString(),
)
}
}
Joel Denke
05/19/2023, 8:26 AMaidanvii
05/19/2023, 8:33 AMJoel Denke
05/19/2023, 8:34 AMaidanvii
05/19/2023, 8:41 AMimport androidx.compose.material.Text
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.isActive
import kotlin.coroutines.coroutineContext
import kotlin.time.Duration.Companion.seconds
fun main() {
val counterViewModel = CounterViewModel()
application {
Window(onCloseRequest = ::exitApplication) {
val counter: String by counterViewModel.counter.collectAsState()
Text(text = counter)
}
}
}
class CounterViewModel {
val counter: StateFlow<String> = flow {
var counter = 0
while (coroutineContext.isActive) {
emit(counter.toString())
delay(1.seconds)
counter++
}
}.stateIn(
scope = GlobalScope,
started = SharingStarted.WhileSubscribed(
stopTimeoutMillis = 0,
replayExpirationMillis = 0
),
initialValue = "",
)
}
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.material.Text
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlin.time.Duration.Companion.seconds
fun main() = application {
Window(onCloseRequest = ::exitApplication) {
var counterAndColor: Pair<String, Color> by remember { mutableStateOf("0" to 0.toColor()) }
LaunchedEffect(Unit) {
while (isActive) {
delay(1.seconds)
counterAndColor = counterAndColor.run {
val next = (first.toInt() + 1)
next.toString() to next.toColor()
}
println(counterAndColor)
}
}
Box(modifier = Modifier.background(color = counterAndColor.second)) {
Text(text = counterAndColor.first)
}
}
}
fun Int.toColor(): Color = if (this % 2 == 0) Color.Green else Color.Red
Alexander Maryanovsky
05/19/2023, 10:44 AMaidanvii
05/19/2023, 10:44 AMAlexander Maryanovsky
05/19/2023, 10:46 AMaidanvii
05/19/2023, 10:46 AMAlexander Maryanovsky
05/19/2023, 10:47 AMaidanvii
05/19/2023, 10:54 AM