Могу ли я получить изображение из хранилища с помощью этого вызова функции Firebase? - PullRequest
0 голосов
/ 19 июня 2020

Это функция, которую я использую для загрузки изображения в Firebase Хранилище, но в то же время я возвращаю URL-адрес изображения.

Future<String> updateUserData(Project project) async {
    firestoreInstance.collection('projects').add(
      {
        'id': project.id,
        'title': project.title,
        'description': project.description,
        'duration': project.duration,
        'members': project.members,
        'complexity': project.complexity,
        'affordability': project.affordability,
        'prequisites': project.prequisites,
        'contact': project.contact,
        
      },
    );

     fileName = basename(project.image.path);
    StorageReference firebaseStorageRef =
        
        FirebaseStorage.instance.ref().child(fileName);
    StorageUploadTask uploadTask = firebaseStorageRef.putFile(project.image);
    taskSnapshot=await uploadTask.onComplete;
    downloadUrl =  taskSnapshot.ref.getDownloadURL().toString();
        return downloadUrl;
  }
   
   String returnUrl(){
     return downloadUrl;
   }  

Здесь я вызываю функцию для возврата url, но он возвращается null, нужна помощь в выяснении этого.

child: Image.network(database.returnUrl().toString()
                      ,
                      height: 100,
                      width: 80,
                      fit: BoxFit.cover,
                      alignment: Alignment.center),
                ),

1 Ответ

0 голосов
/ 19 июня 2020

Я бы добавил этот комментарий, но, к сожалению, не могу.

Вам нужно убедиться, что при возврате updateUserData() вы присваиваете его значение переменной downloadUrl, просто возвращая его в этот способ не сработает. Не знаю, есть ли у вас другой код для этого, но из того, что вы показали, вам понадобится что-то вроде этого.

//Maybe have this set to a default profile URL, incase something goes wrong?
String downloadUrl="";

Future<void> updateUserData(Project project) async {
    firestoreInstance.collection('projects').add(
      {
        'id': project.id,
        'title': project.title,
        'description': project.description,
        'duration': project.duration,
        'members': project.members,
        'complexity': project.complexity,
        'affordability': project.affordability,
        'prequisites': project.prequisites,
        'contact': project.contact,
      },
    );

     fileName = basename(project.image.path);
    StorageReference firebaseStorageRef =

        FirebaseStorage.instance.ref().child(fileName);
    StorageUploadTask uploadTask = firebaseStorageRef.putFile(project.image);
    taskSnapshot=await uploadTask.onComplete;
    downloadUrl =  taskSnapshot.ref.getDownloadURL().toString();

  }

   String returnUrl(){
    //You probably don't need this now, as you can access downloadURL directly.
     return downloadUrl;
   }  

Затем на вашем изображении:

Image.network(downloadUrl ...
 //The rest of your styling
);

Надеюсь, это имеет смысл. По сути, вы не можете получить доступ к переменной другой функции из другой функции.

Либо это, либо я полностью ошибаюсь, но, как я уже сказал, я не вижу, чтобы downloadUrl нигде определялся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...