You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Flow无法实时更新,ViewModel收集不到新值求助

问题解决:Flow仅初始化触发一次,后续更新无响应

核心问题

你的RealtimeListenerImpl没有被正确设置为单例。尽管模块标注了@InstallIn(SingletonComponent::class),但提供实例的@Provides方法缺少@Singleton注解,导致每次依赖注入都会创建一个新的RealtimeListenerImpl实例:

  • Firebase事件触发的是某个实例的updateUserData方法
  • ViewModel中注入的是另一个完全独立的实例,其内部的StateFlow自然不会收到更新

修复方案

在RealtimeListenerModule的bindingFunction方法上添加@Singleton注解,确保整个应用生命周期内只有一个RealtimeListenerImpl实例:

@Module
@InstallIn(SingletonComponent::class)
object RealtimeListenerModule {

    @Provides
    @Singleton // 新增此注解
    fun bindingFunction() : RealtimeListener{
        return RealtimeListenerImpl()
    }

}

额外验证点

  • 确认Firebase回调中调用的updateUserData方法,确实属于ViewModel注入的那个RealtimeListenerImpl实例(添加日志打印实例哈希值即可验证)
  • 确保User类正确实现了equals和hashCode方法:StateFlow默认会比较新旧值,若对象内容相同但引用不同,且未正确实现相等性判断,会跳过发射
  • ViewModel中的collect操作在viewModelScope下执行,只要ViewModel存活,协程就会保持活跃,无需额外处理生命周期

内容的提问来源于stack exchange,提问作者Damor vipul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:32:37