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? 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();
}
}
3 Réponses :
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;
});
});
}
Essayez ceci P> StorageUploadTask Tâche code> est un avenir, vous devez donc attendre la tâche de téléchargement pour terminer pour obtenir l'URL 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();
}
}
}
bon monsieur je vais essayer d'abord
puis-je obtenir votre email, j'ai du mal à paumer pouvez vous aider
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. P>
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. P>
At-il réparais votre problème?
Vous aurez besoin de flux pour la mise à jour continue. Vous n'avez écrit aucun code en rapportant