[Message Input] Add reply_to_message_id in case of threadless reply

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2020-12-28 19:08:50 +05:30
parent db7593b622
commit 46c9858bd4
4 changed files with 34 additions and 30 deletions
+22 -16
View File
@@ -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<MessageInput> {
/// 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<MessageInput> {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (_hasReplyMessage)
if (_hasReplyToMessage)
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
@@ -242,7 +242,7 @@ class MessageInputState extends State<MessageInput> {
visualDensity: VisualDensity.compact,
icon: StreamSvgIcon.close_small(),
onPressed: () {
setState(() => _replyMessage = null);
setState(() => _replyToMessage = null);
},
),
],
@@ -417,7 +417,7 @@ class MessageInputState extends State<MessageInput> {
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildRepyToMessage(),
_buildReplyToMessage(),
_buildAttachments(),
LimitedBox(
maxHeight: widget.maxHeight,
@@ -1321,20 +1321,20 @@ class MessageInputState extends State<MessageInput> {
_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<MessageInput> {
textEditingController.clear();
_attachments.clear();
_replyMessage = null;
_replyToMessage = null;
setState(() {
_messageIsPresent = false;
@@ -2014,6 +2014,12 @@ class MessageInputState extends State<MessageInput> {
);
}
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<MessageInput> {
void initState() {
super.initState();
_replyMessage = widget.replyMessage;
_replyToMessage = widget.replyToMessage;
_focusNode = widget.focusNode ?? FocusNode();
@@ -2124,8 +2130,8 @@ class MessageInputState extends State<MessageInput> {
@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;
}
}
}
+8 -11
View File
@@ -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<MessageWidget> {
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<MessageWidget> {
shape: widget.shape ??
RoundedRectangleBorder(
side: isOnlyEmoji &&
!_hasReplyMessage
!_hasReplyToMessage
? BorderSide.none
: widget.borderSide ??
BorderSide(
@@ -383,10 +379,11 @@ class _MessageWidgetState extends State<MessageWidget> {
mainAxisSize:
MainAxisSize.min,
children: <Widget>[
if (_hasReplyMessage)
ReplyMessageWidget(
if (_hasReplyToMessage)
ReplyToMessageWidget(
message: widget
.replyMessage,
.message
.replyToMessage,
messageTheme: isMyMessage
? StreamChatTheme.of(
context)
@@ -941,7 +938,7 @@ class _MessageWidgetState extends State<MessageWidget> {
if (widget.message.attachments
?.any((element) => element.ogScrapeUrl != null) ==
true &&
!_hasReplyMessage)
!_hasReplyToMessage)
_buildUrlAttachment(),
],
),
@@ -953,7 +950,7 @@ class _MessageWidgetState extends State<MessageWidget> {
widget.message.text.characters.every((c) => Emoji.byChar(c) != null);
Color _getBackgroundColor() {
if (_hasReplyMessage) {
if (_hasReplyToMessage) {
return widget.messageTheme.messageBackgroundColor;
}
+2 -2
View File
@@ -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,
+2 -1
View File
@@ -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