feat(ui): add support for quotedMessageBuilder.

Signed-off-by: xsahil03x <[email protected]>
This commit is contained in:
Sahil Kumar
2023-06-16 02:37:56 +05:30
committed by xsahil03x
parent 190f267496
commit 09d9ec3ed5
4 changed files with 47 additions and 14 deletions
@@ -129,6 +129,7 @@ class StreamMessageInput extends StatefulWidget {
this.customAutocompleteTriggers = const [], this.customAutocompleteTriggers = const [],
this.mentionAllAppUsers = false, this.mentionAllAppUsers = false,
this.sendButtonBuilder, this.sendButtonBuilder,
this.quotedMessageBuilder,
this.shouldKeepFocusAfterMessage, this.shouldKeepFocusAfterMessage,
this.validator = _defaultValidator, this.validator = _defaultValidator,
this.restorationId, this.restorationId,
@@ -265,6 +266,9 @@ class StreamMessageInput extends StatefulWidget {
/// Builder for creating send button /// Builder for creating send button
final MessageRelatedBuilder? sendButtonBuilder; final MessageRelatedBuilder? sendButtonBuilder;
/// Builder for building quoted message
final Widget Function(BuildContext, Message)? quotedMessageBuilder;
/// Defines if the [StreamMessageInput] loses focuses after a message is sent. /// Defines if the [StreamMessageInput] loses focuses after a message is sent.
/// The default behaviour keeps focus until a command is enabled. /// The default behaviour keeps focus until a command is enabled.
final bool? shouldKeepFocusAfterMessage; final bool? shouldKeepFocusAfterMessage;
@@ -1126,15 +1130,20 @@ class StreamMessageInputState extends State<StreamMessageInput>
if (!_hasQuotedMessage) return const Offstage(); if (!_hasQuotedMessage) return const Offstage();
final containsUrl = _effectiveController.message.quotedMessage!.attachments final containsUrl = _effectiveController.message.quotedMessage!.attachments
.any((element) => element.titleLink != null); .any((element) => element.titleLink != null);
return StreamQuotedMessageWidget(
reverse: true, return widget.quotedMessageBuilder?.call(
showBorder: !containsUrl, context,
message: _effectiveController.message.quotedMessage!, _effectiveController.message.quotedMessage!,
messageTheme: _streamChatTheme.otherMessageTheme, ) ??
padding: const EdgeInsets.fromLTRB(8, 8, 8, 0), StreamQuotedMessageWidget(
onQuotedMessageClear: widget.onQuotedMessageCleared, reverse: true,
attachmentThumbnailBuilders: widget.attachmentThumbnailBuilders, showBorder: !containsUrl,
); message: _effectiveController.message.quotedMessage!,
messageTheme: _streamChatTheme.otherMessageTheme,
padding: const EdgeInsets.fromLTRB(8, 8, 8, 0),
onQuotedMessageClear: widget.onQuotedMessageCleared,
attachmentThumbnailBuilders: widget.attachmentThumbnailBuilders,
);
} }
Widget _buildAttachments() { Widget _buildAttachments() {
@@ -29,6 +29,7 @@ class MessageCard extends StatefulWidget {
this.borderSide, this.borderSide,
this.borderRadiusGeometry, this.borderRadiusGeometry,
this.textBuilder, this.textBuilder,
this.quotedMessageBuilder,
this.onLinkTap, this.onLinkTap,
this.onMentionTap, this.onMentionTap,
this.onQuotedMessageTap, this.onQuotedMessageTap,
@@ -82,6 +83,9 @@ class MessageCard extends StatefulWidget {
/// {@macro textBuilder} /// {@macro textBuilder}
final Widget Function(BuildContext, Message)? textBuilder; final Widget Function(BuildContext, Message)? textBuilder;
/// {@macro quotedMessageBuilder}
final Widget Function(BuildContext, Message)? quotedMessageBuilder;
/// {@macro onLinkTap} /// {@macro onLinkTap}
final void Function(String)? onLinkTap; final void Function(String)? onLinkTap;
@@ -130,6 +134,7 @@ class _MessageCardState extends State<MessageCard> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final onQuotedMessageTap = widget.onQuotedMessageTap; final onQuotedMessageTap = widget.onQuotedMessageTap;
final quotedMessageBuilder = widget.quotedMessageBuilder;
return Card( return Card(
elevation: 0, elevation: 0,
@@ -164,11 +169,15 @@ class _MessageCardState extends State<MessageCard> {
onQuotedMessageTap != null onQuotedMessageTap != null
? () => onQuotedMessageTap(widget.message.quotedMessageId) ? () => onQuotedMessageTap(widget.message.quotedMessageId)
: null, : null,
child: QuotedMessage( child: quotedMessageBuilder?.call(
reverse: widget.reverse, context,
message: widget.message, widget.message.quotedMessage!,
hasNonUrlAttachments: widget.hasNonUrlAttachments, ) ??
), QuotedMessage(
reverse: widget.reverse,
message: widget.message,
hasNonUrlAttachments: widget.hasNonUrlAttachments,
),
), ),
), ),
if (widget.hasNonUrlAttachments) if (widget.hasNonUrlAttachments)
@@ -79,6 +79,7 @@ class StreamMessageWidget extends StatefulWidget {
this.onMessageActions, this.onMessageActions,
this.onShowMessage, this.onShowMessage,
this.userAvatarBuilder, this.userAvatarBuilder,
this.quotedMessageBuilder,
this.editMessageInputBuilder, this.editMessageInputBuilder,
this.textBuilder, this.textBuilder,
@Deprecated(''' @Deprecated('''
@@ -354,6 +355,11 @@ class StreamMessageWidget extends StatefulWidget {
/// {@endtemplate} /// {@endtemplate}
final Widget Function(BuildContext, User)? userAvatarBuilder; final Widget Function(BuildContext, User)? userAvatarBuilder;
/// {@template quotedMessageBuilder}
/// Widget builder for building quoted message
/// {@endtemplate}
final Widget Function(BuildContext, Message)? quotedMessageBuilder;
/// {@template message} /// {@template message}
/// The message to display. /// The message to display.
/// {@endtemplate} /// {@endtemplate}
@@ -577,6 +583,7 @@ class StreamMessageWidget extends StatefulWidget {
Future<void> Function(Message)? onConfirmDeleteTap, Future<void> Function(Message)? onConfirmDeleteTap,
Widget Function(BuildContext, Message)? editMessageInputBuilder, Widget Function(BuildContext, Message)? editMessageInputBuilder,
Widget Function(BuildContext, Message)? textBuilder, Widget Function(BuildContext, Message)? textBuilder,
Widget Function(BuildContext, Message)? quotedMessageBuilder,
@Deprecated(''' @Deprecated('''
Use [bottomRowBuilderWithDefaultWidget] instead. Use [bottomRowBuilderWithDefaultWidget] instead.
Will be removed in the next major version. Will be removed in the next major version.
@@ -670,6 +677,7 @@ class StreamMessageWidget extends StatefulWidget {
editMessageInputBuilder: editMessageInputBuilder:
editMessageInputBuilder ?? this.editMessageInputBuilder, editMessageInputBuilder ?? this.editMessageInputBuilder,
textBuilder: textBuilder ?? this.textBuilder, textBuilder: textBuilder ?? this.textBuilder,
quotedMessageBuilder: quotedMessageBuilder ?? this.quotedMessageBuilder,
bottomRowBuilderWithDefaultWidget: _bottomRowBuilderWithDefaultWidget, bottomRowBuilderWithDefaultWidget: _bottomRowBuilderWithDefaultWidget,
onMessageActions: onMessageActions ?? this.onMessageActions, onMessageActions: onMessageActions ?? this.onMessageActions,
message: message ?? this.message, message: message ?? this.message,
@@ -965,6 +973,7 @@ class _StreamMessageWidgetState extends State<StreamMessageWidget>
borderSide: widget.borderSide, borderSide: widget.borderSide,
borderRadiusGeometry: widget.borderRadiusGeometry, borderRadiusGeometry: widget.borderRadiusGeometry,
textBuilder: widget.textBuilder, textBuilder: widget.textBuilder,
quotedMessageBuilder: widget.quotedMessageBuilder,
onLinkTap: widget.onLinkTap, onLinkTap: widget.onLinkTap,
onMentionTap: widget.onMentionTap, onMentionTap: widget.onMentionTap,
onQuotedMessageTap: widget.onQuotedMessageTap, onQuotedMessageTap: widget.onQuotedMessageTap,
@@ -63,6 +63,7 @@ class MessageWidgetContent extends StatelessWidget {
this.onMentionTap, this.onMentionTap,
this.onLinkTap, this.onLinkTap,
this.textBuilder, this.textBuilder,
this.quotedMessageBuilder,
@Deprecated(''' @Deprecated('''
Use [bottomRowBuilderWithDefaultWidget] instead. Use [bottomRowBuilderWithDefaultWidget] instead.
Will be removed in the next major version. Will be removed in the next major version.
@@ -170,6 +171,9 @@ class MessageWidgetContent extends StatelessWidget {
/// {@macro textBuilder} /// {@macro textBuilder}
final Widget Function(BuildContext, Message)? textBuilder; final Widget Function(BuildContext, Message)? textBuilder;
/// {@macro quotedMessageBuilder}
final Widget Function(BuildContext, Message)? quotedMessageBuilder;
/// {@macro showReactionPickerIndicator} /// {@macro showReactionPickerIndicator}
final bool showReactionPickerIndicator; final bool showReactionPickerIndicator;
@@ -351,6 +355,8 @@ class MessageWidgetContent extends StatelessWidget {
onMentionTap: onMentionTap, onMentionTap: onMentionTap,
onLinkTap: onLinkTap, onLinkTap: onLinkTap,
textBuilder: textBuilder, textBuilder: textBuilder,
quotedMessageBuilder:
quotedMessageBuilder,
borderRadiusGeometry: borderRadiusGeometry:
borderRadiusGeometry, borderRadiusGeometry,
borderSide: borderSide, borderSide: borderSide,