@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
22import 'package:provider/provider.dart' ;
33import 'package:twitter/models/post.dart' ;
44import 'package:twitter/models/user.dart' ;
5+ import 'package:twitter/services/posts.dart' ;
56import 'package:twitter/services/user.dart' ;
67
78class ListPosts extends StatefulWidget {
@@ -13,6 +14,7 @@ class ListPosts extends StatefulWidget {
1314
1415class _ListPostsState extends State <ListPosts > {
1516 UserService _userService = UserService ();
17+ PostService _postService = PostService ();
1618 @override
1719 Widget build (BuildContext context) {
1820 final posts = Provider .of <List <PostModel >>(context) ?? [];
@@ -23,44 +25,69 @@ class _ListPostsState extends State<ListPosts> {
2325 final post = posts[index];
2426 return StreamBuilder (
2527 stream: _userService.getUserInfo (post.creator),
26- builder: (BuildContext context, AsyncSnapshot <UserModel > snapshot) {
27- if (! snapshot.hasData) {
28+ builder:
29+ (BuildContext context, AsyncSnapshot <UserModel > snapshotUser) {
30+ if (! snapshotUser.hasData) {
2831 return Center (child: CircularProgressIndicator ());
2932 }
30- return ListTile (
31- title: Padding (
32- padding: EdgeInsets .fromLTRB (0 , 15 , 0 , 15 ),
33- child: Row (
34- children: [
35- snapshot.data.profileImageUrl != ''
36- ? CircleAvatar (
37- radius: 20 ,
38- backgroundImage:
39- NetworkImage (snapshot.data.profileImageUrl))
40- : Icon (Icons .person, size: 40 ),
41- SizedBox (width: 10 ),
42- Text (snapshot.data.name)
43- ],
44- ),
45- ),
46- subtitle: Column (
47- crossAxisAlignment: CrossAxisAlignment .start,
48- children: [
49- Padding (
50- padding: EdgeInsets .fromLTRB (0 , 15 , 0 , 15 ),
51- child: Column (
33+
34+ //stream builder to get user like
35+ return StreamBuilder (
36+ stream: _postService.getCurrentUserLike (post),
37+ builder:
38+ (BuildContext context, AsyncSnapshot <bool > snapshotLike) {
39+ if (! snapshotLike.hasData) {
40+ return Center (child: CircularProgressIndicator ());
41+ }
42+
43+ return ListTile (
44+ title: Padding (
45+ padding: EdgeInsets .fromLTRB (0 , 15 , 0 , 15 ),
46+ child: Row (
47+ children: [
48+ snapshotUser.data.profileImageUrl != ''
49+ ? CircleAvatar (
50+ radius: 20 ,
51+ backgroundImage: NetworkImage (
52+ snapshotUser.data.profileImageUrl))
53+ : Icon (Icons .person, size: 40 ),
54+ SizedBox (width: 10 ),
55+ Text (snapshotUser.data.name)
56+ ],
57+ ),
58+ ),
59+ subtitle: Column (
5260 crossAxisAlignment: CrossAxisAlignment .start,
5361 children: [
54- Text (post.text),
55- SizedBox (height: 20 ),
56- Text (post.timestamp.toDate ().toString ())
62+ Padding (
63+ padding: EdgeInsets .fromLTRB (0 , 15 , 0 , 15 ),
64+ child: Column (
65+ crossAxisAlignment: CrossAxisAlignment .start,
66+ children: [
67+ Text (post.text),
68+ SizedBox (height: 20 ),
69+ Text (post.timestamp.toDate ().toString ()),
70+ SizedBox (height: 20 ),
71+ IconButton (
72+ icon: new Icon (
73+ snapshotLike.data
74+ ? Icons .favorite
75+ : Icons .favorite_border,
76+ color: Colors .blue,
77+ size: 30.0 ),
78+ onPressed: () {
79+ _postService.likePost (
80+ post, snapshotLike.data);
81+ }),
82+ Text (post.likesCount.toString ())
83+ ],
84+ ),
85+ ),
86+ Divider (),
5787 ],
5888 ),
59- ),
60- Divider (),
61- ],
62- ),
63- );
89+ );
90+ });
6491 });
6592 },
6693 );
0 commit comments