将ViewModel逻辑提取到单独的文件

问题描述 投票:0回答:1

如果您在ViewModel中有代码需要检查ViewModel的状态流并需要对其进行更新,并且您想将此代码提取到单独的类中,因为它已经太多代码,那么最清洁的当前方法是什么?因为不建议揭露mutableStateFlow,因此仅将状态流传递到新类,因此如何处理?
// File: MyViewModel.kt
package com.example.viewmodel

import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow

@HiltViewModel    
class MyViewModel : ViewModel() {
    private val _state = MutableStateFlow(STATE.INITIAL)
    val state = _state.asStateFlow()

    // TODO: How to extract this into separate file/class/object
    fun doSomething() {
        if(state == STATE.INITIAL) {
            startConnection() {
               // on error:
               _state.value = STATE.ERROR
            }
            _state.value = STATE.CONNECTING
        }
    }
}
android kotlin android-viewmodel
1个回答
0
投票

在您的ViewModel类中,您需要在伴侣对象中创建工厂,然后从其他类中调用工厂。
companion object {
    val Factory: ViewModelProvider.Factory = viewModelFactory{
        initializer{
            val viewModel = MyViewModel()
            viewModel
            }
        }
    }

然后使用另一个类别的工厂

val vmVal: MyViewModel by viewModels{MyViewModel.Factory}
val vmValState = vmVal.state.value

文档中有更多的内容Android.com

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.