¿Cómo llamar correctamente a FirebaseFirestore.instance.clearPersistence () en Flutter?

Sep 16 2020

Estoy enfrentando el mismo problema que la pregunta de este chico

Pero su respuesta aceptada no me ayudó.

El problema:

Cuando un usuario cierra la sesión y otro usuario diferente inicia sesión, todos los datos que se muestran en mi aplicación son del usuario que había cerrado sesión anteriormente debido al sistema de almacenamiento en caché de Firebase. Busqué sobre este tema y encontré una solución que consiste en llamar a este método:

FirebaseFirestore.instance.clearPersistence();

Pero cada vez y en todas partes coloco esta línea de código, lanza una excepción que dice que no puedo llamar a este método cuando el cliente se está ejecutando:

Una excepción ha ocurrido. PlatformException (PlatformException (fail-precondition, Operation fue rechazada porque el sistema no se encuentra en un estado requerido para la ejecución de la operación. Si realiza una consulta, asegúrese de que se haya indexado a través de Firebase console., {Code: failed-precondition, message: Se rechazó la operación porque el sistema no se encuentra en un estado requerido para la ejecución de la operación. Si realiza una consulta, asegúrese de que se haya indexado a través de Firebase console., NativeErrorMessage: la persistencia no se puede borrar mientras el cliente se está ejecutando., NativeErrorCode: 9} ))

entonces, ¿cómo llamar a este método? o mejor, ¿existe la mejor manera de solucionar este problema?

Respuestas

3 DougStevenson Sep 17 2020 at 03:54

Debe llamarlo inmediatamente después de inicializar Firebase y antes de realizar la primera consulta.

Dpedrinha Oct 15 2020 at 21:38

Parece necesario dar por terminado el FirebaseFirestore.instanceprimero.

Al final de mi método de cierre de sesión, llamo:

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

No recibo errores y todo parece estar funcionando como debería ahora.

MuhammadShafique Jan 05 2021 at 07:41

agregue esto a su botón de inicio de sesión 'onPressed':

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