我正在为我的大学项目制作一个Flutter应用程序,在其中添加登录和注册页面并通过Firebase对其进行身份验证,当我单击登录时,调试控制台会显示“错误类型'AuthResult'为不是强制类型转换中“ FirebaseUser”类型的子类型。,当我在此错误后重新加载应用程序时,便成功登录了。
在将更新后的 firebase_auth 软件包更新为0.12.0之前,一切工作均处于最佳状态,方法“ signInWithEmailAndPassword()”和“ createUserWithEmailAndPassword()”引发错误“ A “ AuthResult”类型的值不能分配给“ FirebaseUser”类型的变量。 尝试更改变量的类型,或将右侧的类型强制转换为'FirebaseUser'“ ,因此我添加了强制转换作为FirebaseUser ,该错误已修复,但应用程序已成功构建,但当我单击登录名或创建帐户时,调试控制台说错误类型'AuthResult'不是强制类型转换中'FirebaseUser'类型的子类型
在更新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_auth 0.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)
我通过如下所示铸造“ FirebaseUser”来修复错误
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上成功创建了新创建的帐户,但是该应用程序不会在下一页上显示,但是一旦我重新加载,它就会从登录并创建帐户后(退出工作正常)出现的页面开始>
答案 0 :(得分:14)
这是插件的重大更改,在此处记录 https://pub.dev/packages/firebase_auth#0120
因此,您不必进行任何类型的强制转换,只需重构代码即可采用新更改:
Action must be plain objects. Use custom middleware for async actions.
答案 1 :(得分:12)
我面临同样的问题。只需修改为:
final FirebaseUser user = (await _auth.signInWithCredential(credential)).user;
请参见https://github.com/flutter/flutter/issues/38757#issuecomment-522307525
答案 2 :(得分:4)
课程已重命名。 “AuthResult”已重命名为“UserCredential”,“FirebaseUser”已重命名为“User”。
答案 3 :(得分:3)
我有同样的错误,并将代码更改为:
FirebaseUser user = (await _firebaseAuth.signInWithEmailAndPassword(email: email, password: password)).user;
该应用程序可以在真实设备上正常运行,但控制台中没有错误,但是Visual Studio Code在用户下方的末尾显示红色下划线并输出错误:
未为类“ FirebaseUser”定义吸气剂“用户”。 尝试导入定义“用户”的库,将名称更正为现有吸气剂的名称,或者定义一个名为“用户”的吸气剂或字段。
[解决方案] 重新启动VS代码。 VS Code使用旧的库,直到重新启动为止。
答案 4 :(得分:1)
在firebase_auth 0.18.0 + 1上使用User代替FirebaseUser
final User user = (await FirebaseAuth.instance.signInWithEmailAndPassword(
email: 'abc@gmail.com',
password: 'abc',
)).user;
答案 5 :(得分:0)
已更改,您应该做的是
AuthResult result = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
FirebaseUser user = result.user;
答案 6 :(得分:0)
signInWithEmailAndPassword 返回 AuthResult ,并且 AuthResult 类包含类型为 FirebaseUser 的实例变量 user >。 因此,您必须按照以下方式更改代码。
FirebaseUser userDetails = (await FirebaseAuth.instance
.signInWithEmailAndPassword(Credentialsxxx)).user;
print('sign in : ${userDetails.uid}');