@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
2
2
import 'package:provider/provider.dart' ;
3
3
import 'package:twitter/models/post.dart' ;
4
4
import 'package:twitter/models/user.dart' ;
5
+ import 'package:twitter/services/posts.dart' ;
5
6
import 'package:twitter/services/user.dart' ;
6
7
7
8
class ListPosts extends StatefulWidget {
@@ -13,6 +14,7 @@ class ListPosts extends StatefulWidget {
13
14
14
15
class _ListPostsState extends State <ListPosts > {
15
16
UserService _userService = UserService ();
17
+ PostService _postService = PostService ();
16
18
@override
17
19
Widget build (BuildContext context) {
18
20
final posts = Provider .of <List <PostModel >>(context) ?? [];
@@ -23,44 +25,69 @@ class _ListPostsState extends State<ListPosts> {
23
25
final post = posts[index];
24
26
return StreamBuilder (
25
27
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) {
28
31
return Center (child: CircularProgressIndicator ());
29
32
}
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 (
52
60
crossAxisAlignment: CrossAxisAlignment .start,
53
61
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 (),
57
87
],
58
88
),
59
- ),
60
- Divider (),
61
- ],
62
- ),
63
- );
89
+ );
90
+ });
64
91
});
65
92
},
66
93
);
0 commit comments