Flutter:如何监听 FirebaseUser 是否已通过电子邮件验证布尔值?

2024-02-04

My Idea:我想在 Flutter 中使用 Firebase Auth 插件来注册用户。 但在他们可以访问该应用程序之前,他们必须验证自己的电子邮件地址。 因此,我在注册后将 Firebase 用户推送到验证屏幕。这只是一个加载屏幕,告诉用户他必须验证他的电子邮件。

But now:如果用户的电子邮件已验证或未验证并将其发送(如果正确)到主屏幕,我如何才能持续收听?

我是 Flutter 新手,我不知道是否必须使用 Streams 或 Observables 或 while Loop 或 setState() 或其他东西来进行这样的布尔检查。而且我也不知道如何设置解决方案。

这是我注册用户的基本代码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'dart:async';

class AuthService {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final Firestore _db = Firestore.instance;

  Future<FirebaseUser> get getUser => _auth.currentUser();

  Stream<FirebaseUser> get user => _auth.onAuthStateChanged;

  Future<FirebaseUser> edubslogin(String email, String password) async {
    try {
      final FirebaseUser user = await _auth.createUserWithEmailAndPassword(
        email: email,
        password: password,
      );
     
      await user.sendEmailVerification();
      
      //email verification somewhere here
    
      updateUserData(user);
      return user;
    } catch (error) {
      print(error);
      return null;
    }
  }

我试过这个:

     if (user.isEmailVerified == true) {
        
        //go to Homescreen
        return true; 
      } else {

        //show verification screen(loading spinner)
        return false;
      }

但我没有得到布尔值true out of isEmailVerified.

我需要做什么?


我在我的应用程序中遇到了同样的情况。我的解决方案是在战略路线的 initState 方法中创建一个定期计时器,以保持应用程序直到电子邮件得到验证。它不像使用监听器那么优雅,但工作得很好。

import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';

class _AccountConfirmationState extends State<AccountConfirmation> {

    late Timer _timer;

    @override
    void initState() {
      super.initState();
      
      _timer = Timer.periodic(const Duration(seconds: 5), (timer) async {
      await FirebaseAuth.instance.currentUser?.reload();
      final user = FirebaseAuth.instance.currentUser;
        if (user?.emailVerified ?? false) {
          timer.cancel();
          Navigator.pop(context, true);
        }
      });
    }

    @override
    void dispose() {
      super.dispose();
      _timer.cancel();
    }

    @override
    Widget build(BuildContext context) {
      //TODO: Implement your amazing waiting screen here
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter:如何监听 FirebaseUser 是否已通过电子邮件验证布尔值? 的相关文章

  • 使用 Firebase 数据 Swift、Xcode 7 填充 UITableViewController

    我正在与swift in Xcode 7 我完全陌生Swift Xcode and Firebase 我想要三个UITableViewController在我的 iOS 应用程序中 前两个TableView controllers将需要动态
  • Flutter中FloatingActionButton的渐变背景

    是否可以将FAB的背景颜色设置为渐变而不是纯色 我的按钮 floatingActionButton FloatingActionButton backgroundColor const Color 0xFFFF006E child cons
  • 参数类型“Widget?”无法分配给参数类型“Widget”

    我将应用程序包装在滚动配置中以删除滚动发光 这总是有效 但自从我使用 flutter 以来已经有一段时间了 所以我创建了一个新项目 但它给出了这个错误 ProviderScope child MaterialApp title testin
  • 如何在flutter中准备字符串变量格式? [复制]

    这个问题在这里已经有答案了 我想将 Roll no 传递给我的其余 API 吗 我想通过 Roll no 像这样的格式 String roll no 3250 10 如何准备这个格式 我在 3250 和 10 之间添加了 但它给出了类似 E
  • 更新 firebase firestore 文档内的字段,无需手动编写字段键来更新 Angular

    我如何在我的 firestore 中更新文档而不在代码中精确写入我想要更新的字段 因为已经通过表单到达 假设 Angular 中的 HTML 标签已经带来了密钥和导入 要更新的那个 HTML Tags
  • 如何/可以手动调用触发器 Firebase 函数?

    在我们的应用程序中 我们不断使用可调用函数 有时冷启动可能会让人头疼 因为我们仍在开发它并且除了我们之外没有用户使用它们 我们认为加快这个过程的方法是在打开应用程序 登录之前调用每个函数 它们不多 目前大约有 20 个 我们的账单不会到月球
  • Flutter:后台中的 SVG 图像抛出错误

    我必须将 SVG 图像保留在背景中并将文本保留在顶部 当我保留 Flutter SVG 包中的 SVG 图像时 出现了这样的错误 I flutter 24437 Unsupported operation Could not resolve
  • Firebase数据库在批准后保存数据

    我在 iOS 应用程序上使用 firebase 数据库 我正在快速写作 我正在使用 发送 按钮在我的 firebaseDatabase 上写入数据 例如文本字段和标签值 有什么方法可以接受或拒绝我的数据库中的数据吗 我的意思是 如果用户向文
  • Flutter Firebase Cloud函数无法调用

    当我尝试从 Flutter 调用可调用函数时 在使用 Firebase Cloud Functions 时遇到错误 flutter caught generic exception flutter PlatformException fun
  • Flutter Stripe 在显示付款单时抛出 StripeException

    我正在尝试使用 stripe payment 包在我的 flutter 应用程序中实现 Stripe 支付系统 在我的代码中 我调用 Stripe instance initPaymentSheet 但是当我尝试在几行之后调用 Stripe
  • Firebase 无法使用类检索数据[重复]

    这个问题在这里已经有答案了 我有一些功能齐全的代码行检索每个数据 但未能使用类检索它们 例如 这些线路运行良好 double value double ds child player1score getValue long value lo
  • ios-使用 firebase 发送通知

    我正在尝试创建带有通知的应用程序 通知必须从 php 文件发送到 firebase 然后发送到设备 起初 我尝试使用 firebase 控制台发送 效果完美 但是当我尝试使用 php 发送通知时 我遇到了问题 显示已成功发送 但我没有收到任
  • Flutter with VSCode 显示未安装,即使已安装

    我刚刚开始颤抖 我已经安装它并成功创建了一个项目 但是当我尝试运行时它失败了 以下是 flutter doctor v 的输出 PS C android app flutter app flutter first app gt flutte
  • 有没有办法阻止 Firebase Cloud Functions 使用 Firebase Storage 中的存储空间?

    我在控制台中查看 Firebase 存储使用情况 注意到在部署云功能的那天 存储使用量出现了巨大的激增 我看到一条新的橙色线出现 称为us artifacts PROJECT NAME appspot com 为什么我与 Cloud Fun
  • 重建父级时调用子级 init 方法 - flutter

    据我了解和颤振的工作机制 有状态的小部件方法仅在小部件树中第一次构建时被调用一次 并且每次其状态更改或父级重建时都会调用构建方法方法 bottomNavigationBar BottomNavigationBar items BottomN
  • Firebase Analytics 服务器端[重复]

    这个问题在这里已经有答案了 Firebase 客户端 JS 支持 Firebase Analytics 在那里 我使用该方法logEvent将我的事件记录到 GA v2 并查看很棒的漏斗图 但是 显然 客户端不会跟踪某些事件 例如数据库事件
  • Firebase 中的递归错误太多

    我的全局作用域中有一个函数 用于侦听 FB 引用上的值 function updateCredits userID var userRef database ref users userID userRef on value functio
  • 从 firebase 数据库获取最高分值

    在我的网站上有一些我从 firebase 获得的电影 电影的分数在0到100之间 我已经在我的网站上找到了所有电影 我还想按降序显示它们 例如评分最高的 5 部电影 我怎样才能实现这一点 感谢您的回答 const app initializ
  • 如何在 Dart 中处理套接字断开连接?

    我在服务器上使用 Dart 1 8 5 我想实现 TCP 套接字服务器 它侦听传入连接 向每个客户端发送一些数据 并在客户端断开连接时停止生成数据 这是示例代码 void main ServerSocket bind InternetAdd
  • FCM(Firebase Cloud Messaging)如何发送到所有手机?

    我创建了一个小型应用程序 能够从 FCM 控制台接收推送通知 我现在想做的是向所有使用 API 安装应用程序的 Android 手机发送推送通知 这就是我完全迷失的地方 有没有办法在不收集所有注册ID的情况下将其发送到所有手机 这是否仅适用

随机推荐