aboutsummaryrefslogtreecommitdiff
path: root/lib/screens/chat_screen.dart
diff options
context:
space:
mode:
Diffstat (limited to 'lib/screens/chat_screen.dart')
-rw-r--r--lib/screens/chat_screen.dart42
1 files changed, 36 insertions, 6 deletions
diff --git a/lib/screens/chat_screen.dart b/lib/screens/chat_screen.dart
index bd0d5d7..61f3f9e 100644
--- a/lib/screens/chat_screen.dart
+++ b/lib/screens/chat_screen.dart
@@ -1,8 +1,10 @@
+import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:linkchat/firebase/auth.dart';
import 'package:linkchat/firebase/database.dart';
import 'package:linkchat/models/group.dart';
+import '../models/favorite.dart';
import '../models/message.dart';
import '../models/user.dart';
import '../widgets/chat_bottom_sheet.dart';
@@ -75,16 +77,44 @@ class _ChatScreenState extends State<ChatScreen> {
});
List<Message> msgs = snapshot.data!;
+ User? user = _auth.currentUser;
return ListView.builder(
controller: _scroll,
padding: const EdgeInsets.only(bottom: 80.0),
itemCount: snapshot.data!.length,
- itemBuilder: (context, index) => ChatBubble(
- msgs[index],
- alignment: msgs[index].sentBy == _auth.currentUser?.uid
- ? ChatBubbleAlignment.end
- : ChatBubbleAlignment.start,
- ),
+ itemBuilder: (context, index) => StreamBuilder(
+ stream: _db.hasFavoriteForMessage(
+ _auth.currentUser!.uid, msgs[index].id),
+ builder: (context, snapshot) {
+ return ChatBubble(
+ msgs[index],
+ alignment: msgs[index].sentBy == user?.uid
+ ? ChatBubbleAlignment.end
+ : ChatBubbleAlignment.start,
+ favorited: snapshot.hasData
+ ? snapshot.data == true
+ : (snapshot.hasError ? false : false),
+ onFavorite: (String id, bool value) {
+ if (value) {
+ _db.saveFavorite(
+ Favorite(
+ groupId: group!.id!,
+ messageId: msgs[index].id!,
+ savedAt: DateTime.now(),
+ messageText: msgs[index].messageText,
+ linkTitle: msgs[index].linkTitle,
+ linkDescription: msgs[index].linkDescription,
+ linkPhotoURL: msgs[index].linkPhotoURL,
+ sentAt: msgs[index].sentAt,
+ sentBy: msgs[index].sentBy,
+ ),
+ user!.uid);
+ } else {
+ _db.removeFavorite(user!.uid, msgs[index].id);
+ }
+ },
+ );
+ }),
);
} else if (snapshot.hasError) {
print('Error: ${snapshot.error}');