From 9ec2b02a923ab1ee5041882adfaaf64ff4aa6604 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 24 Apr 2020 16:51:47 +0200 Subject: [PATCH] add datedivider builder --- lib/src/date_divider.dart | 70 +++++++++++++++------------------- lib/src/message_input.dart | 1 + lib/src/message_list_view.dart | 18 +++++++-- lib/src/message_widget.dart | 2 +- 4 files changed, 47 insertions(+), 44 deletions(-) diff --git a/lib/src/date_divider.dart b/lib/src/date_divider.dart index f1d074d1..1e00f2ae 100644 --- a/lib/src/date_divider.dart +++ b/lib/src/date_divider.dart @@ -1,18 +1,15 @@ import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; -import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// It shows a date divider depending on the date difference class DateDivider extends StatelessWidget { + final DateTime dateTime; + const DateDivider({ Key key, - @required this.nextMessage, - @required this.messageWidget, + @required this.dateTime, }) : super(key: key); - final Message nextMessage; - final Widget messageWidget; - @override Widget build(BuildContext context) { final divider = Expanded( @@ -22,7 +19,7 @@ class DateDivider extends StatelessWidget { ), ); - final createdAt = Jiffy(nextMessage.createdAt.toLocal()); + final createdAt = Jiffy(dateTime); final now = DateTime.now(); final hourInfo = createdAt.format('h:mm a'); @@ -46,46 +43,39 @@ class DateDivider extends StatelessWidget { dayInfo = createdAt.format('dd/MM/yyyy').toUpperCase(); } - return Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - messageWidget, - Padding( - padding: const EdgeInsets.only(top: 24.0), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - divider, - Padding( - padding: const EdgeInsets.symmetric(horizontal: 32.0), - child: Text.rich( + return Padding( + padding: const EdgeInsets.only(top: 24.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + divider, + Padding( + padding: const EdgeInsets.symmetric(horizontal: 32.0), + child: Text.rich( + TextSpan( + children: [ TextSpan( - children: [ - TextSpan( - text: dayInfo, - style: TextStyle( - fontWeight: FontWeight.bold, - ), - ), - TextSpan(text: ' AT'), - TextSpan(text: ' $hourInfo'), - ], + text: dayInfo, style: TextStyle( - fontWeight: FontWeight.normal, + fontWeight: FontWeight.bold, ), ), - style: TextStyle( - fontSize: 10, - color: - Theme.of(context).textTheme.title.color.withOpacity(.5), - ), + TextSpan(text: ' AT'), + TextSpan(text: ' $hourInfo'), + ], + style: TextStyle( + fontWeight: FontWeight.normal, ), ), - divider, - ], + style: TextStyle( + fontSize: 10, + color: Theme.of(context).textTheme.title.color.withOpacity(.5), + ), + ), ), - ), - ], + divider, + ], + ), ); } } diff --git a/lib/src/message_input.dart b/lib/src/message_input.dart index 1c43c232..a2ef4abe 100644 --- a/lib/src/message_input.dart +++ b/lib/src/message_input.dart @@ -719,6 +719,7 @@ class _MessageInputState extends State { }, icon: Icon( Icons.send, + color: StreamChatTheme.of(context).accentColor, ), ), ), diff --git a/lib/src/message_list_view.dart b/lib/src/message_list_view.dart index da6a9c01..5c3e67d1 100644 --- a/lib/src/message_list_view.dart +++ b/lib/src/message_list_view.dart @@ -69,6 +69,7 @@ class MessageListView extends StatefulWidget { this.onMentionTap, this.onMessageActions, this.attachmentBuilders, + this.dateDividerBuilder, }) : super(key: key); /// Function used to build a custom message widget @@ -102,6 +103,9 @@ class MessageListView extends StatefulWidget { /// Map that defines a builder for an attachment type final Map attachmentBuilders; + /// Builder used to render date dividers + final Widget Function(DateTime) dateDividerBuilder; + @override _MessageListViewState createState() => _MessageListViewState(); } @@ -232,9 +236,17 @@ class _MessageListViewState extends State { if (nextMessage != null && !Jiffy(message.createdAt.toLocal()) .isSame(nextMessage.createdAt.toLocal(), Units.DAY)) { - return DateDivider( - messageWidget: messageWidget, - nextMessage: nextMessage, + return Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + messageWidget, + widget.dateDividerBuilder != null + ? widget + .dateDividerBuilder(nextMessage.createdAt.toLocal()) + : DateDivider( + dateTime: nextMessage.createdAt.toLocal(), + ), + ], ); } diff --git a/lib/src/message_widget.dart b/lib/src/message_widget.dart index d1dafff7..49055937 100644 --- a/lib/src/message_widget.dart +++ b/lib/src/message_widget.dart @@ -237,7 +237,7 @@ class _MessageWidgetState extends State Widget _buildThreadIndicator(BuildContext context) { if (widget.message?.replyCount != null && widget.message.replyCount > 0) { return ReplyIndicator( - onTap: widget.isParent + onTap: !widget.isParent ? () { widget.onThreadTap(widget.message); }