web-dev-qa-db-ja.com

ログインまたはサインアップしようとすると、「エラータイプ「AuthResult」はタイプキャストのタイプ「FirebaseUser」のサブタイプではありません」というエラーが発生します。

私は大学のプロジェクト用にフラッターアプリを作成しています。ここでは、ログインページとサインアップページを追加し、Firebaseを介してそれを認証しています。ログインをクリックすると、デバッグコンソールに"Error type 'AuthResult' is not aタイプcastのタイプ「FirebaseUser」のサブタイプ "そして、このエラーの後でアプリをリロードすると、正常にログインします。

この更新後にfirebase_authパッケージを0.12.0に更新する前は、すべてが最もよく機能していました。メソッド "signInWithEmailAndPassword()"および "createUserWithEmailAndPassword()"がエラーをスローしました"タイプ「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で正常に作成されましたが、アプリは次のページに行きませんが、リロードするとすぐに、ログインとアカウントの作成後に表示されるページから始まります(ログアウトは完全に機能しています)

9
Hassan Ansari

これはプラグインの重大な変更であり、ここに記載されています https://pub.dev/packages/firebase_auth#012

したがって、どのような種類のキャストも行わないでください。新しい変更を採用するには、コードをリファクタリングする必要があります。

FirebaseUser user = (await FirebaseAuth.instance.
signInWithEmailAndPassword(email: email, password: password))
.user;
16
Raouf Rahiche

私も同じ問題に直面しています。次のように変更するだけです:

final FirebaseUser user = (await _auth.signInWithCredential(credential)).user;

参照 https://github.com/flutter/flutter/issues/38757#issuecomment-522307525

13
Ahmed fathi

私は同じエラーがあり、コードを次のように変更しました:

FirebaseUser user = (await _firebaseAuth.signInWithEmailAndPassword(email: email, password: password)).user;

アプリは実際のデバイスで期待どおりに動作しますが、コンソールにエラーは表示されませんが、Visual Studio Codeはユーザーの下の端に赤い下線を表示し、エラーを出力します。

ゲッター「user」がクラス「FirebaseUser」に定義されていません。 「user」を定義するライブラリをインポートするか、名前を既存のゲッターの名前に修正するか、「user」という名前のゲッターまたはフィールドを定義してください。

[ソリューション] VSコードを再起動します。 VS Codeは再起動するまで古いライブラリを使用します。

4
Flöru

あなたがすべきことはAuthResult result = await _firebaseAuth.signInWithEmailAndPassword( email: email, password: password); FirebaseUser user = result.user;に変更されました

0
mufakir