firebase / firebase/FirebaseUI-Flutter

🐛 FirestoreListView renders (incomplete) local cache before remote db result

Aperta
#238 13 commenti 5 reazioni 1 assegnatario Assegnata a @russellwheatley Vedi su GitHub
bug firestore Keep Open Needs Attention
Lingua principale
Dart
Stelle
151
Fork
141
Merge medio
2g 10h
PR unite (30g)
3

Descrizione

### Is there an existing issue for this?

- [X] I have searched the existing issues and found no duplicates.

### What plugin is this bug for?

Firebase UI Firestore

### What platform(s) does this bug affect?

Web

### List of dependencies used.

flutter pub deps -s list

```
Our dependency list is very long, and contains private packages, therefore I only include the relevant firebase packages here:

- firebase_core 2.21.0
- firebase_core_platform_interface ^5.0.0
- firebase_core_web ^2.8.1
- flutter any
- meta ^1.8.0
- firebase_auth 4.12.1
- firebase_auth_platform_interface ^7.0.3
- firebase_auth_web ^5.8.6
- firebase_core ^2.21.0
- firebase_core_platform_interface ^5.0.0
- flutter any
- meta ^1.8.0
- firebase_messaging 14.7.3
- firebase_core ^2.21.0
- firebase_core_platform_interface ^5.0.0
- firebase_messaging_platform_interface ^4.5.12
- firebase_messaging_web ^3.5.12
- flutter any
- meta ^1.8.0
- firebase_crashlytics 3.4.3
- firebase_core ^2.21.0
- firebase_core_platform_interface ^5.0.0
- firebase_crashlytics_platform_interface ^3.6.11
- flutter any
- stack_trace ^1.10.0
- cloud_firestore 4.12.2
- cloud_firestore_platform_interface ^6.0.3
- cloud_firestore_web ^3.8.3
- collection ^1.0.0
- firebase_core ^2.21.0
- firebase_core_platform_interface ^5.0.0
- flutter any
- meta ^1.8.0
- firebase_ui_firestore ^1.5.7
```

### Steps to reproduce

- Do *not* enable Persistance on Web (default is -- as far as I know -- a small memory cache)
- Have `.snapshots()`-Stream on a single firestore document (lets call it _docA_ ); Render this document e.g. with a StreamBuilder.
- Next to that use the `FirestoreListView` to render a list of documents (including _docA_ ). The database should contain enough documents, to allow for multiple pages.
- Scroll down the `FirestoreListView` to trigger the "fetch more" functionality.
- Now the FirestoreListView will render a list only containing _docA_ for a very short amount of time and then render the full list. This results in the scroll position beeing lost and the whole list apparently jumping to the top.

### Expected Behavior

I would expect the List not jumping. And thereby, as far as I understood the bug, I would expect the list not rendering a single cached item inbetween list fetches. I would also be fine with disabling any caching behavior on web, if there's a way to do that.

### Actual Behavior

_(see steps to reproduce)_

### Additional Information

I briefly looked into the `FirestoreListView` code (`packages/firebase_ui_firestore/lib/src/query_builder.dart`) . If I'm not mistaken, the problems lies in the `query.snapshots().listen()`-Callback in lines 176 et seq. Here any data is "rendered", as long as its smaller then `expectedDocsCount`, which of course includes the one item eagerly returned by the cache.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.