kotlin 为什么不记得将StateFlow转换为特定类型?

aiqt4smr  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(108)

我在Jetpack compose上过这样的课:

class MainActivity : ComponentActivity(){

    private var viewModel: MAViewModel = MAViewModel()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            AplicacionCiudadesTheme {
                val navController = rememberNavController()
                NavHost(navController = navController, startDestination = "splash") {
                    composable("splash") {
                        SplashScreen(navController)
                    }
                    composable("main") {
                        val fichasState = viewModel.fichas.collectAsState()
                        val listaFichas = remember {
                            fichasState
                        }
                       * MainScreen(listaFichas)*
                    }
                }
            }
        }
    }
}

类MAViewModel:

class MAViewModel : ViewModel() {
    private val _fichas = MutableStateFlow<List<FichaX>>(emptyList())
    val fichas: StateFlow<List<FichaX>> get() = _fichas

    init {
        listarFichas()
        Log.i("Info", "$_fichas")
    }

    private fun listarFichas() {
        viewModelScope.launch {
            val fichasService = fichasRepo.listFichas(
                Resources.idCategoriaPadre,
                Resources.idIdioma,
                Resources.idProyecto
            )
            _fichas.value = fichasService.fichas
        }
    }
}

当我调用MainScreen时,listaFichas显示此错误:

type mismatch
require: List<FichaX>
found: State<List<FichaX>>

MainScreen是一个接收FichaX类型的objetc列表的类,请记住不能正常工作

u7up0aaq

u7up0aaq1#

您必须使用listaFichas.value
如果你想在没有.value的情况下使用listaFichas,你必须像这样声明你的记忆:

val listaFichas by remember {
    fichasState
}

相关问题