add deleted message in preview

This commit is contained in:
Salvatore Giordano
2020-02-27 10:47:08 +01:00
parent f93430b11d
commit d2fe921ed9
+61 -42
View File
@@ -33,39 +33,45 @@ class ChannelPreview extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[ children: <Widget>[
_buildDate(context, channel.lastMessageAt), _buildDate(context),
], ],
), ),
); );
} }
Text _buildDate(BuildContext context, DateTime lastMessageAt) { Widget _buildDate(BuildContext context) {
lastMessageAt = lastMessageAt.toLocal(); return StreamBuilder<DateTime>(
stream: channel.lastMessageAtStream,
initialData: channel.lastMessageAt,
builder: (context, snapshot) {
final lastMessageAt = snapshot.data.toLocal();
String stringDate; String stringDate;
final now = DateTime.now(); final now = DateTime.now();
if (now.year != lastMessageAt.year || if (now.year != lastMessageAt.year ||
now.month != lastMessageAt.month || now.month != lastMessageAt.month ||
now.day != lastMessageAt.day) { now.day != lastMessageAt.day) {
stringDate = stringDate =
'${lastMessageAt.day}/${lastMessageAt.month}/${lastMessageAt.year}'; '${lastMessageAt.day}/${lastMessageAt.month}/${lastMessageAt.year}';
stringDate = formatDate(lastMessageAt, [dd, '/', mm, '/', yyyy]); stringDate = formatDate(lastMessageAt, [dd, '/', mm, '/', yyyy]);
} else { } else {
stringDate = '${lastMessageAt.hour}:${lastMessageAt.minute}'; stringDate = '${lastMessageAt.hour}:${lastMessageAt.minute}';
stringDate = formatDate(lastMessageAt, [HH, ':', nn]); stringDate = formatDate(lastMessageAt, [HH, ':', nn]);
} }
return Text( return Text(
stringDate, stringDate,
style: Theme.of(context).textTheme.caption, style: Theme.of(context).textTheme.caption,
);
},
); );
} }
Widget _buildSubtitle() { Widget _buildSubtitle() {
return StreamBuilder<List<User>>( return StreamBuilder<List<User>>(
stream: channel.state.typingEventsStream, stream: channel.state.typingEventsStream,
initialData: [], initialData: channel.state.typingEvents,
builder: (context, snapshot) { builder: (context, snapshot) {
final typings = snapshot.data; final typings = snapshot.data;
final opacity = channel.state.unreadCount > .0 ? 1.0 : 0.5; final opacity = channel.state.unreadCount > .0 ? 1.0 : 0.5;
@@ -76,31 +82,44 @@ class ChannelPreview extends StatelessWidget {
} }
Widget _buildLastMessage(BuildContext context, double opacity) { Widget _buildLastMessage(BuildContext context, double opacity) {
final lastMessage = return StreamBuilder<List<Message>>(
channel.state.messages.isNotEmpty ? channel.state.messages.last : null; stream: channel.state.messagesStream,
if (lastMessage == null) { initialData: channel.state.messages,
return SizedBox(); builder: (context, snapshot) {
} final messages = snapshot.data;
final lastMessage = messages.isNotEmpty ? messages.last : null;
if (lastMessage == null) {
return SizedBox();
}
final prefix = lastMessage.attachments String text;
.map((e) { if (lastMessage.type == 'deleted') {
if (e.type == 'image') { text = 'This message was deleted.';
return '📷'; } else {
} else if (e.type == 'video') { final prefix = lastMessage.attachments
return '🎬'; .map((e) {
} if (e.type == 'image') {
return null; return '📷';
}) } else if (e.type == 'video') {
.where((e) => e != null) return '🎬';
.join(' '); }
return null;
})
.where((e) => e != null)
.join(' ');
return Text( text = '$prefix ${lastMessage.text ?? ''}';
'$prefix ${lastMessage.text ?? ''}', }
maxLines: 1,
overflow: TextOverflow.ellipsis, return Text(
style: Theme.of(context).textTheme.caption.copyWith( text,
color: Colors.black.withOpacity(opacity), maxLines: 1,
), overflow: TextOverflow.ellipsis,
style: Theme.of(context).textTheme.caption.copyWith(
color: Colors.black.withOpacity(opacity),
),
);
},
); );
} }