Jetpack Compose collectAsState对不同来源StateFlow返回值差异问题咨询
问题原因说明
两种场景下collectAsState()的返回值本身没有任何差异,表现不同完全是因为你使用了两种不同的变量赋值语法。
collectAsState()函数的固定返回类型为State<T>,和你收集的StateFlow是直接创建的还是通过stateIn从冷流转换而来的没有任何关联。- 第一种写法中你使用了Kotlin属性委托关键字
by,该语法会自动调用State<T>的getValue()方法,直接返回内部包裹的T类型实例,也就是你代码中的AuthToken对象,无需手动调用.value。 - 第二种写法中你使用了普通的等号
=赋值,没有添加委托关键字,所以拿到的就是collectAsState()原生返回的State<User>对象,必须手动调用.value才能获取到内部的User实例。
如果你想让第二种场景也直接拿到User实例,修改为by委托写法即可:
val user by profileViewModel.user.collectAsState() // 此时直接返回User类型实例
注:使用
by语法需要提前导入androidx.compose.runtime.getValue扩展,否则会编译报错。
内容的提问来源于stack exchange,提问作者alfietap
相关产品推荐
相关产品推荐

