feat(cloud_firestore): Firestore query snapshot with changes only #11539
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
The current querySnapsot returns the list of all documents that match the query every time that a change occurs. For streams that return a large number of documents this an be an issue, as well as inefficient.
For instance, our use case requires us to keep a local cache of all documents returned by a query. When a single document is updated, querySnapshot will send a list all documents matching the query along with a list of the documents that were changed. All we need is that list of changes to update our local cache.
Since we have such a large number of documents in our streams, the querySnapshot was leading to issues with the method channels. We were getting ANR, and crashes while trying to pass data from the java to dart. This change has completely fixed these issues for us.
Changes were based on existing querySnapshot, to be backward compatible a new querySnapshotChanges was created that just removed the "docs".
I did not add any tests at this time. I can't seem to get the tests to run, even on a clean master branch. "melos run test:e2e:cloud_firestore" says, "Running", then "Installing" but then gets stuck on next step for 12 minutes and times out.
Has been in our custom flutterfire production library for over 2 months.
Checklist
Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes (
[x]
).This will ensure a smooth and quick review process. Updating the
pubspec.yaml
and changelogs is not required.///
).melos run analyze
) does not report any problems on my PR.Breaking Change
Does your PR require plugin users to manually update their apps to accommodate your change?