From a39ba5cae064e70e9144fcb16b87e77c2255c154 Mon Sep 17 00:00:00 2001 From: Marcelo Amaro Date: Fri, 7 Feb 2025 12:03:05 -0300 Subject: [PATCH] feat: add support to reaction type of reply --- lib/src/models/ds_reply_content.model.dart | 21 +++++++++++++++---- .../utils/ds_message_content_type.util.dart | 1 + lib/src/widgets/utils/ds_card.widget.dart | 12 ++++------- sample/pubspec.lock | 2 +- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/lib/src/models/ds_reply_content.model.dart b/lib/src/models/ds_reply_content.model.dart index b5157d73..f872422d 100644 --- a/lib/src/models/ds_reply_content.model.dart +++ b/lib/src/models/ds_reply_content.model.dart @@ -1,3 +1,4 @@ +import '../utils/ds_message_content_type.util.dart'; import 'ds_reply_content_in_reply_to.model.dart'; import 'ds_reply_content_replied.model.dart'; @@ -11,11 +12,9 @@ class DSReplyContent { }); DSReplyContent.fromJson(Map json) - : replied = DSReplyContentReplied.fromJson( - json['replied'], - ), + : replied = _getContent(json), inReplyTo = DSReplyContentInReplyTo.fromJson( - json['inReplyTo'], + json['inReplyTo'] ?? json['inReactionTo'], ); Map toJson() { @@ -24,4 +23,18 @@ class DSReplyContent { 'inReplyTo': inReplyTo.toJson(), }; } + + static DSReplyContentReplied _getContent(Map json) => + json['replied'] != null + ? DSReplyContentReplied.fromJson( + json['replied'], + ) + : DSReplyContentReplied( + type: DSMessageContentType.textPlain, + value: String.fromCharCodes( + (json['emoji']['values'] as List).map( + (e) => e as int, + ), + ), + ); } diff --git a/lib/src/utils/ds_message_content_type.util.dart b/lib/src/utils/ds_message_content_type.util.dart index 2dc3f87b..d86f156d 100644 --- a/lib/src/utils/ds_message_content_type.util.dart +++ b/lib/src/utils/ds_message_content_type.util.dart @@ -14,4 +14,5 @@ abstract class DSMessageContentType { static const String applicationJson = 'application/json'; static const String reply = 'application/vnd.lime.reply+json'; static const String callsMedia = 'application/vnd.iris.calls.media+json'; + static const String reaction = 'application/vnd.lime.reaction+json'; } diff --git a/lib/src/widgets/utils/ds_card.widget.dart b/lib/src/widgets/utils/ds_card.widget.dart index 9a51b39e..c6a8c080 100644 --- a/lib/src/widgets/utils/ds_card.widget.dart +++ b/lib/src/widgets/utils/ds_card.widget.dart @@ -77,10 +77,6 @@ class DSCard extends StatelessWidget { @override Widget build(BuildContext context) { - return _resolveWidget(); - } - - Widget _resolveWidget() { switch (type) { case DSMessageContentType.textPlain: case DSMessageContentType.sensitive: @@ -94,10 +90,7 @@ class DSCard extends StatelessWidget { onTapReply: onTapReply, ); - case DSMessageContentType.contact: - return _buildContact(); - - case DSMessageContentType.reply: + case DSMessageContentType.reply || DSMessageContentType.reaction: final replyContent = DSReplyContent.fromJson(content); return DSCard( @@ -118,6 +111,9 @@ class DSCard extends StatelessWidget { onTapReply: onTapReply, ); + case DSMessageContentType.contact: + return _buildContact(); + case DSMessageContentType.mediaLink: return _buildMediaLink(); diff --git a/sample/pubspec.lock b/sample/pubspec.lock index b2116417..ce485469 100644 --- a/sample/pubspec.lock +++ b/sample/pubspec.lock @@ -31,7 +31,7 @@ packages: path: ".." relative: true source: path - version: "0.3.3" + version: "0.3.4" boolean_selector: dependency: transitive description: