Как загрузить URL-адрес изображения, загруженный из хранилища Firebase, в документ Firestore для вновь зарегистрированного пользователя? - PullRequest
0 голосов
/ 08 апреля 2020

Я сделал это до загрузки изображения в хранилище Firebase и загрузки URL-адреса. Здесь мне нужно сохранить информацию о недавно зарегистрированном пользователе в документе Firestore. Я храню некоторые детали, одним из которых является URL-адрес изображения, загруженный из хранилища Firebase.

Теперь мне нужно назначить загруженный URL для Firestore для доступа к нему на моих страницах дротиков.

uploadImage() async {
    var random = Random(25);
    final StorageReference fireref = FirebaseStorage.instance
        .ref()
        .child('profilepics/${random.nextInt(5000).toString()}.jpg');
    StorageUploadTask task = fireref.putFile(profilepic);
    StorageTaskSnapshot snapshottask = await task.onComplete;
    String downloadUrl = await snapshottask.ref.getDownloadURL();
    if (downloadUrl != null) {
      userManagement.addProfilePic(downloadUrl.toString()).then((val) {
        Navigator.of(context).pushReplacementNamed('/twelf');
      });
    }
  }

Выше приведен код получения URL-адреса изображения из хранилища Firebase. И, если вы видите, я вызвал метод addProfilePi c, чтобы добавить загруженный URL-адрес в FireStore. И метод таков:

Future addProfilePic(picUrl) async {
    //---
  }

Что я должен написать в этом методе, чтобы загрузить URL в firestore. Я не в состоянии понять. Дополнительный код для понимания:

class UserManagement {
  storeNewUser(user, context) {
    Firestore.instance.collection('/userdetails').add({
      'Email': user.email,
      'uid': user.uid,
      'displayName': user.fullname,
      'photoUrl': user.photoUrl
    }).then((value) {
      Navigator.of(context).pop();
      Navigator.of(context).pushReplacementNamed('/selectpic');
    }).catchError((e) {
      print(e);
    });
  }

А приведенный ниже код близок к регистрации окончательного кода, который загружает данные в Firestore:

final String userId = await widget.auth
              .createUserWithEmailAndPassword(_email, _password)
              .then((signedInUser) async {
            var userUpdateInfo = new UserUpdateInfo();
            userUpdateInfo.displayName = _fullname;
            userUpdateInfo.photoUrl = _imageurl;
            //'https://cdn.mos.cms.futurecdn.net/QjuZKXnkLQgsYsL98uhL9X-1024-80.jpg';
            final user = await FirebaseAuth.instance.currentUser();

            user.updateProfile(userUpdateInfo).then((user) {
              FirebaseAuth.instance
                  .currentUser()
                  .then(
                      (user) => {UserManagement().storeNewUser(user, context)})
                  .catchError((e) {
                print(e);
              });
            }).catchError((e) {
              print(e);
            });
          }).catchError((e) {
            print(e);
          });
          print('Registered user: $userId');
        }

1 Ответ

0 голосов
/ 09 апреля 2020

Попробуйте это:

Future<String> uploadImage(profilepic) async {
StorageUploadTask uploadTask = storageRef.child("profilepics/${random.nextInt(5000).toString()}.jpg").putFile(profilepic);
StorageTaskSnapshot storageTaskSnapshot = await uploadTask.onComplete;
String downlaodUrl = await storageTaskSnapshot.ref.getDownloadURL();
return downlaodUrl;
}

// String imageUrl = await uploadImage(profilepic); You can store the value of imageUrl in firebase document.

Firestore.instance.collection('/userdetails').add({
// All fields you want to have in a document
'photoUrl': imageUrl; // use the image url variable
});

/// To update a currentUser document
Firestore.instance.collection('/userdetails')
.document(your_user_document_name_here)
.updateData({
// All fields you want to update in a document
'photoUrl': imageUrl; // use the image url variable
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...