SharedFlow

52 阅读1分钟

我们经常会在ViewModel中使用StateFlowSharedFlow来创建数据流供UI层使用,大家对这两种数据流,都比较熟悉,我就不做详细的讲解,只是分享一个我在开发过程中遇到的一个问题。

我在ViewModel中创建了一个SharedFlow,在Compose UI层中使用collectAsState方法收集数据并更新UI。但是无论我数据层怎么发送数据,UI都无法正常更新。

出现bug的原因其实很简单,只是有些时候一叶障目,始终无法找到根本原因。最开始问AI的时候,它明确的说明了,sharedFlow 是无状态的,建议我使用StateFlow, 或者让我将SharedFlow的replay 参数设置为1,但是始终没有解开我内心的疑问,于是我一步一步的追问,得到的解释,都是SharedFlow 没有初始值,不保存状态,而且默认新订阅者只能收到订阅后的数据。我一直自以为是的认为我是先调用了collectAsState方法,然后再发送的数据,后来我把我的这个理解告诉AI,AI瞬间告诉了我原因,原来是我忽略了Compose 的重组,我的collectAsState是在UI中调用的,一旦重组,就相当于重新订阅,至此豁然开朗。

现在的AI助手真的太强大了,相当于在自己身边放了一个编程专家在身边,不仅有全面的知识库,还有强大的解决问题的能力。