Почему я не могу обновить imageurl с помощью этих функций в firestore flutter? - PullRequest
0 голосов
/ 21 июня 2020

Сначала я инициализировал url равным нулю, затем я добавляю данные в свой первый документ firestore, а затем изображение

  String url='';
  StorageTaskSnapshot storageTaskSnapshot;

  Future<Project> updateUserData(Project project) async {
   docref=await  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,
        'imageurl': 'https://bitsofco.de/content/images/2018/12/broken-1.png',
      },
    );

    
    
    fileName = basename(project.image.path);
     firebaseStorageRef =
        FirebaseStorage.instance.ref().child(fileName);
     uploadTask = firebaseStorageRef.putFile(project.image);
     

    String photourl =  await (await uploadTask.onComplete).ref.getDownloadURL();
    url= photourl.toString();  //updating the null initialized url here
    notifyListeners();
  }

  

Затем я использую эту функцию для обновления imageurl в ранее сохраненном do c.

  Future<Void> updatedata() async{

  await  Firestore.instance
  .collection('projects')
    .document(docref.documentID)
      .updateData({
        'imageurl': url, 
        
      });
      notifyListeners();
  }

Каждый раз, когда я вызываю эти две функции в другом виджете с помощью provide, r do c и изображение загружаются, но url возвращает null, и я не могу получить изображение.

Provider.of<DatabaseService>(context,listen: false).updateUserData(finalproj);
Provider.of<DatabaseService>(context,listen: false).updatedata();

1 Ответ

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

Вам нужно дождаться завершения updateUserData, прежде чем звонить updatedata, иначе вы не можете быть уверены, что docref настроен правильно.

await Provider.of<DatabaseService>(context,listen: false).updateUserData(finalproj);
Provider.of<DatabaseService>(context,listen: false).updatedata();
...