diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index ffd263952..0c7bc5f9f 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -1,6 +1,5 @@ -import 'dart:ui'; - import 'package:fluffychat/pangea/config/environment.dart'; +import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; abstract class AppConfig { @@ -26,7 +25,22 @@ abstract class AppConfig { static const double toolbarMinHeight = 175.0; static const double toolbarMinWidth = 350.0; static const double toolbarButtonsHeight = 50.0; - // #Pangea + static TextStyle messageTextStyle( + Event event, + Color textColor, + ) { + final fontSize = messageFontSize * fontSizeFactor; + final bigEmotes = + event.onlyEmotes && event.numberEmotes > 0 && event.numberEmotes <= 10; + + return TextStyle( + color: textColor, + fontSize: bigEmotes ? fontSize * 3 : fontSize, + decoration: event.redacted ? TextDecoration.lineThrough : null, + height: 1.3, + ); + } + // static const Color primaryColor = Color(0xFF5625BA); // static const Color primaryColorLight = Color(0xFFCCBDEA); static const Color primaryColor = Color(0xFF8560E0); diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index b97f4492e..f76a58f78 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -298,12 +298,8 @@ class MessageContent extends StatelessWidget { event.numberEmotes <= 10; // #Pangea - final messageTextStyle = TextStyle( - color: textColor, - fontSize: bigEmotes ? fontSize * 3 : fontSize, - decoration: event.redacted ? TextDecoration.lineThrough : null, - height: 1.3, - ); + final messageTextStyle = + AppConfig.messageTextStyle(event, textColor); if (immersionMode && pangeaMessageEvent != null) { return Flexible( @@ -349,15 +345,15 @@ class MessageContent extends StatelessWidget { MatrixLocals(L10n.of(context)!), hideReply: true, ), - style: TextStyle( - color: textColor, - fontSize: bigEmotes ? fontSize * 3 : fontSize, - decoration: - event.redacted ? TextDecoration.lineThrough : null, - // #Pangea - height: 1.3, - // Pangea# - ), + // #Pangea + // style: TextStyle( + // color: textColor, + // fontSize: bigEmotes ? fontSize * 3 : fontSize, + // decoration: + // event.redacted ? TextDecoration.lineThrough : null, + // ), + style: messageTextStyle, + // Pangea# options: const LinkifyOptions(humanize: false), linkStyle: TextStyle( color: textColor.withAlpha(150), diff --git a/lib/pangea/utils/bot_style.dart b/lib/pangea/utils/bot_style.dart index 36f9cb85d..1a74708e8 100644 --- a/lib/pangea/utils/bot_style.dart +++ b/lib/pangea/utils/bot_style.dart @@ -20,6 +20,7 @@ class BotStyle { fontStyle: italics ? FontStyle.italic : null, color: setColor ? Theme.of(context).colorScheme.primary : null, inherit: true, + height: 1.3, ); return existingStyle?.merge(botStyle) ?? botStyle; diff --git a/lib/pangea/widgets/chat/message_selection_overlay.dart b/lib/pangea/widgets/chat/message_selection_overlay.dart index 276ab1997..6de363c7b 100644 --- a/lib/pangea/widgets/chat/message_selection_overlay.dart +++ b/lib/pangea/widgets/chat/message_selection_overlay.dart @@ -375,7 +375,6 @@ class MessageOverlayController extends State final currentBottomOffset = _screenHeight! - _messageOffset!.dy - _messageHeight - - (_mediaQuery?.padding.bottom ?? 0) - _belowMessageHeight; final bool hasHeaderOverflow = @@ -496,8 +495,10 @@ class MessageOverlayController extends State // height of the reply/forward bar + the reaction picker + contextual padding double get _footerHeight { - return 56 + 16 + (FluffyThemes.isColumnMode(context) ? 16.0 : 8.0); - // (_mediaQuery?.padding.bottom ?? 0); + return 56 + + 16 + + (FluffyThemes.isColumnMode(context) ? 16.0 : 8.0) + + (_mediaQuery?.padding.bottom ?? 0); } MediaQueryData? get _mediaQuery { @@ -627,7 +628,6 @@ class MessageOverlayController extends State bottom: _screenHeight! - _messageOffset!.dy - _messageHeight - - (_mediaQuery?.padding.bottom ?? 0) - _belowMessageHeight, child: overlayMessage, ) @@ -643,41 +643,45 @@ class MessageOverlayController extends State }, ); - return SafeArea( - child: Padding( - padding: EdgeInsets.only( - left: horizontalPadding, - right: horizontalPadding, - ), - child: Stack( - children: [ - positionedOverlayMessage, - Align( - alignment: Alignment.bottomCenter, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - OverlayFooter(controller: widget.chatController), - ], - ), + return Padding( + padding: EdgeInsets.only( + left: horizontalPadding, + right: horizontalPadding, + ), + child: Stack( + children: [ + positionedOverlayMessage, + Align( + alignment: Alignment.bottomCenter, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + OverlayFooter(controller: widget.chatController), + SizedBox(height: _mediaQuery?.padding.bottom ?? 0), + ], ), - if (showDetails) - const SizedBox( - width: FluffyThemes.columnWidth, - ), - ], - ), + ), + if (showDetails) + const SizedBox( + width: FluffyThemes.columnWidth, + ), + ], ), - Material( - type: MaterialType.transparency, - child: OverlayHeader(controller: widget.chatController), + ), + Material( + type: MaterialType.transparency, + child: Column( + children: [ + SizedBox(height: _mediaQuery?.padding.top ?? 0), + OverlayHeader(controller: widget.chatController), + ], ), - ], - ), + ), + ], ), ); } diff --git a/lib/pangea/widgets/chat/message_translation_card.dart b/lib/pangea/widgets/chat/message_translation_card.dart index 7e33f9b07..42725e3dc 100644 --- a/lib/pangea/widgets/chat/message_translation_card.dart +++ b/lib/pangea/widgets/chat/message_translation_card.dart @@ -4,7 +4,6 @@ import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dar import 'package:fluffychat/pangea/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/models/representation_content_model.dart'; import 'package:fluffychat/pangea/repo/full_text_translation_repo.dart'; -import 'package:fluffychat/pangea/utils/bot_style.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/inline_tooltip.dart'; import 'package:fluffychat/pangea/widgets/chat/toolbar_content_loading_indicator.dart'; @@ -145,39 +144,44 @@ class MessageTranslationCardState extends State { return const ToolbarContentLoadingIndicator(); } - return Padding( - padding: const EdgeInsets.fromLTRB(16, 20, 16, 16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - widget.selection != null ? selectionTranslation! : repEvent!.text, - style: BotStyle.text(context), - textAlign: TextAlign.center, - ), - if (notGoingToTranslate && - widget.selection == null && - !InstructionsEnum.l1Translation.toggledOff()) - const Row( - mainAxisSize: MainAxisSize.min, - children: [ - InlineTooltip( - instructionsEnum: InstructionsEnum.l1Translation, - ), - ], + return SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 20, 16, 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + widget.selection != null ? selectionTranslation! : repEvent!.text, + style: AppConfig.messageTextStyle( + widget.messageEvent.event, + Theme.of(context).colorScheme.primary, + ), + textAlign: TextAlign.center, ), - if (widget.selection != null && - !InstructionsEnum.clickAgainToDeselect.toggledOff()) - const Row( - mainAxisSize: MainAxisSize.min, - children: [ - InlineTooltip( - instructionsEnum: InstructionsEnum.clickAgainToDeselect, - ), - ], - ), - ], + if (notGoingToTranslate && + widget.selection == null && + !InstructionsEnum.l1Translation.toggledOff()) + const Row( + mainAxisSize: MainAxisSize.min, + children: [ + InlineTooltip( + instructionsEnum: InstructionsEnum.l1Translation, + ), + ], + ), + if (widget.selection != null && + !InstructionsEnum.clickAgainToDeselect.toggledOff()) + const Row( + mainAxisSize: MainAxisSize.min, + children: [ + InlineTooltip( + instructionsEnum: InstructionsEnum.clickAgainToDeselect, + ), + ], + ), + ], + ), ), ); } diff --git a/lib/pangea/widgets/chat/overlay_message.dart b/lib/pangea/widgets/chat/overlay_message.dart index f754a6bcf..c6cab6b3d 100644 --- a/lib/pangea/widgets/chat/overlay_message.dart +++ b/lib/pangea/widgets/chat/overlay_message.dart @@ -115,7 +115,6 @@ class OverlayMessage extends StatelessWidget { vertical: 8, ), width: messageWidth, - height: messageHeight, child: MessageContent( pangeaMessageEvent.event, textColor: ownMessage diff --git a/lib/pangea/widgets/igc/card_error_widget.dart b/lib/pangea/widgets/igc/card_error_widget.dart index bbe1bc63b..54ca282be 100644 --- a/lib/pangea/widgets/igc/card_error_widget.dart +++ b/lib/pangea/widgets/igc/card_error_widget.dart @@ -23,7 +23,8 @@ class CardErrorWidget extends StatelessWidget { Widget build(BuildContext context) { final ErrorCopy errorCopy = ErrorCopy(context, error); - return ConstrainedBox( + return Container( + padding: const EdgeInsets.all(8), constraints: maxWidth != null ? BoxConstraints(maxWidth: maxWidth!) : const BoxConstraints(), diff --git a/lib/pangea/widgets/practice_activity/multiple_choice_activity.dart b/lib/pangea/widgets/practice_activity/multiple_choice_activity.dart index d668ec7a5..2127b11ce 100644 --- a/lib/pangea/widgets/practice_activity/multiple_choice_activity.dart +++ b/lib/pangea/widgets/practice_activity/multiple_choice_activity.dart @@ -7,7 +7,6 @@ import 'package:fluffychat/pangea/controllers/put_analytics_controller.dart'; import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_model.dart'; import 'package:fluffychat/pangea/models/practice_activities.dart/practice_activity_record_model.dart'; -import 'package:fluffychat/pangea/utils/bot_style.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/widgets/chat/message_audio_card.dart'; import 'package:fluffychat/pangea/widgets/chat/tts_controller.dart'; @@ -16,13 +15,14 @@ import 'package:fluffychat/pangea/widgets/practice_activity/word_audio_button.da import 'package:fluffychat/widgets/matrix.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; /// The multiple choice activity view class MultipleChoiceActivity extends StatefulWidget { final PracticeActivityCardState practiceCardController; final PracticeActivityModel currentActivity; final TtsController tts; - final String eventID; + final Event event; final VoidCallback? onError; const MultipleChoiceActivity({ @@ -30,7 +30,7 @@ class MultipleChoiceActivity extends StatefulWidget { required this.practiceCardController, required this.currentActivity, required this.tts, - required this.eventID, + required this.event, this.onError, }); @@ -126,7 +126,10 @@ class MultipleChoiceActivityState extends State { children: [ Text( practiceActivity.content.question, - style: BotStyle.text(context), + style: AppConfig.messageTextStyle( + widget.event, + Theme.of(context).colorScheme.primary, + ), ), const SizedBox(height: 8), if (practiceActivity.activityType == @@ -134,7 +137,7 @@ class MultipleChoiceActivityState extends State { WordAudioButton( text: practiceActivity.content.answer, ttsController: widget.tts, - eventID: widget.eventID, + eventID: widget.event.eventId, ), if (practiceActivity.activityType == ActivityTypeEnum.hiddenWordListening) diff --git a/lib/pangea/widgets/practice_activity/practice_activity_card.dart b/lib/pangea/widgets/practice_activity/practice_activity_card.dart index b82ff2b1a..d3e32778b 100644 --- a/lib/pangea/widgets/practice_activity/practice_activity_card.dart +++ b/lib/pangea/widgets/practice_activity/practice_activity_card.dart @@ -314,7 +314,7 @@ class PracticeActivityCardState extends State { practiceCardController: this, currentActivity: currentActivity!, tts: widget.ttsController, - eventID: widget.pangeaMessageEvent.eventId, + event: widget.pangeaMessageEvent.event, onError: _onError, ); }