rebuild overlay on reaction event
This commit is contained in:
parent
99fc3fd625
commit
f125ed6fd8
2 changed files with 35 additions and 5 deletions
|
|
@ -1251,7 +1251,14 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
)) {
|
||||
return;
|
||||
}
|
||||
return sendEmojiAction(emoji.emoji);
|
||||
// #Pangea
|
||||
// return sendEmojiAction(emoji.emoji);
|
||||
sendEmojiAction(emoji.emoji);
|
||||
|
||||
// don't need to clear these when sending while in select mode,
|
||||
// but do need to clear these when reacting from the large emoji picker
|
||||
setState(() => selectedEvents.clear());
|
||||
// Pangea#
|
||||
}
|
||||
|
||||
void typeEmoji(Emoji? emoji) {
|
||||
|
|
@ -1298,16 +1305,16 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
|
||||
void sendEmojiAction(String? emoji) async {
|
||||
final events = List<Event>.from(selectedEvents);
|
||||
setState(() => selectedEvents.clear());
|
||||
// #Pangea
|
||||
// keep this event selected in case the user wants to send another emoji
|
||||
// setState(() => selectedEvents.clear());
|
||||
// Pangea#
|
||||
for (final event in events) {
|
||||
await room.sendReaction(
|
||||
event.eventId,
|
||||
emoji!,
|
||||
);
|
||||
}
|
||||
// #Pangea
|
||||
clearSelectedEvents();
|
||||
// Pangea#
|
||||
}
|
||||
|
||||
// #Pangea
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import 'dart:async';
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
|
|
@ -49,6 +50,7 @@ class MessageSelectionOverlay extends StatefulWidget {
|
|||
class MessageOverlayController extends State<MessageSelectionOverlay>
|
||||
with SingleTickerProviderStateMixin {
|
||||
late AnimationController _animationController;
|
||||
StreamSubscription? _reactionSubscription;
|
||||
Animation<double>? _overlayPositionAnimation;
|
||||
|
||||
MessageMode toolbarMode = MessageMode.translation;
|
||||
|
|
@ -73,6 +75,26 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
|
|||
activitiesLeftToComplete = activitiesLeftToComplete -
|
||||
widget._pangeaMessageEvent.numberOfActivitiesCompleted;
|
||||
|
||||
_reactionSubscription =
|
||||
widget.chatController.room.client.onSync.stream.where(
|
||||
(update) {
|
||||
// check if this sync update has a reaction event or a
|
||||
// redaction (of a reaction event). If so, rebuild the overlay
|
||||
final room = widget.chatController.room;
|
||||
final timelineEvents = update.rooms?.join?[room.id]?.timeline?.events;
|
||||
if (timelineEvents == null) return false;
|
||||
|
||||
final eventID = widget._pangeaMessageEvent.event.eventId;
|
||||
return timelineEvents.any(
|
||||
(e) =>
|
||||
e.type == EventTypes.Redaction ||
|
||||
(e.type == EventTypes.Reaction &&
|
||||
Event.fromMatrixEvent(e, room).relationshipEventId ==
|
||||
eventID),
|
||||
);
|
||||
},
|
||||
).listen((_) => setState(() {}));
|
||||
|
||||
setInitialToolbarMode();
|
||||
}
|
||||
|
||||
|
|
@ -315,6 +337,7 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
|
|||
@override
|
||||
void dispose() {
|
||||
_animationController.dispose();
|
||||
_reactionSubscription?.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue