feat(ui): add support for quotedMessageBuilder.
Signed-off-by: xsahil03x <[email protected]>
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user