diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 67e459e03..0d2e180a7 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -535,6 +535,12 @@ class ChatController extends State }); // #Pangea + final List edittingEvents = []; + void clearEdittingEvent(String eventId) { + edittingEvents.remove(eventId); + setState(() {}); + } + // Future send() async { // Original send function gets the tx id within the matrix lib, // but for choero, the tx id is generated before the message send. @@ -577,6 +583,7 @@ class ChatController extends State // editEventId: editEvent?.eventId, // parseCommands: parseCommands, // ); + final previousEdit = editEvent; room .pangeaSendTextEvent( sendController.text, @@ -592,6 +599,13 @@ class ChatController extends State ) .then( (String? msgEventId) { + // #Pangea + setState(() { + if (previousEdit != null) { + edittingEvents.add(previousEdit.eventId); + } + }); + // Pangea# GoogleAnalytics.sendMessage( room.id, room.classCode, @@ -1219,7 +1233,7 @@ class ChatController extends State void clearSelectedEvents() => setState(() { selectedEvents.clear(); showEmojiPicker = false; -//#Pangea + //#Pangea choreographer.messageOptions.resetSelectedDisplayLang(); //Pangea# }); diff --git a/lib/pages/chat/events/message.dart b/lib/pages/chat/events/message.dart index 5b1a56cf5..cc537a858 100644 --- a/lib/pages/chat/events/message.dart +++ b/lib/pages/chat/events/message.dart @@ -68,10 +68,21 @@ class Message extends StatelessWidget { super.key, }); + // #Pangea + PangeaMessageEvent? get pangeaMessageEvent => + controller.getPangeaMessageEvent(event.eventId); + // Pangea# + @override Widget build(BuildContext context) { // #Pangea debugPrint('Message.build()'); + WidgetsBinding.instance.addPostFrameCallback((_) { + if (controller.edittingEvents.contains(event.eventId)) { + pangeaMessageEvent?.updateLatestEdit(); + controller.clearEdittingEvent(event.eventId); + } + }); // Pangea# if (!{ EventTypes.Message, @@ -141,8 +152,6 @@ class Message extends StatelessWidget { } // #Pangea - final PangeaMessageEvent? pangeaMessageEvent = - controller.getPangeaMessageEvent(event.eventId); ToolbarDisplayController? toolbarController; if (event.messageType == MessageTypes.Text || event.messageType == MessageTypes.Notice) { diff --git a/lib/pangea/models/pangea_message_event.dart b/lib/pangea/models/pangea_message_event.dart index ebc8c2665..b8eb99a0a 100644 --- a/lib/pangea/models/pangea_message_event.dart +++ b/lib/pangea/models/pangea_message_event.dart @@ -69,6 +69,12 @@ class PangeaMessageEvent { .firstOrNull ?? _event; + Event updateLatestEdit() { + _latestEditCache = null; + _representations = null; + return _latestEdit; + } + bool showRichText(bool selected, bool highlighted) { if (!_isValidPangeaMessageEvent) { return false;