現在のユーザーUIDに従ってFirebaseからフラッタープロジェクトに画像を読み込む方法はありますか

Aug 21 2020

Firebaseストレージから画像を読み込みたい。{users uid} .pngという名前のユーザーのプロフィール写真などの画像をアップロードしました。そのため、ユーザープロファイル画面に移動するときに、現在のユーザーuidに応じてFirebaseからこれらの画像をアップロードしたいと思います。そのための最良の方法は何ですか?私のような私のユーザーのプロパティを設定し、非同期メソッドを持っているfinal loggegInUserと私は、非同期メソッドを持っています

void getCurrentUser() async {
    try {
      final user = await _auth.currentUser();
      if (user != null) {
        loggedInUser = user;
        print(loggedInUser.email);
        print(uid);
      }
    } catch (e) {
      print(e);
    }
  }

このメソッドはグローバルloggedInUserプロパティを設定し、Firebaseストレージからそのような画像をロードしたい

CircleAvatar(
                    backgroundColor: Colors.black,
                    backgroundImage: FirebaseImage(
                            'gs://homeparty-68792.appspot.com/user_profile_images/${loggedInUser.uid}.png')
                       ,
                   
                    radius: 100,
                  ),

しかし、この画面をロードすると、

ERROR TYPE Exception has occurred. NoSuchMethodError (NoSuchMethodError: The getter 'uid' was called on null. Receiver: null Tried calling: uid)

エラー。getCurrentUser()メソッドは正しく機能し、電子メールとパスワードを出力しますが、ビルドウィジェットではnullを返します。なぜこれが起こっているのか私はいくつかの助けが必要ですか?

回答

1 PeterHaddad Aug 21 2020 at 15:22

あなたが呼び出している場合getCurrentUser()にはinitState、その後、問題があることをbuild()ユーザーを取得する前に呼び出さなっています。したがって、最善の方法は、バージョンにアップグレードcloud_firestore0.14.0て追加することfirebase_core : 0.5.0です。

dependencies:
  flutter:
    sdk: flutter
  firebase_core : ^0.5.0
  firebase_auth : ^0.18.0
  firebase_storage:^4.0.0
  # cloud_firestore: ^0.14.0 not sure if you are using

次に、次の操作を実行できます。最初にFirebaseを初期化します。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

と内部getCurrentUser()

void getCurrentUser() {
    try {
      final user =  _auth.currentUser;
      if (user != null) {
        loggedInUser = user;
        print(loggedInUser.email);
        print(uid);
      }
    } catch (e) {
      print(e);
    }
  }

新しいバージョンでcurrentUserは、非同期ではないを取得する必要はありませんasync/await

いくつかの便利なリンク:

Firebaseアプリ '[DEFAULT]'が作成されていません-FlutterとFirebaseでFirebase.initializeApp()を呼び出します

未定義のクラス 'FirebaseUser'

cloud_firestore0.14.0データメソッドの使用方法

ゲッター「インスタンス」はタイプ「Firestore」に対して定義されていません