実現したいこと
- Flutter×Firebase開発において、データの取得ができておらず2,3時間やっても解決に至らなかったため、有識者の力をお借りして取得及び表示を実現させたい。
前提
Flutter×Firebaseでアプリを個人開発しています。
現在、コメント機能を実装中なのですが、Firebaseに格納したコメントを取得及び表示ができなくて困っています。学習に使用している動画やドキュメントなどを見返したりしているのですが2,3時間やてみても解決しないため、有識者の方々にご教示していただきたいと考えています。
発生している問題・エラーメッセージ
Firebaseへの情報の格納はできているが、取得及び表示が完了していない。
該当のソースコード
comment_firestore.dart
1import 'package:chat_app/model/account.dart'; 2import 'package:chat_app/model/comment.dart'; 3import 'package:cloud_firestore/cloud_firestore.dart'; 4import 'package:flutter/foundation.dart'; 5 6class CommentFirestore { 7 static final _firestoreInstance = FirebaseFirestore.instance; 8 static final CollectionReference comments = 9 _firestoreInstance.collection('comments'); 10 11 static Future<dynamic> addComment(Comment newComment) async { 12 try { 13 final CollectionReference userComments = _firestoreInstance 14 .collection('user') 15 .doc(newComment.commentAccountId) 16 .collection('my_comments'); 17 var result = await comments.add({ 18 'content': newComment.content, 19 'comment_account_id': newComment.commentAccountId, 20 'comment_time': Timestamp.now(), 21 }); 22 userComments.doc(result.id).set({ 23 'comment_id': result.id, 24 'comment_time': Timestamp.now(), 25 }); 26 if (kDebugMode) { 27 print("Comment Completed."); 28 } 29 return true; 30 } on FirebaseException catch (e) { 31 if (kDebugMode) { 32 print("Comment Failed.$e"); 33 } 34 return false; 35 } 36 } 37 38 static Future<Map<String, Account>?> getCommentUserMap( 39 List<String> accountIds) async { 40 Map<String, Account> map = {}; 41 try { 42 await Future.forEach(accountIds, (String accountId) async { 43 var doc = await comments.doc(accountId).get(); 44 if (kDebugMode) { 45 print(doc); 46 } 47 Map<String, dynamic> data = doc.data() as Map<String, dynamic>; 48 if (kDebugMode) { 49 print(data); 50 } 51 // Account commentAccount = Account( 52 // id: accountId, 53 // name: data['name'], 54 // imagePath: data['image_path'], 55 // selfIntroduction: data['self_introduction'], 56 // userId: data['user_id'], 57 // ); 58 Comment commentAccount = Comment( 59 id: accountId, 60 content: data['content'], 61 commentAccountId: data['comment_account_id'], 62 imagePath: data['image_path'], 63 commentTime: Timestamp.now(), 64 ); 65 map[accountId] = commentAccount as Account; 66 if (kDebugMode) { 67 print("Completed acquisition of comment user information."); 68 } 69 return map; 70 }); 71 } on FirebaseException catch (e) { 72 if (kDebugMode) { 73 print("Failure to obtain comment user information. $e"); 74 } 75 return null; 76 } 77 return null; 78 } 79} 80 81 82 83
試したこと
Firebaseに格納されている情報を取得できない際に動画を見返して、どこが違うかを確認。
それでもわからなかったので、以下のページを参照したが解決できず。何か見落としがあり、実装できていない処理が存在するか、フィールド名が間違っているなどの可能性も考慮して見直しました。取得情報を表示する処理のファイルはコメント欄に記載します。
補足情報(FW/ツールのバージョンなど)
[✓] Flutter (Channel stable, 3.7.8, on macOS 13.2.1 22D68 darwin-x64,
locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version
32.1.0-rc1)
[✓] Xcode - develop for iOS and macOS (Xcode 14.2)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.2)
[✓] VS Code (version 1.76.2)
[✓] Connected device (3 available)
[✓] HTTP Host Availability
学習に使用している動画
https://www.udemy.com/share/105vZm3@Pr7FSm0zfp8qAXBT07se9r69-K2d0jGBislLihUh6OSiovR-KrudePIQug9fs-7GEg==/
ググってヒットしたページ
https://zenn.dev/tsuruo/articles/a3d77c4854e108
https://firebase.google.com/docs/firestore/query-data/get-data?hl=ja
https://tech.fundasta.co.jp/2022/01/11/y_suzuki/654
###追記
以下のページを見ながら、新たにメソッドを追加
https://www.udemy.com/course/flutter-firebase-chat/learn/lecture/33208636?start=210#overview
回答1件
あなたの回答
tips
プレビュー