diff --git a/lib/src/message_input.dart b/lib/src/message_input.dart index 5d6c16e8..38814c2a 100644 --- a/lib/src/message_input.dart +++ b/lib/src/message_input.dart @@ -110,7 +110,7 @@ class MessageInput extends StatefulWidget { this.actionsLocation = ActionsLocation.left, this.attachmentThumbnailBuilders, this.focusNode, - this.replyMessage, + this.replyToMessage, }) : super(key: key); /// Message to edit @@ -160,7 +160,7 @@ class MessageInput extends StatefulWidget { final FocusNode focusNode; /// - final Message replyMessage; + final Message replyToMessage; @override MessageInputState createState() => MessageInputState(); @@ -203,9 +203,9 @@ class MessageInputState extends State { /// The editing controller passed to the input TextField TextEditingController textEditingController; - Message _replyMessage; + Message _replyToMessage; - bool get _hasReplyMessage => _replyMessage != null; + bool get _hasReplyToMessage => _replyToMessage != null; @override Widget build(BuildContext context) { @@ -224,7 +224,7 @@ class MessageInputState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - if (_hasReplyMessage) + if (_hasReplyToMessage) Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -242,7 +242,7 @@ class MessageInputState extends State { visualDensity: VisualDensity.compact, icon: StreamSvgIcon.close_small(), onPressed: () { - setState(() => _replyMessage = null); + setState(() => _replyToMessage = null); }, ), ], @@ -417,7 +417,7 @@ class MessageInputState extends State { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - _buildRepyToMessage(), + _buildReplyToMessage(), _buildAttachments(), LimitedBox( maxHeight: widget.maxHeight, @@ -1321,20 +1321,20 @@ class MessageInputState extends State { _commandsOverlay = null; } - Widget _buildRepyToMessage() { - if (!_hasReplyMessage) { + Widget _buildReplyToMessage() { + if (!_hasReplyToMessage) { return Offstage(); } - final containsUrl = _replyMessage.attachments + final containsUrl = _replyToMessage.attachments ?.any((element) => element.ogScrapeUrl != null) == true; return Transform( transform: Matrix4.rotationY(pi), alignment: Alignment.center, - child: ReplyMessageWidget( + child: ReplyToMessageWidget( reverse: true, showBorder: !containsUrl, - message: _replyMessage, + message: _replyToMessage, messageTheme: StreamChatTheme.of(context).otherMessageTheme, ), ); @@ -1982,7 +1982,7 @@ class MessageInputState extends State { textEditingController.clear(); _attachments.clear(); - _replyMessage = null; + _replyToMessage = null; setState(() { _messageIsPresent = false; @@ -2014,6 +2014,12 @@ class MessageInputState extends State { ); } + if (widget.replyToMessage != null) { + message = message.copyWith( + replyToMessageId: widget.replyToMessage.id, + ); + } + if (widget.preMessageSending != null) { message = await widget.preMessageSending(message); } @@ -2057,7 +2063,7 @@ class MessageInputState extends State { void initState() { super.initState(); - _replyMessage = widget.replyMessage; + _replyToMessage = widget.replyToMessage; _focusNode = widget.focusNode ?? FocusNode(); @@ -2124,8 +2130,8 @@ class MessageInputState extends State { @override void didUpdateWidget(MessageInput oldWidget) { super.didUpdateWidget(oldWidget); - if (widget.replyMessage?.id != _replyMessage?.id) { - _replyMessage = widget.replyMessage; + if (widget.replyToMessage?.id != _replyToMessage?.id) { + _replyToMessage = widget.replyToMessage; } } } diff --git a/lib/src/message_widget.dart b/lib/src/message_widget.dart index 7ff4ff6e..affcc351 100644 --- a/lib/src/message_widget.dart +++ b/lib/src/message_widget.dart @@ -58,9 +58,6 @@ class MessageWidget extends StatefulWidget { /// The message final Message message; - /// The replyMessage - final Message replyMessage; - /// The message theme final MessageTheme messageTheme; @@ -140,7 +137,6 @@ class MessageWidget extends StatefulWidget { Key key, @required this.message, @required this.messageTheme, - this.replyMessage, this.reverse = false, this.translateUserAvatar = true, this.shape, @@ -241,7 +237,7 @@ class _MessageWidgetState extends State { bool get showInChannel => widget.showInChannelIndicator && widget.message?.showInChannel == true; - bool get _hasReplyMessage => widget.replyMessage != null; + bool get _hasReplyToMessage => widget.message?.replyToMessage != null; @override Widget build(BuildContext context) { @@ -352,7 +348,7 @@ class _MessageWidgetState extends State { shape: widget.shape ?? RoundedRectangleBorder( side: isOnlyEmoji && - !_hasReplyMessage + !_hasReplyToMessage ? BorderSide.none : widget.borderSide ?? BorderSide( @@ -383,10 +379,11 @@ class _MessageWidgetState extends State { mainAxisSize: MainAxisSize.min, children: [ - if (_hasReplyMessage) - ReplyMessageWidget( + if (_hasReplyToMessage) + ReplyToMessageWidget( message: widget - .replyMessage, + .message + .replyToMessage, messageTheme: isMyMessage ? StreamChatTheme.of( context) @@ -941,7 +938,7 @@ class _MessageWidgetState extends State { if (widget.message.attachments ?.any((element) => element.ogScrapeUrl != null) == true && - !_hasReplyMessage) + !_hasReplyToMessage) _buildUrlAttachment(), ], ), @@ -953,7 +950,7 @@ class _MessageWidgetState extends State { widget.message.text.characters.every((c) => Emoji.byChar(c) != null); Color _getBackgroundColor() { - if (_hasReplyMessage) { + if (_hasReplyToMessage) { return widget.messageTheme.messageBackgroundColor; } diff --git a/lib/src/reply_message_widget.dart b/lib/src/reply_message_widget.dart index 56f3112f..c335906b 100644 --- a/lib/src/reply_message_widget.dart +++ b/lib/src/reply_message_widget.dart @@ -63,7 +63,7 @@ class _VideoAttachmentThumbnailState extends State<_VideoAttachmentThumbnail> { } /// -class ReplyMessageWidget extends StatelessWidget { +class ReplyToMessageWidget extends StatelessWidget { /// The message final Message message; @@ -84,7 +84,7 @@ class ReplyMessageWidget extends StatelessWidget { attachmentThumbnailBuilders; /// - ReplyMessageWidget({ + ReplyToMessageWidget({ Key key, @required this.message, @required this.messageTheme, diff --git a/pubspec.yaml b/pubspec.yaml index 12374291..1c99b03b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -28,7 +28,8 @@ dependencies: file_picker: ^2.0.12 image_picker: ^0.6.7+2 flutter_keyboard_visibility: ^3.3.0 - stream_chat: ^0.2.20 + stream_chat: + path: ../stream-chat-dart mime: ^0.9.6+3 video_compress: ^2.1.1 visibility_detector: ^0.1.5