Si el enlace de verificación abre Flutter cuando estaba cerrada, restaura primero Firebase Auth, procesa el deep link una sola vez y recarga el usuario antes de decidir la navegación. La presencia del enlace no demuestra que la dirección ya esté verificada: el estado remoto de Firebase es la fuente de verdad.
Índice
¿Por qué funciona con la app abierta pero falla desde cero?
Falla porque el router puede recibir el enlace antes de que Firebase restaure la sesión y antes de que el árbol de navegación conozca al usuario. Dos listeners también pueden procesar el mismo enlace y abrir pantallas contradictorias.
Centraliza el arranque en un estado pequeño: inicializando, sin sesión, pendiente de verificación y listo. No construyas la decisión solo con el path recibido.
¿Cuál es la forma rápida: usar la ruta móvil de IndiePack?
La forma rápida es partir de IndiePack, cuya ruta móvil combina Flutter, Firebase, autenticación social e interfaz nativa para iOS y Android. La base compartida permite añadir este caso de apertura en frío sin rehacer identidad y navegación.
Ver IndiePackVer precio¿Qué debe comprobar Flutter antes de mostrar el contenido?
Debe comprobar que existe una sesión, que el enlace fue manejado correctamente y que una recarga del usuario devuelve el email verificado. Si aún no lo está, conserva la pantalla pendiente y ofrece volver a consultar.
No guardes un booleano local permanente como sustituto. La aplicación puede usar caché para pintar una espera, pero las funciones protegidas deben validar la identidad real.
¿Cómo se recupera un enlace caducado, repetido o abierto en otro dispositivo?
Se recupera mostrando un mensaje específico y permitiendo enviar un enlace nuevo desde la cuenta actual. Un enlace repetido debe terminar en la misma pantalla lista, no ejecutar dos veces el onboarding.
Si la sesión pertenece a otra persona, detén el flujo y explica que debe entrar con la cuenta destinataria. El patrón es parecido a la recuperación con enlace caducado: callback controlado, estado explícito y salida segura.
¿Cómo se prueba en iOS y Android antes de publicar?
Se prueba con la app abierta, en segundo plano y cerrada; con enlace válido, usado y caducado; y con sesión correcta, ausente y distinta. Repite cada caso desde navegador y cliente de correo.
Comprueba que volver atrás no repite el enlace y que una mala conexión no marca la cuenta como verificada. Con IndiePack, el resultado buscado es una experiencia móvil nativa que conserva una sola verdad aunque el sistema operativo cambie el orden de arranque.