Kotlin 中是否可以为 mutableStateOf() 提供自定义设置器

Ama*_*mal 4 android kotlin android-jetpack-compose

我想在每次设置某个状态后两秒进行一些操作。

viewModel 内的代码:

var isLoading = mutableStateOf(LoadingState.NONE)
    set(value) {
        Timber.d("Custom Setter") //Not Firing

        //Do something when the state is set to success.
        if(value.value == LoadingState.SUCCESS){
            viewModelScope.launch {
                delay(2000L)
                dispatchEvent(//some event)
            }
        }
        field = value
    }
Run Code Online (Sandbox Code Playgroud)

set{} 块根本没有运行。但该值设置正确。

当使用带有by关键字的委托时,

Delegated property cannot have accessors with non-default implementations

有没有办法让自定义设置器适用于 Jetpack Compose 中的 mutableStateOf()?

Arp*_*kla 7

我认为您可以将snapshotFlow用于此用例。Flow它根据给定的 compose创建State.

var isLoading by mutableStateOf(LoadingState.NONE)
    private set

init {
    viewModelScope.launch {
        snapshotFlow { isLoading }
            .collect { 
                if(it == LoadingState.SUCCESS) {
                    delay(2000L)
                    dispatchEvent(//some event)
                }
            }
    }
}

Run Code Online (Sandbox Code Playgroud)