[MessageWidget] Move action modal options visibility one layer up

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-01-11 19:42:45 +05:30
parent 4d419c9b53
commit 7404bbd64d
4 changed files with 51 additions and 35 deletions
+7 -7
View File
@@ -24,8 +24,8 @@ class MessageActionsModal extends StatelessWidget {
final bool showCopyMessage; final bool showCopyMessage;
final bool showEditMessage; final bool showEditMessage;
final bool showResendMessage; final bool showResendMessage;
final bool showReply; final bool showReplyMessage;
final bool showThreadReply; final bool showThreadReplyMessage;
final bool reverse; final bool reverse;
final ShapeBorder messageShape; final ShapeBorder messageShape;
final DisplayWidget showUserAvatar; final DisplayWidget showUserAvatar;
@@ -40,9 +40,9 @@ class MessageActionsModal extends StatelessWidget {
this.onReplyTap, this.onReplyTap,
this.onThreadReplyTap, this.onThreadReplyTap,
this.showCopyMessage = true, this.showCopyMessage = true,
this.showReply = true, this.showReplyMessage = true,
this.showResendMessage = true, this.showResendMessage = true,
this.showThreadReply = true, this.showThreadReplyMessage = true,
this.showUserAvatar = DisplayWidget.show, this.showUserAvatar = DisplayWidget.show,
this.editMessageInputBuilder, this.editMessageInputBuilder,
this.messageShape, this.messageShape,
@@ -129,7 +129,7 @@ class MessageActionsModal extends StatelessWidget {
showReactions: false, showReactions: false,
showUsername: false, showUsername: false,
showThreadReplyIndicator: false, showThreadReplyIndicator: false,
showReplyIndicator: false, showReplyMessage: false,
showUserAvatar: showUserAvatar, showUserAvatar: showUserAvatar,
showTimestamp: false, showTimestamp: false,
translateUserAvatar: false, translateUserAvatar: false,
@@ -180,13 +180,13 @@ class MessageActionsModal extends StatelessWidget {
.greyWhisper, .greyWhisper,
context: context, context: context,
tiles: [ tiles: [
if (showReply && if (showReplyMessage &&
(message.status == (message.status ==
MessageSendingStatus.SENT || MessageSendingStatus.SENT ||
message.status == null) && message.status == null) &&
message.parentId == null) message.parentId == null)
_buildReplyButton(context), _buildReplyButton(context),
if (showThreadReply && if (showThreadReplyMessage &&
(message.status == (message.status ==
MessageSendingStatus.SENT || MessageSendingStatus.SENT ||
message.status == null) && message.status == null) &&
+13 -5
View File
@@ -369,7 +369,11 @@ class _MessageListViewState extends State<MessageListView> {
final isNextUserSame = final isNextUserSame =
message.user.id == nextMessage.user?.id; message.user.id == nextMessage.user?.id;
final isThread = message.replyCount > 0; final isThread = message.replyCount > 0;
if (timeDiff >= 1 || !isNextUserSame || isThread) { final isDeleted = message.isDeleted;
if (timeDiff >= 1 ||
!isNextUserSame ||
isThread ||
isDeleted) {
return SizedBox(height: 8); return SizedBox(height: 8);
} }
return SizedBox(height: 2); return SizedBox(height: 2);
@@ -713,7 +717,12 @@ class _MessageListViewState extends State<MessageListView> {
return MessageWidget( return MessageWidget(
showThreadReplyIndicator: false, showThreadReplyIndicator: false,
showInChannelIndicator: false, showInChannelIndicator: false,
showReplyIndicator: false, showReplyMessage: false,
showResendMessage: false,
showThreadReplyMessage: false,
showCopyMessage: false,
showDeleteMessage: false,
showEditMessage: false,
message: message, message: message,
reverse: isMyMessage, reverse: isMyMessage,
showUsername: !isMyMessage, showUsername: !isMyMessage,
@@ -725,8 +734,6 @@ class _MessageListViewState extends State<MessageListView> {
), ),
showSendingIndicator: false, showSendingIndicator: false,
onThreadTap: _onThreadTap, onThreadTap: _onThreadTap,
showEditMessage: false,
showDeleteMessage: false,
borderRadiusGeometry: BorderRadius.only( borderRadiusGeometry: BorderRadius.only(
topLeft: Radius.circular(16), topLeft: Radius.circular(16),
bottomLeft: Radius.circular(2), bottomLeft: Radius.circular(2),
@@ -845,6 +852,7 @@ class _MessageListViewState extends State<MessageListView> {
}, },
showEditMessage: isMyMessage, showEditMessage: isMyMessage,
showDeleteMessage: isMyMessage, showDeleteMessage: isMyMessage,
showThreadReplyMessage: !isThreadMessage,
borderSide: isMyMessage ? BorderSide.none : null, borderSide: isMyMessage ? BorderSide.none : null,
onThreadTap: _onThreadTap, onThreadTap: _onThreadTap,
onReplyTap: widget.onReplyTap, onReplyTap: widget.onReplyTap,
@@ -870,7 +878,7 @@ class _MessageListViewState extends State<MessageListView> {
onShowMessage: widget.onShowMessage, onShowMessage: widget.onShowMessage,
); );
if (!isThreadMessage) { if (!message.isDeleted && !message.isSystem && !message.isEphemeral) {
child = Swipeable( child = Swipeable(
onSwipeEnd: () => widget.onMessageSwiped(message), onSwipeEnd: () => widget.onMessageSwiped(message),
backgroundIcon: StreamSvgIcon.reply( backgroundIcon: StreamSvgIcon.reply(
+29 -21
View File
@@ -106,9 +106,6 @@ class MessageWidget extends StatefulWidget {
/// If true the widget will show the thread reply indicator /// If true the widget will show the thread reply indicator
final bool showThreadReplyIndicator; final bool showThreadReplyIndicator;
/// If true the widget will show the reply indicator
final bool showReplyIndicator;
/// If true the widget will show the show in channel indicator /// If true the widget will show the show in channel indicator
final bool showInChannelIndicator; final bool showInChannelIndicator;
@@ -121,9 +118,6 @@ class MessageWidget extends StatefulWidget {
/// Used in [MessageReactionsModal] and [MessageActionsModal] /// Used in [MessageReactionsModal] and [MessageActionsModal]
final bool showReactionPickerIndicator; final bool showReactionPickerIndicator;
/// If true the widget will show the resendMessage indicator
final bool showResendMessage;
final List<Read> readList; final List<Read> readList;
final ShowMessageCallback onShowMessage; final ShowMessageCallback onShowMessage;
@@ -131,8 +125,14 @@ class MessageWidget extends StatefulWidget {
/// If true show the users username next to the timestamp of the message /// If true show the users username next to the timestamp of the message
final bool showUsername; final bool showUsername;
final bool showTimestamp; final bool showTimestamp;
final bool showDeleteMessage;
final bool showReplyMessage;
final bool showThreadReplyMessage;
final bool showEditMessage; final bool showEditMessage;
final bool showCopyMessage;
final bool showDeleteMessage;
final bool showResendMessage;
final Map<String, AttachmentBuilder> attachmentBuilders; final Map<String, AttachmentBuilder> attachmentBuilders;
/// Center user avatar with bottom of the message /// Center user avatar with bottom of the message
@@ -160,7 +160,6 @@ class MessageWidget extends StatefulWidget {
this.showSendingIndicator = true, this.showSendingIndicator = true,
this.showThreadReplyIndicator = true, this.showThreadReplyIndicator = true,
this.showInChannelIndicator = true, this.showInChannelIndicator = true,
this.showReplyIndicator = true,
this.onReplyTap, this.onReplyTap,
this.onThreadTap, this.onThreadTap,
this.showUsername = true, this.showUsername = true,
@@ -168,6 +167,10 @@ class MessageWidget extends StatefulWidget {
this.showReactions = true, this.showReactions = true,
this.showDeleteMessage = true, this.showDeleteMessage = true,
this.showEditMessage = true, this.showEditMessage = true,
this.showReplyMessage = true,
this.showThreadReplyMessage = true,
this.showResendMessage = true,
this.showCopyMessage = true,
this.onUserAvatarTap, this.onUserAvatarTap,
this.onLinkTap, this.onLinkTap,
this.onMessageActions, this.onMessageActions,
@@ -175,7 +178,6 @@ class MessageWidget extends StatefulWidget {
this.editMessageInputBuilder, this.editMessageInputBuilder,
this.textBuilder, this.textBuilder,
Map<String, AttachmentBuilder> customAttachmentBuilders, Map<String, AttachmentBuilder> customAttachmentBuilders,
this.showResendMessage = true,
this.readList, this.readList,
this.padding, this.padding,
this.textPadding = const EdgeInsets.symmetric( this.textPadding = const EdgeInsets.symmetric(
@@ -243,6 +245,8 @@ class _MessageWidgetState extends State<MessageWidget> {
bool get showSendingIndicator => widget.showSendingIndicator; bool get showSendingIndicator => widget.showSendingIndicator;
bool get isDeleted => widget.message.isDeleted;
bool get showUsername => widget.showUsername; bool get showUsername => widget.showUsername;
bool get showTimeStamp => widget.showTimestamp; bool get showTimeStamp => widget.showTimestamp;
@@ -271,7 +275,9 @@ class _MessageWidgetState extends State<MessageWidget> {
showThreadReplyIndicator || showThreadReplyIndicator ||
showUsername || showUsername ||
showTimeStamp || showTimeStamp ||
showInChannel; showInChannel ||
showSendingIndicator ||
isDeleted;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -482,12 +488,12 @@ class _MessageWidgetState extends State<MessageWidget> {
Widget _buildQuotedMessage() { Widget _buildQuotedMessage() {
final isMyMessage = final isMyMessage =
widget.message.user.id == StreamChat.of(context).user.id; widget.message.user.id == StreamChat.of(context).user.id;
final onTap = widget.message?.quotedMessage?.isDeleted != true &&
widget.onQuotedMessageTap != null
? () => widget.onQuotedMessageTap(widget.message.quotedMessageId)
: null;
return QuotedMessageWidget( return QuotedMessageWidget(
onTap: () { onTap: onTap,
if (widget.onQuotedMessageTap != null) {
widget.onQuotedMessageTap(widget.message.quotedMessageId);
}
},
message: widget.message.quotedMessage, message: widget.message.quotedMessage,
messageTheme: isMyMessage messageTheme: isMyMessage
? StreamChatTheme.of(context).otherMessageTheme ? StreamChatTheme.of(context).otherMessageTheme
@@ -497,7 +503,7 @@ class _MessageWidgetState extends State<MessageWidget> {
} }
Widget get _bottomRow { Widget get _bottomRow {
if (widget.message.isDeleted) { if (isDeleted) {
return Transform( return Transform(
transform: Matrix4.rotationY(widget.reverse ? pi : 0), transform: Matrix4.rotationY(widget.reverse ? pi : 0),
alignment: Alignment.center, alignment: Alignment.center,
@@ -701,14 +707,15 @@ class _MessageWidgetState extends State<MessageWidget> {
messageTheme: widget.messageTheme, messageTheme: widget.messageTheme,
messageShape: widget.shape ?? _getDefaultShape(context), messageShape: widget.shape ?? _getDefaultShape(context),
reverse: widget.reverse, reverse: widget.reverse,
showDeleteMessage: widget.showDeleteMessage, showDeleteMessage: widget.showDeleteMessage || isDeleteFailed,
message: widget.message, message: widget.message,
editMessageInputBuilder: widget.editMessageInputBuilder, editMessageInputBuilder: widget.editMessageInputBuilder,
onReplyTap: widget.onReplyTap, onReplyTap: widget.onReplyTap,
onThreadReplyTap: widget.onThreadTap, onThreadReplyTap: widget.onThreadTap,
showResendMessage: showResendMessage:
widget.showResendMessage && (isSendFailed || isUpdateFailed), widget.showResendMessage && (isSendFailed || isUpdateFailed),
showCopyMessage: !isFailedState && showCopyMessage: widget.showCopyMessage &&
!isFailedState &&
widget.message.text?.trim()?.isNotEmpty == true, widget.message.text?.trim()?.isNotEmpty == true,
showEditMessage: widget.showEditMessage && showEditMessage: widget.showEditMessage &&
!isDeleteFailed && !isDeleteFailed &&
@@ -716,11 +723,12 @@ class _MessageWidgetState extends State<MessageWidget> {
?.any((element) => element.type == 'giphy') != ?.any((element) => element.type == 'giphy') !=
true, true,
showReactions: widget.showReactions, showReactions: widget.showReactions,
showReply: widget.showReplyIndicator && showReplyMessage: widget.showReplyMessage &&
!isFailedState && !isFailedState &&
widget.onReplyTap != null, widget.onReplyTap != null,
showThreadReply: showThreadReplyMessage: widget.showThreadReplyMessage &&
widget.showThreadReplyIndicator && widget.onThreadTap != null, !isFailedState &&
widget.onThreadTap != null,
), ),
); );
}); });
+2 -2
View File
@@ -70,8 +70,8 @@ void main() {
showEditMessage: false, showEditMessage: false,
showCopyMessage: false, showCopyMessage: false,
showDeleteMessage: false, showDeleteMessage: false,
showReply: false, showReplyMessage: false,
showThreadReply: false, showThreadReplyMessage: false,
message: Message( message: Message(
text: 'test', text: 'test',
user: User( user: User(