Обновление профиля для облачного хранилища с текущим пользователем с флаттером - PullRequest
0 голосов
/ 14 апреля 2020

Ошибка, которую я имею сейчас на фотографии, дает мой экземпляр будущего

Он обновит и загрузит в облако хранилища огня, но аспект photoUrl дает экземпляр будущего

 Future<void> uploadPic(BuildContext context) async{
      // String fileName = basename(newProfilepic.path);
       var randomno = Random(25);
      final StorageReference firebaseStorageRef =  FirebaseStorage.instance
        .ref()
        .child('profilepics/${randomno.nextInt(5000).toString()}.jpg');
    final  StorageUploadTask uploadTask = firebaseStorageRef.putFile(newProfilepic);
  await   uploadTask.onComplete.then((value){
      userManagement.updateProfilePic(value.ref.getDownloadURL().toString()).then((val){
        // Navigator.of(context).pushReplacementNamed('/homesceen');

      });
     }).catchError((e){
        print(e);
      });
    }

Future updateProfilePic(picUrl) async {
    var userInfo = new UserUpdateInfo();
    userInfo.photoUrl = picUrl;

  await FirebaseAuth.instance.currentUser().then((user){
      Firestore.instance
          .collection('users')
          .where('uid', isEqualTo: user.uid)
          .getDocuments()
          .then((docs){
              Firestore.instance
                  .document('users/${docs.documents[0].documentID}')
                  .updateData({'photoURl':picUrl}).then((val){
                    print('Updated');

                  }).catchError((e){
                    print(e);
                  });
          }).catchError((e){
            print(e);
          });
    }).catchError((e){
      print(e);
    });

  }

1 Ответ

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

Похоже, что когда вы звоните updateProfilePic, вы передаете value.ref.getDownloadURL(), который фактически возвращает будущее, а не URL. Вам нужно await или then, чтобы получить путь к строке.

Я думаю, что если вы введете параметры своей функции, вы увидите предупреждение о несовпадающих типах. Попробуйте

Future updateProfilePic(String picUrl) async {}

вместо

Future updateProfilePic(picUrl) async {}

Если пользователю разрешена только одна запись user, я бы избавился от

Firestore.instance
    .collection('users')
    .where('uid', isEqualTo: user.uid)
    .getDocuments()

и замените его на

Firestore.instance.collection('users').document(user.uid).update(/* */)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...