Djaka Pradana Jaya Priambudi
10/05/2022, 12:47 PM@Composable
fun foo(): Int {
var counter by mutableStateOf(0)
LaunchedEffect(Unit) {
while (true) {
delay(500)
counter++
println("Foo: $counter")
}
}
return counter
}
@Composable
fun bar() {
val foo = foo()
LaunchedEffect(Unit) {
while (true) {
delay(500)
println("Bar: $foo")
}
}
}
Output in thread, but the the second composable will always returns: "Bar: 0"Foo: 1
Bar: 0
Foo: 2
Bar: 0
Foo: 3
Bar: 0
Foo: 4
Bar: 0
Foo: 5
Bar: 0
Foo: 6
Bar: 0
Benoit Quenaudon
10/05/2022, 1:12 PMLaunchedEffect
var counter by mutableStateOf(0)
=>
var counter by remember { mutableStateOf(0) }
Djaka Pradana Jaya Priambudi
10/05/2022, 1:17 PMOleksandr Balan
10/05/2022, 1:18 PMState<Int>
from the foo()
method?
Also I would change bar()
method a bit 🤔
@Composable
fun foo(): State<Int> {
val counter = remember { mutableStateOf(0) }
LaunchedEffect(Unit) {
while (true) {
delay(500)
counter.value++
println("Foo: ${counter.value}")
}
}
return counter
}
@Composable
fun bar() {
val foo = foo()
LaunchedEffect(foo) {
println("Bar: $foo")
}
}
Djaka Pradana Jaya Priambudi
10/05/2022, 1:24 PMevent.submit
it's running a long running operation. It using couponState
value which in the long running operation logic.
However if I I put that in the key, there's a change that the submit
coroutines is canceled because the LaunchedEffect is restarted
@Composable
fun couponStatePresenter(event: Flow<Event>) {
...
}
@Composable
override fun present(event: Flow<Event>): UIState {
...
val couponState = couponStatePresenter(couponEvent)
var submitResult: UIState.SubmitResult by remember { mutableStateOf(UIState.SubmitResult.Idle) }
LaunchedEffect(Unit) {
event.collect {
when (it) {
is Event.Submit -> {
submitResult = UIState.SubmitResult.Submitting
if (!it.forceSubmit) {
if (couponState.isValidationFailed) {
submitResult = UIState.SubmitResult.RequireUserActionDialog(
"Invalid Coupon",
"Your coupon is invalid, do you want to clear and continue the booking?",
actionPrimary = "YES"
)
return@collect
}
}
delay(2000) // Pretend API Call
submitResult = UIState.SubmitResult.Success
}
...
}
}
}
...
}
Benoit Quenaudon
10/05/2022, 1:59 PMDjaka Pradana Jaya Priambudi
10/06/2022, 4:49 AM