From a911b9f852141472778ec0d3a2d1f8a6a5f69256 Mon Sep 17 00:00:00 2001 From: Kelrap Date: Tue, 6 Aug 2024 15:11:45 -0400 Subject: [PATCH] Attempt 1 of repositioning toolbar --- .../chat/message_selection_overlay.dart | 7 +++- lib/pangea/widgets/chat/message_toolbar.dart | 33 ++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/lib/pangea/widgets/chat/message_selection_overlay.dart b/lib/pangea/widgets/chat/message_selection_overlay.dart index 250e394a1..4bc4c21aa 100644 --- a/lib/pangea/widgets/chat/message_selection_overlay.dart +++ b/lib/pangea/widgets/chat/message_selection_overlay.dart @@ -8,12 +8,14 @@ class MessageSelectionOverlay extends StatelessWidget { final Function closeToolbar; final Widget toolbar; final Widget overlayMessage; + final bool ownMessage; const MessageSelectionOverlay({ required this.controller, required this.closeToolbar, required this.toolbar, required this.overlayMessage, + required this.ownMessage, super.key, }); @@ -22,6 +24,8 @@ class MessageSelectionOverlay extends StatelessWidget { return Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisSize: MainAxisSize.max, + crossAxisAlignment: + ownMessage ? CrossAxisAlignment.end : CrossAxisAlignment.start, children: [ OverlayHeader( controller: controller, @@ -33,7 +37,8 @@ class MessageSelectionOverlay extends StatelessWidget { Flexible( child: Column( mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.center, + crossAxisAlignment: + ownMessage ? CrossAxisAlignment.end : CrossAxisAlignment.start, children: [ toolbar, const SizedBox(height: 9), diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/widgets/chat/message_toolbar.dart index 8d64dc01d..29e587e85 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/widgets/chat/message_toolbar.dart @@ -5,6 +5,7 @@ import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pangea/enum/message_mode_enum.dart'; import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/utils/any_state_holder.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/overlay.dart'; import 'package:fluffychat/pangea/widgets/chat/message_audio_card.dart'; @@ -74,6 +75,36 @@ class ToolbarDisplayController { } focusNode.requestFocus(); + final LayerLinkAndKey layerLinkAndKey = + MatrixState.pAnyState.layerLinkAndKey(targetId); + final targetRenderBox = + layerLinkAndKey.key.currentContext?.findRenderObject(); + if (targetRenderBox != null) { + final Size transformTargetSize = (targetRenderBox as RenderBox).size; + messageWidth = transformTargetSize.width; + final Offset targetOffset = (targetRenderBox).localToGlobal(Offset.zero); + + final double minValue = + controller.scrollController.position.minScrollExtent; + final double maxValue = + controller.scrollController.position.maxScrollExtent; + final double middlePoint = controller.scrollController.offset - + targetOffset.dy + + MediaQuery.of(context).size.height / 2 + + 37; + + // Scroll so message is right under half point of screen + controller.scrollController.animateTo( + middlePoint < minValue + ? minValue + : middlePoint > maxValue + ? maxValue + : middlePoint, + duration: FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, + ); + } + final Widget overlayMessage = OverlayMessage( pangeaMessageEvent.event, timeline: pangeaMessageEvent.timeline, @@ -97,6 +128,7 @@ class ToolbarDisplayController { closeToolbar: closeToolbar, toolbar: toolbar!, overlayMessage: overlayMessage, + ownMessage: pangeaMessageEvent.ownMessage, ); } catch (err) { debugger(when: kDebugMode); @@ -129,7 +161,6 @@ class ToolbarDisplayController { () => toolbarModeStream.add(mode), ); } - // }); } bool get highlighted {