0
votes

Comment faire de l'image immédiatement après avoir été ajouté à FireBase sans redémarrer Fluter

Mon code est normal, mais si j'ajoute des données à FireBase, l'image n'apparaît pas, mais si elle a redémarré l'application apparaît par lui-même et l'image apparaît avec succès, comment le résoudre? XXX PRE>

Voici le code pour l'ajouter P>

void createData() async {
    DateTime now = DateTime.now();
    String format = DateFormat('dd:mm:yy').format(now);
    var fullImageName = 'foto-$format' + '.jpg';
    var fullImageName2 = 'foto-$format' + '.jpg';

    final StorageReference ref =
        FirebaseStorage.instance.ref().child(fullImageName);
    final StorageUploadTask task = ref.putFile(image);

    var part1 =
        'https://firebasestorage.googleapis.com/v0/b/db-tubes.appspot.com/o/';

    var fullPathImage = part1 + fullImageName2;
    print(fullPathImage);

    if (_formKey.currentState.validate()) {
      _formKey.currentState.save();
      DocumentReference ref = await db
          .collection('resep')
          .add({'nama': '$nama', 'resep': '$resep', 'image': '$fullPathImage', 'email' : widget.email});
      setState(() => id = ref.documentID);
      Navigator.of(context).pop(); 
    }
  }


1 commentaires

Vous aurez besoin de flux pour la mise à jour continue. Vous n'avez écrit aucun code en rapportant


3 Réponses :


0
votes

Ceci est juste une démonstration pour votre idée.

Future uploadFile() async {    
   StorageReference storageReference = FirebaseStorage.instance    
       .ref()    
       .child('chats/${Path.basename(_image.path)}}');    
   StorageUploadTask uploadTask = storageReference.putFile(_image);    
   await uploadTask.onComplete;    
   print('File Uploaded');    
   storageReference.getDownloadURL().then((fileURL) {    
     setState(() {    
       _uploadedFileURL = fileURL;    
     });    
   });    
 }  


0 commentaires

0
votes

StorageUploadTask Tâche code> est un avenir, vous devez donc attendre la tâche de téléchargement pour terminer pour obtenir l'URL

Essayez ceci P>

void createData() async {
    DateTime now = DateTime.now();
    String format = DateFormat('dd:mm:yy').format(now);
    var fullImageName = 'foto-$format' + '.jpg';
    var fullImageName2 = 'foto-$format' + '.jpg';

    final StorageReference ref =
        FirebaseStorage.instance.ref().child(fullImageName);
    final StorageUploadTask task = ref.putFile(image);

    // Wait upload task to complete
    final StorageTaskSnapshot downloadUrl = 
    (await task.onComplete);
    // Get image uRL
    final String url = (await downloadUrl.ref.getDownloadURL());


    if (_formKey.currentState.validate()) {
      _formKey.currentState.save();
      DocumentReference ref = await db
          .collection('resep')
          .add({'nama': '$nama', 'resep': '$resep', 'image': '$url', 'email' : widget.email});
      setState(() => id = ref.documentID);
      Navigator.of(context).pop(); 
    }
  }
}


2 commentaires

bon monsieur je vais essayer d'abord


puis-je obtenir votre email, j'ai du mal à paumer pouvez vous aider



0
votes

Si l'image ne met pas à jour lors de la rafraîchissement du widget, je vois un problème courant ici avec la rédaction de fichiers à la même adresse / nom du stockage Firebase. En quelque sorte, les widgets d'image ne comprennent pas que l'image a été mise à jour si le nom du fichier est identique à celui de l'ancien nom de fichier comme: "2019-11-19-file.jpg". Si vous écrivez à cela à nouveau, il ne mettra pas à jour.

Dans ce cas, le nom de fichier doit-il avoir un composant aléatoire, comme un nom d'horodatage UTC millisecondes ("1234512312-file.jpg"), ou ajoutez "& aléatoire = [insérer un nombre aléatoire ici]" à la fin de votre chaîne d'URL d'image.


1 commentaires

At-il réparais votre problème?