Come chiamare correttamente FirebaseFirestore.instance.clearPersistence () in Flutter?

Sep 16 2020

Sto affrontando lo stesso problema di questa domanda del ragazzo

Ma la sua risposta accettata non mi ha aiutato.

Il problema:

Quando un utente si disconnette e un altro utente diverso accede, tutti i dati mostrati sulla mia app provengono dal precedente utente disconnesso a causa del sistema di memorizzazione nella cache Firebase. Ho cercato su questo problema e ho trovato una soluzione che consiste nel chiamare questo metodo:

FirebaseFirestore.instance.clearPersistence();

Ma ogni volta e ovunque inserisco questa riga di codice, genera un'eccezione che dice che non posso chiamare questo metodo quando il client è in esecuzione:

Si è verificata un'eccezione. PlatformException (PlatformException (failed-precondition, Operation wasused because the system non is in a state required for the operation's execution. Se esegui una query, assicurati che sia stata indicizzata tramite la console Firebase., {Code: failed-precondition, message: L'operazione è stata rifiutata perché il sistema non è in uno stato richiesto per l'esecuzione dell'operazione. Se si esegue una query, assicurarsi che sia stata indicizzata tramite la console Firebase., NativeErrorMessage: la persistenza non può essere cancellata mentre il client è in esecuzione., NativeErrorCode: 9} ))

quindi, come chiamare questo metodo? o meglio, c'è un modo migliore per risolvere questo problema?

Risposte

3 DougStevenson Sep 17 2020 at 03:54

Dovresti chiamarlo immediatamente dopo aver inizializzato Firebase e prima di effettuare la prima query.

Dpedrinha Oct 15 2020 at 21:38

Sembra sia necessario terminare il FirebaseFirestore.instanceprimo.

Alla fine del mio metodo di disconnessione chiamo:

await FirebaseFirestore.instance.terminate();
await FirebaseFirestore.instance.clearPersistance();

Non ricevo errori e tutto sembra funzionare come dovrebbe ora.

MuhammadShafique Jan 05 2021 at 07:41

aggiungilo al tuo pulsante di accesso "onPressed":

FirebaseFirestore.instance.terminate();
                FirebaseFirestore.instance
                    .clearPersistence()
                    .then((value) => signinUser(email, password, context));