I've got this code for debugging purposes - trying to figure out where the state is set. Maybe I should take a look at some state machine libraries at some point.
Copy code
kotlin
var currentState: CurrentState = CurrentState.MainPage
set(value) {
val stackTraceElement = Throwable().stackTrace
Log.d(TAG, "Setting currentState to $currentState from ${stackTraceElement[2].fileName}:${stackTraceElement[2].lineNumber} - ${stackTraceElement[2].methodName}")
field = value
}
I'm getting one call which sets it to state A, but when I retrieve the value in another function later, it tells me it's in state B, without a log line showing it ever set it to state B. What?
r
Riccardo Lippolis
08/01/2023, 2:16 PM
You're logging
$currentState
which is the existing value before setting it to the new value, so you should probably be logging
$value
instead
r
reactormonk
08/01/2023, 2:17 PM
🤦
reactormonk
08/01/2023, 2:20 PM
Thanks, that was it.
👍 1
k
Klitos Kyriacou
08/01/2023, 3:02 PM
An alternative way is to use `Delegates.observable`:
Copy code
var currentState: CurrentState by Delegates.observable(CurrentState.MainPage) { _, _, new ->
val stackTraceElement = (Throwable().stackTrace)[2]
Log.d(TAG, "Setting currentState to $new from ${stackTraceElement.fileName}:${stackTraceElement.lineNumber} - ${stackTraceElement.methodName}")
}