当前位置: 首页 > 知识库问答 >
问题:

当我尝试登录或注册时,我收到一个错误“错误类型‘AuthResult’不是类型转换中‘FirebaseUser’类型的子类型”

左丘曦
2023-03-14

我正在为我的大学项目制作一个颤动应用程序,我正在添加一个登录和注册页面并通过Firebase进行身份验证,当我点击登录时,调试控制台显示“错误类型'AuthResult'不是类型转换中类型'FirebaseUser'的子类型”,当我在此错误后重新加载应用程序时,它成功登录。

在此次更新后,firebase_auth包更新到0.12.0之前一切都运行良好,方法“signInSusEmailAndPassword()”和“createUserSusEmailAndPassword()”抛出错误“不能将“AuthResult”类型的值分配给“Firebase User”类型的变量。尝试更改变量的类型,或将右侧类型转换为“Firebase User”,因此我添加了一个强制转换为Firebase User,修复了错误并成功构建了应用程序,但当我单击登录或创建帐户时,调试控制台表示错误类型“AuthResult”不是类型转换中“Firebase User”类型的子类型

firebase_auth 0.12.0更新之前的主登录和创建帐户功能代码

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

Future<String> createUser(String email, String password) async {
FirebaseUser user = await 
FirebaseAuth.instance.createUserWithEmailAndPassword(
    email: email, password: password);
return user.uid;
}

上面的代码工作正常,更新(firebase_auth0.12.0)后,相同的代码开始抛出这个错误,

A value of type 'AuthResult' can't be assigned to a variable of type 
'FirebaseUser'.
Try changing the type of the variable, or casting the right-hand type to 
'FirebaseUser'.dart(invalid_assignment)

我通过施放“Firebase User”修复了错误,如下所示

Future<String> signIn(String email, String password) async {
FirebaseUser user = await 
FirebaseAuth.instance.signInWithEmailAndPassword(
    email: email, password: password) as FirebaseUser;
return user.uid;
}

Future<String> createUser(String email, String password) async {
FirebaseUser user = await 
FirebaseAuth.instance.createUserWithEmailAndPassword(
    email: email, password: password) as FirebaseUser;
return user.uid;
}

这个新代码没有在编译中抛出错误,但是当我尝试登录或创建新帐户时,它会在调试控制台中引发错误 错误类型“AuthResult”不是类型转换中类型“FirebaseUser”的子类型,并且新创建的帐户在firebase上成功创建,但应用程序不会进入下一页,但一旦我重新加载它,它就会从登录后应该出现的页面开始,并且创建帐户(注销工作正常)

共有3个答案

冯渝
2023-03-14

这些类已被重命名。“AuthResult”已重命名为“UserCredential”,“FirebaseUser”已重命名为“User”。

马飞
2023-03-14

我也面临同样的问题。只需修改为:

< code > final firebase user user =(await _ auth . signinwithcredential(credential))。用户;

看见https://github.com/flutter/flutter/issues/38757#issuecomment-522307525

方恺
2023-03-14

这是插件中的一个突破性的变化,它记录在这里https://pub.dev/packages/firebase_auth#0120

因此,您不应该进行任何类型的转换,您只需重构代码以采用新的更改:

FirebaseUser user = (await FirebaseAuth.instance.
signInWithEmailAndPassword(email: email, password: password))
.user;
 类似资料: