#実現したいこと
Flutterを利用して、FirebaseのFirestorageに画像をアップロードし、画像URLをForestoreに保存したいです。
#躓いている点
Firestorageの画像アップロードは非同期処理で行っています。
ただ、アップロード中にFirestoreの保存が行われ、画像URLが保存されません。
環境
Flutter:version1.20.2
Dart:version2.9.1
pubspec.yaml
-firebase_core: ^0.5.0
-cloud_firestore: ^0.14.0+2
-firebase_storage: ^4.0.0
#コード
dart
1Future<void> saveData( 2 String title, String address, String description) async { 3 4 ///↑入力されたフォーム情報を引数として取得 5 6 String _userimageurl, _displayname, _username, _uid; 7 _uid = FirebaseAuth.instance.currentUser.uid; 8 9 10 ///user情報をDBから取得 11 var result = await FirebaseFirestore.instance 12 .collection('users') 13 .where("uid", isEqualTo: _uid) 14 .get(); 15 16 _userimageurl = result.docs[0].get("imageurl"); 17 _displayname = result.docs[0].get("displayname"); 18 _username = result.docs[0].get("username"); 19 20 21 ///画像アップロード、URL取得 22 var value = await this.saveImage(this.images); 23 24 ///Firestore保存 25 await FirebaseFirestore.instance.collection('posts').add({ 26 'title': title, 27 'address': address, 28 'description': description, 29 'star': this.star_cnt, 30 "category": this.category, 31 "images": value, 32 "user_id": _uid, 33 "username": _username, 34 "user_displayname": _displayname, 35 "user_imageurl": _userimageurl, 36 'created': new DateTime.now(), 37 }); 38 39 notifyListeners(); 40 } 41
dart
1Future<List<String>> saveImage(List<Asset> images) async { 2 List<String> images_arr = []; 3 await images.forEach((element) async { 4 String unixtimestamp = 5 DateTime.now().toUtc().millisecondsSinceEpoch.toString(); 6 ByteData byteData = await element.getByteData(); 7 List<int> imageData = byteData.buffer.asUint8List(); 8 StorageReference ref = FirebaseStorage.instance 9 .ref() 10 .child("images") 11 .child("${unixtimestamp}.jpeg"); 12 13 StorageUploadTask uploadTask = ref.putData( 14 imageData, 15 StorageMetadata( 16 contentType: "image/jpeg", 17 )); 18 19 var url = await (await uploadTask.onComplete).ref.getDownloadURL(); 20 21 images_arr.add(url); 22 }); 23 return images_arr; 24 }
参考:multi_image_picker FireStoreサンプルコード
コード補足
画像のアップロード、ダウンロードURL取得、DB保存はすでにできています。
できていないのは、画像のURL取得まで待ってDB保存することだけです。
Future、awaitが間違っていると思いますが、ネット記事を読んでも解決しなかったため質問しました。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/05 07:23