【问题标题】:Unhandled Exception: NoSuchMethodError: The getter 'isEmailVerified' was called on null未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'isEmailVerified'
【发布时间】:2020-07-09 16:53:32
【问题描述】:

我在登录时遇到上述错误。即使在我确保仅在检查当前用户是否为空之后才调用isEmailVerified() 之后,也会引发此异常。

我的authentication.dart 文件如下所示:

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

abstract class BaseAuth {
  Future<String> signIn(String email, String password);

  Future<String> signUp(String email, String password);

  Future<FirebaseUser> getCurrentUser();

  Future<void> sendEmailVerification();

  Future<void> signOut();

  Future<bool> isEmailVerified();
}
class Auth implements BaseAuth {
  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

  Future<String> signIn(String email, String password) async {
    AuthResult result = await _firebaseAuth.signInWithEmailAndPassword(
        email: email, password: password);
    FirebaseUser user = result.user;
    return user.uid;
  }

  Future<String> signUp(String email, String password) async {
    AuthResult result = await _firebaseAuth.createUserWithEmailAndPassword(
        email: email, password: password);
    FirebaseUser user = result.user;
    sendEmailVerification();
    return user.uid;
  }

  Future<FirebaseUser> getCurrentUser() async {
    FirebaseUser user = await _firebaseAuth.currentUser();
    return user;
  }

  Future<void> signOut() async {
    return _firebaseAuth.signOut();
  }

  Future<void> sendEmailVerification() async {
    FirebaseUser user = await _firebaseAuth.currentUser();
    user.sendEmailVerification();
  }

  Future<bool> isEmailVerified() async {
    FirebaseUser user = await _firebaseAuth.currentUser();
    return user.isEmailVerified;
  }
}

LoginPage 里面,我是这样检查的:

if(auth.signIn(email, password)!=null)
      {
        if(auth.getCurrentUser()!=null)
          {
            if(auth.isEmailVerified() != null) {
              Toast.show("Login Successful!", context, duration: Toast.LENGTH_SHORT, gravity:  Toast.BOTTOM);
              Route route = MaterialPageRoute(builder: (context) => HomePage());
              Navigator.pushReplacement(context, route);
            }
          }
      }

我不知道如何解决这个问题。任何帮助表示赞赏。

【问题讨论】:

    标签: firebase flutter


    【解决方案1】:

    从您的Auth 类中,您的方法具有未来的签名。
    你必须await他们的结果,因为其他条件需要它。

    你可以这样做:

    if((await auth.signIn(email, password))!=null){
          if((await auth.getCurrentUser())!=null){
            if((await auth.isEmailVerified()) != null) {
              Toast.show("Login Successful!", context, duration: Toast.LENGTH_SHORT, gravity:  Toast.BOTTOM);
              Route route = MaterialPageRoute(builder: (context) => HomePage());
              Navigator.pushReplacement(context, route);
            }
          }
        }
    

    但上面的 sn-p 必须放在 async 方法中。

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多