My flutter app is going to have a feed of posts from users. I have posted in my firebase firestore database from my swift app that I am going to replace. So for I have this in my flutter fetch posts function:

final userRef = FirebaseFirestore.instance.collection('users');

final QuerySnapshot result = await userRef.get();

result.docs.forEach((res) async {
    print(res.id);
    QuerySnapshot posts = await userRef.doc(res.id).collection("posts").get();
    posts.docs.forEach((res) {
        print(res.data());
    });
});

So with this function, I can print a list of the data of all of each user's posts. Here is a part of the print:

flutter: {postedDate: Oct 24, 2021 at 6:10 AM, id: twentyonepilots_354_1635073829.595439, caption: , likers: [], postUrlString: https://firebasestorage.googleapis.com:443/v0/b/globe-e8b7f.appspot.com/o/twentyonepilots%2Fposts%2Ftwentyonepilots_354_1635073829.595439.png?alt=media&token=48b6b1bc-112b-4d61-84ee-3847ba8dce94}
flutter: {postedDate: 13 Aug 2021, 9:54 AM, id: viktoria_923_1628837663.179892, caption: just posted, feeling good :), likers: [anelia, globetester, alis, devil, vladyynk, fllcuriie, HackerX, nihilistic, imherefromtiktok, donnasmithofficial, hhhh, sachiq], postUrlString: https://firebasestorage.googleapis.com:443/v0/b/globe-e8b7f.appspot.com/o/viktoria%2Fposts%2Fviktoria_923_1628837663.179892.png?alt=media&token=634ff70e-028c-4452-8c2b-b598eb8b8e48}
flutter: {postedDate: 21. Nov 2021 at 18:34, id: timsbs_464_1637516088.259705, caption: Hi https://google.com, likers: [timsbs], postUrlString: https://firebasestorage.googleapis.com:443/v0/b/globe-e8b7f.appspot.com/o/timsbs%2Fposts%2Ftimsbs_464_1637516088.259705.png?alt=media&token=4ce3bf4d-3187-4ee9-954a-dc39532694ae}

How can I turn this list into a list of this post model?:

class Post {
  String id = "";
  String caption = "";
  String postUrlString = "";
  Timestamp postedDate = Timestamp.now();

  Post(
      {required this.id,
      required this.caption,
      required this.postUrlString,
      required this.postedDate});
}
flutter google-cloud-firestore 
1 Answers

Adding a 'fromJson' method to Post class like below.

final userRef = FirebaseFirestore.instance.collection('users');

final QuerySnapshot result = await userRef.get();

List<Post> listPosts = [];

result.docs.forEach((res) async {
    print(res.id);
    QuerySnapshot posts = await userRef.doc(res.id).collection("posts").get();

    posts.docs.forEach((res) {
        listPosts.add(Post.fromJson(res.data() as Map<String, dynamic>));
    });

    print(listPosts);
});
class Post {
  final String id;
  final String caption;
  final String postUrlString;
  final Timestamp postedDate;

  Post(
      {required this.id,
      required this.caption,
      required this.postUrlString,
      required this.postedDate});
  
  Post.fromJson(Map<String, dynamic> json)
    : id = json['id'],
      caption = json['caption'],
      postUrlString = json['postUrlString'],
      postedDate = json['postedDate'] != null ? Timestamp.fromDate(json['postedData']) : Timestamp.now();

  @override
  String toString() => '''Post { id: $id,
     caption: $caption,
     postUrlString: $postUrlString
     postedData: $postedData
  }''';
}

answered Dec 29


Login and Submit Your Answer
Browse other questions tagged  flutter  google-cloud-firestore or ask your own question.