我在Typescript Cloud Functions上使用set
方法。显然,如果文档存在,我们将update
文档。在Flutter中,如果Firestore上的文档与我推送到Firestore的文档相同,则不会触发StreamBuilder方法。当更新前后的文档相同时。
这是因为Firestore update
方法在更新前后的文档相同时不返回任何内容吗?或者是因为Flutter中的StreamBuilder不是出于同样的原因触发的?
如何解决这个问题,即当我在Firestore上使用了updated
方法,而我更新的文档没有任何更改时,我如何在Flutter中触发StreamBuilder?
- 我不想使用
delete
方法,如果文档存在,然后创建触发StreamBuilder的文档,因为这将触发StreamBuilder两次,不是一个好方法。
1条答案
按热度按时间7bsow1i61#
当您在Firestore中使用
update
方法时,它仅在您提供的数据与现有文档不同时执行更新操作。如果数据是相同的,Firestore认为这是一个幂等操作,这意味着它不会对文档进行任何更改。因此,Flutter应用中的
StreamBuilder
不会收到任何更新,因为当文档没有实际更改时,Firestore不会触发更改事件。要解决此问题并确保即使在更新后文档相同时也会触发
StreamBuilder
,您可以考虑set
和merge
选项的组合。使用set with merge:true,则即使文档没有更改,也可以触发
StreamBuilder
。set
操作实际上将执行merge
操作并触发Firestore中的更新事件,然后Flutter应用程序中的StreamBuilder
将接收该事件。