在处理一个项目时,我们需要在视图模型中包含项目列表。该类型是自定义数据类。
到目前为止,我一直使用 aMutableLiveData来存储列表的状态。当用户扫描我们已连接到设备的 RFID 读取器上的物品时,该列表将会更新。扫描时,将从服务器获取项目,并且列表将相应更新。
我想尝试继续使用 aStateFlow来代替,但我在这里遇到了问题。
当扫描新项目时,我将使用该add命令更新可变列表,然后更新列表中的相应项目。这不会触发LiveData或StateFlow观察者/收集器 - 但LiveData我可以在完成更新后将列表分配给自身。( _listOfItems.value = _listOfItems.value) 因为这会通知观察者。
然而,这不起作用StateFlow,因为它仅在引用更改时触发(它不会,因为它是相同的列表,只是其中包含新的/更改的项目)。
我知道使用可变列表和协程更新同一列表可能存在一些问题,因为如果尝试同时更新列表或类似的情况可能会发生冲突。
因此,通常的问题是:当视图模型中有一个列表并在列表内容发生变化时更新 UI 时,最好的方法是什么?