From 6cbc86e411a7521ce0fdafa176b8bc9da887050d Mon Sep 17 00:00:00 2001
From: Karel Klic <karel.klic@managry.com>
Date: Sat, 18 Jan 2025 00:17:24 +0100
Subject: [PATCH] fix(ui_auth): Don't send verification email to verified
 address

EmailVerificationScreen might be created second time to perform an animated transition to another screen.

The second instance shouldn't send a verification email to already verified address.
---
 .../screens/email_verification_screen.dart    | 22 ++++++++++---------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/packages/firebase_ui_auth/lib/src/screens/email_verification_screen.dart b/packages/firebase_ui_auth/lib/src/screens/email_verification_screen.dart
index 02934204..a79b68aa 100644
--- a/packages/firebase_ui_auth/lib/src/screens/email_verification_screen.dart
+++ b/packages/firebase_ui_auth/lib/src/screens/email_verification_screen.dart
@@ -146,19 +146,21 @@ class __EmailVerificationScreenContentState
   }
 
   void _sendEmailVerification(_) {
-    controller
-      ..addListener(() {
-        setState(() {});
-
-        if (state == EmailVerificationState.verified) {
-          final action = FirebaseUIAction.ofType<EmailVerifiedAction>(context);
-          action?.callback();
-        }
-      })
-      ..sendVerificationEmail(
+    controller.addListener(() {
+      setState(() {});
+
+      if (state == EmailVerificationState.verified) {
+        final action = FirebaseUIAction.ofType<EmailVerifiedAction>(context);
+        action?.callback();
+      }
+    });
+
+    if (state != EmailVerificationState.verified) {
+      controller.sendVerificationEmail(
         Theme.of(context).platform,
         widget.actionCodeSettings,
       );
+    }
   }
 
   EmailVerificationState get state => controller.state;