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