Merge pull request #719 from pangeachat/scrollable-overlay-message

Scrollable overlay message
pull/1402/head
ggurdin 1 year ago committed by GitHub
commit 615bad2b37
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -232,8 +232,8 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
messageSize!.height - messageSize!.height -
toolbarButtonsHeight; toolbarButtonsHeight;
final bool hasHeaderOverflow = (messageOffset!.dy - toolbarButtonsHeight) < final bool hasHeaderOverflow =
(AppConfig.toolbarMaxHeight + headerHeight); messageOffset!.dy < (AppConfig.toolbarMaxHeight + headerHeight);
final bool hasFooterOverflow = footerHeight > currentBottomOffset; final bool hasFooterOverflow = footerHeight > currentBottomOffset;
if (!hasHeaderOverflow && !hasFooterOverflow) return; if (!hasHeaderOverflow && !hasFooterOverflow) return;
@ -252,7 +252,8 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
newTopOffset < (headerHeight + AppConfig.toolbarMaxHeight); newTopOffset < (headerHeight + AppConfig.toolbarMaxHeight);
if (hasHeaderOverflow || upshiftCausesHeaderOverflow) { if (hasHeaderOverflow || upshiftCausesHeaderOverflow) {
animationEndOffset = midpoint - messageSize!.height; animationEndOffset =
midpoint - messageSize!.height - toolbarButtonsHeight;
final totalTopOffset = final totalTopOffset =
animationEndOffset + messageSize!.height + AppConfig.toolbarMaxHeight; animationEndOffset + messageSize!.height + AppConfig.toolbarMaxHeight;
final remainingSpace = screenHeight - totalTopOffset; final remainingSpace = screenHeight - totalTopOffset;
@ -266,6 +267,15 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
animationEndOffset = footerHeight; animationEndOffset = footerHeight;
} }
if (animationEndOffset < footerHeight + toolbarButtonsHeight) {
adjustedMessageHeight = screenHeight -
AppConfig.toolbarMaxHeight -
headerHeight -
footerHeight -
toolbarButtonsHeight;
animationEndOffset = footerHeight;
}
_overlayPositionAnimation = Tween<double>( _overlayPositionAnimation = Tween<double>(
begin: currentBottomOffset, begin: currentBottomOffset,
end: animationEndOffset, end: animationEndOffset,
@ -296,6 +306,7 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
Size? get messageSize => messageRenderBox?.size; Size? get messageSize => messageRenderBox?.size;
Offset? get messageOffset => messageRenderBox?.localToGlobal(Offset.zero); Offset? get messageOffset => messageRenderBox?.localToGlobal(Offset.zero);
double? adjustedMessageHeight;
// height of the reply/forward bar + the reaction picker + contextual padding // height of the reply/forward bar + the reaction picker + contextual padding
double get footerHeight => double get footerHeight =>
@ -352,9 +363,12 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
pangeaMessageEvent: widget._pangeaMessageEvent, pangeaMessageEvent: widget._pangeaMessageEvent,
overLayController: this, overLayController: this,
), ),
OverlayMessage( SizedBox(
height: adjustedMessageHeight,
child: OverlayMessage(
pangeaMessageEvent, pangeaMessageEvent,
immersionMode: widget.chatController.choreographer.immersionMode, immersionMode:
widget.chatController.choreographer.immersionMode,
controller: widget.chatController, controller: widget.chatController,
overlayController: this, overlayController: this,
nextEvent: widget._nextEvent, nextEvent: widget._nextEvent,
@ -363,6 +377,7 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
messageWidth: messageSize!.width, messageWidth: messageSize!.width,
messageHeight: messageSize!.height, messageHeight: messageSize!.height,
), ),
),
ToolbarButtons( ToolbarButtons(
overlayController: this, overlayController: this,
width: 250, width: 250,

@ -133,6 +133,9 @@ class MessageToolbarState extends State<MessageToolbar> {
Radius.circular(AppConfig.borderRadius), Radius.circular(AppConfig.borderRadius),
), ),
), ),
constraints: const BoxConstraints(
maxHeight: AppConfig.toolbarMaxHeight,
),
child: Row( child: Row(
children: [ children: [
Expanded( Expanded(

@ -88,6 +88,7 @@ class OverlayMessage extends StatelessWidget {
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: borderRadius, borderRadius: borderRadius,
), ),
child: SingleChildScrollView(
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular( borderRadius: BorderRadius.circular(
@ -114,6 +115,7 @@ class OverlayMessage extends StatelessWidget {
borderRadius: borderRadius, borderRadius: borderRadius,
), ),
), ),
),
); );
} }
} }

Loading…
Cancel
Save