refactor: Use more robust and performant way to detect single emoji messages
This commit is contained in:
parent
29fcc223d6
commit
f0aa15843b
4 changed files with 18 additions and 3 deletions
|
|
@ -104,6 +104,8 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
|
||||
String? activeThreadId;
|
||||
|
||||
late final Set<String> bigEmojis;
|
||||
|
||||
late final String readMarkerEventId;
|
||||
|
||||
String get roomId => widget.room.id;
|
||||
|
|
@ -360,6 +362,14 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
AppSettings.displayChatDetailsColumn.value,
|
||||
);
|
||||
|
||||
bigEmojis = defaultEmojiSet.fold(
|
||||
<String>{},
|
||||
(emojis, category) => {
|
||||
...emojis,
|
||||
...(category.emoji.map((emoji) => emoji.emoji)),
|
||||
},
|
||||
);
|
||||
|
||||
sendingClient = Matrix.of(context).client;
|
||||
final lastEventThreadId =
|
||||
room.lastEvent?.relationshipType == RelationshipTypes.thread
|
||||
|
|
|
|||
|
|
@ -144,6 +144,7 @@ class ChatEventList extends StatelessWidget {
|
|||
controller: controller.scrollController,
|
||||
child: Message(
|
||||
event,
|
||||
bigEmojis: controller.bigEmojis,
|
||||
animateIn: animateIn,
|
||||
resetAnimateIn: () {
|
||||
controller.animateInEventIndex = null;
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ class Message extends StatelessWidget {
|
|||
final List<Color> colors;
|
||||
final void Function()? onExpand;
|
||||
final bool isCollapsed;
|
||||
final Set<String> bigEmojis;
|
||||
|
||||
const Message(
|
||||
this.event, {
|
||||
|
|
@ -55,6 +56,7 @@ class Message extends StatelessWidget {
|
|||
this.previousEvent,
|
||||
this.displayReadMarker = false,
|
||||
this.longPressSelect = false,
|
||||
required this.bigEmojis,
|
||||
required this.onSelect,
|
||||
required this.onInfoTab,
|
||||
required this.scrollToEventId,
|
||||
|
|
@ -612,6 +614,7 @@ class Message extends StatelessWidget {
|
|||
borderRadius,
|
||||
timeline: timeline,
|
||||
selected: selected,
|
||||
bigEmojis: bigEmojis,
|
||||
),
|
||||
if (event
|
||||
.hasAggregatedEvents(
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ class MessageContent extends StatelessWidget {
|
|||
final BorderRadius borderRadius;
|
||||
final Timeline timeline;
|
||||
final bool selected;
|
||||
final Set<String> bigEmojis;
|
||||
|
||||
const MessageContent(
|
||||
this.event, {
|
||||
|
|
@ -45,6 +46,7 @@ class MessageContent extends StatelessWidget {
|
|||
required this.linkColor,
|
||||
required this.borderRadius,
|
||||
required this.selected,
|
||||
required this.bigEmojis,
|
||||
});
|
||||
|
||||
Future<void> _verifyOrRequestKey(BuildContext context) async {
|
||||
|
|
@ -258,9 +260,8 @@ class MessageContent extends StatelessWidget {
|
|||
}
|
||||
|
||||
final bigEmotes =
|
||||
event.onlyEmotes &&
|
||||
event.numberEmotes > 0 &&
|
||||
event.numberEmotes <= 3;
|
||||
!event.isRichMessage && bigEmojis.contains(event.body);
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||
child: HtmlMessage(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue