firebase - 未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'isEmailVerified'
问题描述
登录时出现上述错误。即使在我确保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);
}
}
}
我不知道如何解决这个问题。任何帮助表示赞赏。
解决方案
在您的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);
}
}
}
但是上面的代码片段必须放在一个async
方法中。
推荐阅读
- r - 如何在R中组合具有相同频率的类别名称?
- vue.js - 如何为一个 Vue 组件重新定义 Vee Validate 错误消息?
- ios - React-Native Firebase ML Kit Vision 图像标签不适用于 iOS
- javascript - 带有业力的 Angular 8 测试组件失败
- java - 无法在文本视图中显示文件内容
- c - 为什么这个 C 字符串联合函数不起作用 - 段错误?
- casl - 是否可以在 CASL 中使用嵌套对象定义规则
- angular - Angular - 这样做的正确方法
- xslt - 使用 XSLT 将兄弟节点字段添加到父节点
- vectorization - 两个 16 位整数向量与 C++ 中的 AVX2 的内积