Como chamar corretamente FirebaseFirestore.instance.clearPersistence () no Flutter?

Sep 16 2020

Estou enfrentando o mesmo problema que esse cara pergunta

Mas sua resposta aceita não me ajudou.

O problema:

Quando um usuário sai e outro usuário diferente entra, todos os dados mostrados no meu aplicativo são do usuário desconectado anteriormente devido ao sistema de cache firebase. Pesquisei sobre esse problema e encontrei uma solução que consiste em chamar este método:

FirebaseFirestore.instance.clearPersistence();

Mas sempre e em todos os lugares que coloco esta linha de código, lança uma exceção dizendo que não posso chamar este método quando o cliente está em execução:

Ocorreu uma excepção. PlatformException (PlatformException (falhou-pré-condição, a operação foi rejeitada porque o sistema não está em um estado necessário para a execução da operação. Se realizar uma consulta, certifique-se de que ela foi indexada por meio do console do Firebase., {Código: falhou-pré-condição, mensagem: A operação foi rejeitada porque o sistema não está em um estado necessário para a execução da operação. Se realizar uma consulta, verifique se ela foi indexada por meio do Firebase console., NativeErrorMessage: A persistência não pode ser apagada enquanto o cliente está em execução., NativeErrorCode: 9} ))

então, como chamar esse método? ou melhor, existe a melhor maneira de resolver esse problema?

Respostas

3 DougStevenson Sep 17 2020 at 03:54

Você deve chamá-lo imediatamente após inicializar o Firebase e antes de fazer a primeira consulta.

Dpedrinha Oct 15 2020 at 21:38

Parece que é necessário encerrar o FirebaseFirestore.instanceprimeiro.

No final do meu método de logoff, chamo:

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

Não recebo erros e tudo parece estar funcionando como deveria agora.

MuhammadShafique Jan 05 2021 at 07:41

adicione isso ao seu botão de login 'onPressed':

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