position message overlay directly over the underlying message

pull/1384/head
ggurdin 1 year ago
parent ea6d8f355c
commit 2e139be658
No known key found for this signature in database
GPG Key ID: A01CB41737CBB478

@ -1588,6 +1588,8 @@ class ChatController extends State<ChatPageWithRoom>
void showToolbar(
PangeaMessageEvent pangeaMessageEvent, {
MessageMode? mode,
Event? nextEvent,
Event? prevEvent,
}) {
// Close keyboard, if open
if (inputFocus.hasFocus && PlatformInfos.isMobile) {
@ -1610,6 +1612,8 @@ class ChatController extends State<ChatPageWithRoom>
event: pangeaMessageEvent.event,
pangeaMessageEvent: pangeaMessageEvent,
textSelection: textSelection,
nextEvent: nextEvent,
prevEvent: prevEvent,
);
} catch (err) {
debugger(when: kDebugMode);

@ -25,6 +25,8 @@ class HtmlMessage extends StatelessWidget {
final bool isOverlay;
final PangeaMessageEvent? pangeaMessageEvent;
final ChatController controller;
final Event? nextEvent;
final Event? prevEvent;
// Pangea#
const HtmlMessage({
@ -36,6 +38,8 @@ class HtmlMessage extends StatelessWidget {
required this.isOverlay,
this.pangeaMessageEvent,
required this.controller,
this.nextEvent,
this.prevEvent,
// Pangea#
});
@ -99,7 +103,11 @@ class HtmlMessage extends StatelessWidget {
child: GestureDetector(
onTap: () {
if (pangeaMessageEvent != null && !isOverlay) {
controller.showToolbar(pangeaMessageEvent!);
controller.showToolbar(
pangeaMessageEvent!,
nextEvent: nextEvent,
prevEvent: prevEvent,
);
}
},
// Pangea#

@ -71,7 +71,11 @@ class Message extends StatelessWidget {
// #Pangea
void showToolbar(PangeaMessageEvent? pangeaMessageEvent) {
if (pangeaMessageEvent != null && !isOverlay) {
controller.showToolbar(pangeaMessageEvent);
controller.showToolbar(
pangeaMessageEvent,
nextEvent: nextEvent,
prevEvent: previousEvent,
);
}
}
// Pangea#
@ -445,12 +449,13 @@ class Message extends StatelessWidget {
onInfoTab: onInfoTab,
borderRadius: borderRadius,
// #Pangea
selected: selected,
pangeaMessageEvent:
pangeaMessageEvent,
immersionMode: immersionMode,
isOverlay: isOverlay,
controller: controller,
nextEvent: nextEvent,
prevEvent: previousEvent,
// Pangea#
),
if (event.hasAggregatedEvents(
@ -535,21 +540,18 @@ class Message extends StatelessWidget {
event.hasAggregatedEvents(timeline, RelationshipTypes.reaction);
// #Pangea
// if (showReceiptsRow || displayTime || selected || displayReadMarker) {
if (showReceiptsRow ||
if (!isOverlay &&
(showReceiptsRow ||
displayTime ||
selected ||
displayReadMarker ||
(pangeaMessageEvent?.showMessageButtons ?? false)) {
(pangeaMessageEvent?.showMessageButtons ?? false))) {
// Pangea#
container = Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment:
ownMessage ? CrossAxisAlignment.end : CrossAxisAlignment.start,
children: <Widget>[
// #Pangea
// if (displayTime || selected)
if ((displayTime || selected) && !isOverlay)
// Pangea#
if (displayTime || selected)
Padding(
padding: displayTime
? const EdgeInsets.symmetric(vertical: 8.0)
@ -581,8 +583,9 @@ class Message extends StatelessWidget {
duration: FluffyThemes.animationDuration,
curve: FluffyThemes.animationCurve,
// #Pangea
child: !showReceiptsRow &&
!(pangeaMessageEvent?.showMessageButtons ?? false)
child: isOverlay ||
(!showReceiptsRow &&
!(pangeaMessageEvent?.showMessageButtons ?? false))
// child: !showReceiptsRow
// Pangea#
? const SizedBox.shrink()
@ -602,10 +605,9 @@ class Message extends StatelessWidget {
MessageButtons(
controller: controller,
pangeaMessageEvent: pangeaMessageEvent!,
nextEvent: nextEvent,
prevEvent: previousEvent,
),
// #Pangea
if (!isOverlay)
// Pangea#
MessageReactions(event, timeline),
],
),
@ -673,7 +675,15 @@ class Message extends StatelessWidget {
left: 8.0,
right: 8.0,
top: nextEventSameSender ? 1.0 : 4.0,
bottom: previousEventSameSender ? 1.0 : 4.0,
bottom:
// #Pangea
isOverlay
? 0
:
// Pangea#
previousEventSameSender
? 1.0
: 4.0,
),
child: container,
),

@ -30,7 +30,6 @@ class MessageContent extends StatelessWidget {
final void Function(Event)? onInfoTab;
final BorderRadius borderRadius;
// #Pangea
final bool selected;
final PangeaMessageEvent? pangeaMessageEvent;
//question: are there any performance benefits to using booleans
//here rather than passing the choreographer? pangea rich text, a widget
@ -38,6 +37,8 @@ class MessageContent extends StatelessWidget {
final bool immersionMode;
final bool isOverlay;
final ChatController controller;
final Event? nextEvent;
final Event? prevEvent;
// Pangea#
const MessageContent(
@ -46,11 +47,12 @@ class MessageContent extends StatelessWidget {
super.key,
required this.textColor,
// #Pangea
required this.selected,
this.pangeaMessageEvent,
required this.immersionMode,
this.isOverlay = false,
required this.controller,
this.nextEvent,
this.prevEvent,
// Pangea#
required this.borderRadius,
});
@ -209,6 +211,8 @@ class MessageContent extends StatelessWidget {
isOverlay: isOverlay,
controller: controller,
pangeaMessageEvent: pangeaMessageEvent,
nextEvent: nextEvent,
prevEvent: prevEvent,
// Pangea#
);
}
@ -327,6 +331,8 @@ class MessageContent extends StatelessWidget {
controller: controller,
pangeaMessageEvent: pangeaMessageEvent,
isOverlay: isOverlay,
nextEvent: nextEvent,
prevEvent: prevEvent,
child:
// Pangea#
Linkify(

@ -2,21 +2,28 @@ 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:flutter/material.dart';
import 'package:matrix/matrix.dart';
class MessageButtons extends StatelessWidget {
final ChatController controller;
final PangeaMessageEvent pangeaMessageEvent;
final Event? nextEvent;
final Event? prevEvent;
const MessageButtons({
super.key,
required this.controller,
required this.pangeaMessageEvent,
this.nextEvent,
this.prevEvent,
});
void showActivity(BuildContext context) {
controller.showToolbar(
pangeaMessageEvent,
mode: MessageMode.practiceActivity,
nextEvent: nextEvent,
prevEvent: prevEvent,
);
}

@ -15,6 +15,7 @@ import 'package:fluffychat/pangea/widgets/practice_activity/practice_activity_ca
import 'package:fluffychat/widgets/matrix.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:matrix/matrix.dart';
class MessageToolbar extends StatefulWidget {
final MessageTextSelection textSelection;
@ -22,14 +23,11 @@ class MessageToolbar extends StatefulWidget {
final ChatController controller;
final MessageMode? initialMode;
final StreamController completeAnimationStream;
const MessageToolbar({
super.key,
required this.textSelection,
required this.pangeaMessageEvent,
required this.controller,
required this.completeAnimationStream,
this.initialMode,
});
@ -267,7 +265,6 @@ class MessageToolbarState extends State<MessageToolbar> {
child: AnimatedSize(
duration: FluffyThemes.animationDuration,
child: toolbarContent,
onEnd: () => widget.completeAnimationStream.add(null),
),
),
),
@ -284,12 +281,16 @@ class ToolbarSelectionArea extends StatelessWidget {
final PangeaMessageEvent? pangeaMessageEvent;
final bool isOverlay;
final Widget child;
final Event? nextEvent;
final Event? prevEvent;
const ToolbarSelectionArea({
required this.controller,
this.pangeaMessageEvent,
this.isOverlay = false,
required this.child,
this.nextEvent,
this.prevEvent,
super.key,
});
@ -302,12 +303,20 @@ class ToolbarSelectionArea extends StatelessWidget {
child: GestureDetector(
onTap: () {
if (pangeaMessageEvent != null && !isOverlay) {
controller.showToolbar(pangeaMessageEvent!);
controller.showToolbar(
pangeaMessageEvent!,
nextEvent: nextEvent,
prevEvent: prevEvent,
);
}
},
onLongPress: () {
if (pangeaMessageEvent != null && !isOverlay) {
controller.showToolbar(pangeaMessageEvent!);
controller.showToolbar(
pangeaMessageEvent!,
nextEvent: nextEvent,
prevEvent: prevEvent,
);
}
},
child: child,

@ -12,6 +12,7 @@ import 'package:fluffychat/pangea/widgets/chat/message_toolbar.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart';
import '../../models/pangea_match_model.dart';
@ -21,6 +22,8 @@ class PangeaRichText extends StatefulWidget {
final TextStyle? style;
final bool isOverlay;
final ChatController controller;
final Event? nextEvent;
final Event? prevEvent;
const PangeaRichText({
super.key,
@ -28,6 +31,8 @@ class PangeaRichText extends StatefulWidget {
required this.immersionMode,
required this.isOverlay,
required this.controller,
this.nextEvent,
this.prevEvent,
this.style,
});
@ -139,6 +144,8 @@ class PangeaRichTextState extends State<PangeaRichText> {
isOverlay: widget.isOverlay,
pangeaMessageEvent: widget.pangeaMessageEvent,
controller: widget.controller,
nextEvent: widget.nextEvent,
prevEvent: widget.prevEvent,
child: RichText(
text: TextSpan(
text: textSpan,

Loading…
Cancel
Save