From fb9a1d5529a457be1202886eb705c09a075f7e9d Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Mon, 19 Feb 2024 13:43:41 -0500 Subject: [PATCH 01/10] don't erase already loaded rooms from space response map before loading more --- lib/pages/chat_list/space_view.dart | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index 3092840ff..4de73dcea 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -61,7 +61,9 @@ class _SpaceViewState extends State { // Pangea# void _refresh() { - _lastResponse.remove(widget.controller.activeSpaceId); + // #Pangea + // _lastResponse.remove(widget.controller.activseSpaceId); + // Pangea# loadHierarchy(); } @@ -93,9 +95,13 @@ class _SpaceViewState extends State { ); if (prevBatch != null) { + debugPrint( + "Adding ${_lastResponse[activeSpaceId]?.rooms} to ${response.rooms}", + ); response.rooms.insertAll(0, _lastResponse[activeSpaceId]?.rooms ?? []); } setState(() { + debugPrint("Setting state response to ${response.rooms}"); _lastResponse[activeSpaceId] = response; }); return _lastResponse[activeSpaceId]!; @@ -526,6 +532,7 @@ class _SpaceViewState extends State { Builder( builder: (context) { final response = _lastResponse[activeSpaceId]; + debugPrint('building space view wth response: $response'); final error = this.error; if (error != null) { return SliverFillRemaining( From e39b19877f2b680181adb9fc92af94171549824a Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Mon, 19 Feb 2024 13:48:17 -0500 Subject: [PATCH 02/10] remove debug print statements --- lib/pages/chat_list/space_view.dart | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index 4de73dcea..8e499deb8 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -95,13 +95,9 @@ class _SpaceViewState extends State { ); if (prevBatch != null) { - debugPrint( - "Adding ${_lastResponse[activeSpaceId]?.rooms} to ${response.rooms}", - ); response.rooms.insertAll(0, _lastResponse[activeSpaceId]?.rooms ?? []); } setState(() { - debugPrint("Setting state response to ${response.rooms}"); _lastResponse[activeSpaceId] = response; }); return _lastResponse[activeSpaceId]!; @@ -532,7 +528,6 @@ class _SpaceViewState extends State { Builder( builder: (context) { final response = _lastResponse[activeSpaceId]; - debugPrint('building space view wth response: $response'); final error = this.error; if (error != null) { return SliverFillRemaining( From d8927b606dd881bec487447850e4175df952ab8c Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Mon, 19 Feb 2024 14:01:45 -0500 Subject: [PATCH 03/10] replace error popup with scaffold message --- lib/utils/error_reporter.dart | 130 +++++++++++++++++----------------- 1 file changed, 64 insertions(+), 66 deletions(-) diff --git a/lib/utils/error_reporter.dart b/lib/utils/error_reporter.dart index cd051abbd..2449761c3 100644 --- a/lib/utils/error_reporter.dart +++ b/lib/utils/error_reporter.dart @@ -1,17 +1,6 @@ -import 'dart:io'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:flutter_highlighter/flutter_highlighter.dart'; -import 'package:flutter_highlighter/themes/shades-of-purple.dart'; import 'package:matrix/matrix.dart'; -import 'package:url_launcher/url_launcher.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; class ErrorReporter { final BuildContext context; @@ -21,63 +10,72 @@ class ErrorReporter { void onErrorCallback(Object error, [StackTrace? stackTrace]) async { Logs().e(message ?? 'Error caught', error, stackTrace); - final text = '$error\n${stackTrace ?? ''}'; - final consent = await showAdaptiveDialog( - context: context, - builder: (context) => AlertDialog.adaptive( - title: Text(L10n.of(context)!.reportErrorDescription), - content: SizedBox( - height: 256, - width: 256, - child: SingleChildScrollView( - child: HighlightView( - text, - language: 'sh', - theme: shadesOfPurpleTheme, - ), - ), - ), - actions: [ - TextButton( - onPressed: () => Navigator.of(context).pop(false), - child: Text(L10n.of(context)!.close), - ), - TextButton( - onPressed: () => Clipboard.setData( - ClipboardData(text: text), - ), - child: Text(L10n.of(context)!.copy), - ), - TextButton( - onPressed: () => Navigator.of(context).pop(true), - child: Text(L10n.of(context)!.report), - ), - ], - ), - ); - if (consent != true) return; - final os = kIsWeb ? 'web' : Platform.operatingSystem; - final version = await PlatformInfos.getVersion(); - final description = ''' -- Operating system: $os -- Version: $version - -### Exception -$error - -### StackTrace -${stackTrace?.toString().split('\n').take(10).join('\n')} -'''; - launchUrl( - AppConfig.newIssueUrl.resolveUri( - Uri( - queryParameters: { - 'title': '[BUG]: ${message ?? error.toString()}', - 'body': description, - }, + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + L10n.of(context)!.oopsSomethingWentWrong, ), ), - mode: LaunchMode.externalApplication, ); + // #Pangea +// final text = '$error\n${stackTrace ?? ''}'; +// final consent = await showAdaptiveDialog( +// context: context, +// builder: (context) => AlertDialog.adaptive( +// title: Text(L10n.of(context)!.reportErrorDescription), +// content: SizedBox( +// height: 256, +// width: 256, +// child: SingleChildScrollView( +// child: HighlightView( +// text, +// language: 'sh', +// theme: shadesOfPurpleTheme, +// ), +// ), +// ), +// actions: [ +// TextButton( +// onPressed: () => Navigator.of(context).pop(false), +// child: Text(L10n.of(context)!.close), +// ), +// TextButton( +// onPressed: () => Clipboard.setData( +// ClipboardData(text: text), +// ), +// child: Text(L10n.of(context)!.copy), +// ), +// TextButton( +// onPressed: () => Navigator.of(context).pop(true), +// child: Text(L10n.of(context)!.report), +// ), +// ], +// ), +// ); +// if (consent != true) return; +// final os = kIsWeb ? 'web' : Platform.operatingSystem; +// final version = await PlatformInfos.getVersion(); +// final description = ''' +// - Operating system: $os +// - Version: $version + +// ### Exception +// $error + +// ### StackTrace +// ${stackTrace?.toString().split('\n').take(10).join('\n')} +// '''; +// launchUrl( +// AppConfig.newIssueUrl.resolveUri( +// Uri( +// queryParameters: { +// 'title': '[BUG]: ${message ?? error.toString()}', +// 'body': description, +// }, +// ), +// ), +// mode: LaunchMode.externalApplication, +// ); +// Pangea# } } From 0a438fdcf2661cbe1baff78dce429ea6cc6efc69 Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Tue, 20 Feb 2024 16:26:00 -0500 Subject: [PATCH 04/10] audio stuff --- lib/pangea/controllers/text_to_speech_controller.dart | 10 ++++++---- lib/pangea/models/pangea_message_event.dart | 5 +++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/pangea/controllers/text_to_speech_controller.dart b/lib/pangea/controllers/text_to_speech_controller.dart index 10b204631..b7007ad1a 100644 --- a/lib/pangea/controllers/text_to_speech_controller.dart +++ b/lib/pangea/controllers/text_to_speech_controller.dart @@ -6,7 +6,6 @@ import 'package:fluffychat/pangea/config/environment.dart'; import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/network/urls.dart'; -import 'package:flutter/material.dart'; import 'package:http/http.dart'; import '../network/requests.dart'; @@ -37,15 +36,17 @@ class TextToSpeechRequest { class TextToSpeechResponse { String audioContent; - String mediaType; + String mimeType; int durationMillis; List waveform; + String fileExtension; TextToSpeechResponse({ required this.audioContent, - required this.mediaType, + required this.mimeType, required this.durationMillis, required this.waveform, + required this.fileExtension, }); factory TextToSpeechResponse.fromJson( @@ -53,9 +54,10 @@ class TextToSpeechResponse { ) => TextToSpeechResponse( audioContent: json["audio_content"], - mediaType: json["media_type"], + mimeType: json["mime_type"], durationMillis: json["duration_millis"], waveform: List.from(json["wave_form"]), + fileExtension: json["file_extension"], ); } diff --git a/lib/pangea/models/pangea_message_event.dart b/lib/pangea/models/pangea_message_event.dart index 4d2ddff37..9e130766a 100644 --- a/lib/pangea/models/pangea_message_event.dart +++ b/lib/pangea/models/pangea_message_event.dart @@ -114,12 +114,13 @@ class PangeaMessageEvent { // final fileName = // text.trim().replaceAll(RegExp('[^A-Za-z0-9]'), '').substring(0, 20); final eventIdParam = _event.eventId; - final fileName = "audio_for_${eventIdParam}_$langCode.mp3"; + final fileName = + "audio_for_${eventIdParam}_$langCode.${response.fileExtension}"; final file = MatrixAudioFile( bytes: audioBytes, name: fileName, - mimeType: "audio/mpeg", + mimeType: response.mimeType, ); // try { From 9ea5e85f1dde7c4e95bb86e0624e7607213e9314 Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Wed, 21 Feb 2024 13:56:10 -0500 Subject: [PATCH 05/10] overlay bbug fix --- lib/pangea/widgets/chat/message_toolbar.dart | 121 ++++++++++--------- 1 file changed, 62 insertions(+), 59 deletions(-) diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/widgets/chat/message_toolbar.dart index e410305d9..5b91181c1 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/widgets/chat/message_toolbar.dart @@ -64,53 +64,56 @@ class ToolbarDisplayController { messageWidth = transformTargetSize.width; } - Widget overlayEntry; - try { - overlayEntry = Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: pangeaMessageEvent.ownMessage - ? CrossAxisAlignment.end - : CrossAxisAlignment.start, - children: [ - toolbar!, - const SizedBox(height: 6), - OverlayMessage( - pangeaMessageEvent.event, - timeline: pangeaMessageEvent.timeline, - immersionMode: immersionMode, - ownMessage: pangeaMessageEvent.ownMessage, - toolbarController: this, - width: messageWidth, - ), - ], - ); - } catch (err) { - ErrorHandler.logError(e: err, s: StackTrace.current); - return; - } - OverlayUtil.showOverlay( - context: context, - child: overlayEntry, - transformTargetId: targetId, - targetAnchor: pangeaMessageEvent.ownMessage - ? Alignment.bottomRight - : Alignment.bottomLeft, - followerAnchor: pangeaMessageEvent.ownMessage - ? Alignment.bottomRight - : Alignment.bottomLeft, - backgroundColor: const Color.fromRGBO(0, 0, 0, 1).withAlpha(164), - ); + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + Widget overlayEntry; + try { + overlayEntry = Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: pangeaMessageEvent.ownMessage + ? CrossAxisAlignment.end + : CrossAxisAlignment.start, + children: [ + toolbar!, + const SizedBox(height: 6), + OverlayMessage( + pangeaMessageEvent.event, + timeline: pangeaMessageEvent.timeline, + immersionMode: immersionMode, + ownMessage: pangeaMessageEvent.ownMessage, + toolbarController: this, + width: messageWidth, + ), + ], + ); + } catch (err) { + ErrorHandler.logError(e: err, s: StackTrace.current); + return; + } - if (MatrixState.pAnyState.overlay != null) { - overlayId = MatrixState.pAnyState.overlay.hashCode.toString(); - } - - if (mode != null) { - Future.delayed( - const Duration(milliseconds: 100), - () => toolbarModeStream.add(mode), + OverlayUtil.showOverlay( + context: context, + child: overlayEntry, + transformTargetId: targetId, + targetAnchor: pangeaMessageEvent.ownMessage + ? Alignment.bottomRight + : Alignment.bottomLeft, + followerAnchor: pangeaMessageEvent.ownMessage + ? Alignment.bottomRight + : Alignment.bottomLeft, + backgroundColor: const Color.fromRGBO(0, 0, 0, 1).withAlpha(164), ); - } + + if (MatrixState.pAnyState.overlay != null) { + overlayId = MatrixState.pAnyState.overlay.hashCode.toString(); + } + + if (mode != null) { + Future.delayed( + const Duration(milliseconds: 100), + () => toolbarModeStream.add(mode), + ); + } + }); } bool get highlighted => @@ -141,12 +144,12 @@ class MessageToolbar extends StatefulWidget { class MessageToolbarState extends State { Widget? child; - MessageMode? _currentMode; + MessageMode? currentMode; bool hasSelectedText = false; - late StreamSubscription _selectionStream; - late StreamSubscription _toolbarModeStream; + late StreamSubscription selectionStream; + late StreamSubscription toolbarModeStream; - IconData _getIconData(MessageMode mode) { + IconData getIconData(MessageMode mode) { switch (mode) { case MessageMode.translation: return Icons.g_translate; @@ -159,7 +162,7 @@ class MessageToolbarState extends State { } } - bool _enabledButton(MessageMode mode) { + bool enabledButton(MessageMode mode) { switch (mode) { case MessageMode.translation: return true; @@ -175,8 +178,8 @@ class MessageToolbarState extends State { void updateMode(MessageMode newMode) { debugPrint("updating toolbar mode"); - setState(() => _currentMode = newMode); - switch (_currentMode) { + setState(() => currentMode = newMode); + switch (currentMode) { case MessageMode.translation: showTranslation(); break; @@ -240,11 +243,11 @@ class MessageToolbarState extends State { hasSelectedText = true; } - _toolbarModeStream = widget.toolbarModeStream.stream.listen((mode) { + toolbarModeStream = widget.toolbarModeStream.stream.listen((mode) { updateMode(mode); }); - _selectionStream = + selectionStream = widget.textSelection.selectionStream.stream.listen((value) { final bool shouldSetState = value != null && !hasSelectedText || value == null && hasSelectedText; @@ -257,8 +260,8 @@ class MessageToolbarState extends State { @override void dispose() { - _selectionStream.cancel(); - _toolbarModeStream.cancel(); + selectionStream.cancel(); + toolbarModeStream.cancel(); super.dispose(); } @@ -303,12 +306,12 @@ class MessageToolbarState extends State { mainAxisSize: MainAxisSize.min, children: MessageMode.values.map((mode) { return IconButton( - icon: Icon(_getIconData(mode)), - color: _currentMode == mode + icon: Icon(getIconData(mode)), + color: currentMode == mode ? Theme.of(context).colorScheme.primary : null, onPressed: - _enabledButton(mode) ? () => updateMode(mode) : null, + enabledButton(mode) ? () => updateMode(mode) : null, ); }).toList() + [ From 7b91d14870bb9cd104c72b4e38b1d328cf984285 Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Wed, 21 Feb 2024 14:09:52 -0500 Subject: [PATCH 06/10] translation updates --- lib/pangea/constants/model_keys.dart | 2 ++ lib/pangea/repo/full_text_translation_repo.dart | 6 ++++++ lib/pangea/widgets/chat/message_text_selection.dart | 2 ++ lib/pangea/widgets/chat/message_translation_card.dart | 4 +++- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/pangea/constants/model_keys.dart b/lib/pangea/constants/model_keys.dart index d027bce1d..6f0649dbb 100644 --- a/lib/pangea/constants/model_keys.dart +++ b/lib/pangea/constants/model_keys.dart @@ -51,6 +51,8 @@ class ModelKey { static const String word = "word"; static const String lang = "lang"; static const String deepL = "deepl"; + static const String offset = "offset"; + static const String length = "length"; static const String langCode = 'lang_code'; static const String wordLang = "word_lang"; static const String lemma = "lemma"; diff --git a/lib/pangea/repo/full_text_translation_repo.dart b/lib/pangea/repo/full_text_translation_repo.dart index a781b4b0d..704bb9d63 100644 --- a/lib/pangea/repo/full_text_translation_repo.dart +++ b/lib/pangea/repo/full_text_translation_repo.dart @@ -37,6 +37,8 @@ class FullTextTranslationRequestModel { String userL1; String userL2; bool? deepL; + int? offset; + int? length; FullTextTranslationRequestModel({ required this.text, @@ -45,6 +47,8 @@ class FullTextTranslationRequestModel { required this.userL2, required this.userL1, this.deepL = false, + this.offset, + this.length, }); //PTODO throw error for null @@ -56,6 +60,8 @@ class FullTextTranslationRequestModel { ModelKey.userL2: userL2, ModelKey.userL1: userL1, ModelKey.deepL: deepL, + ModelKey.offset: offset, + ModelKey.length: length, }; } diff --git a/lib/pangea/widgets/chat/message_text_selection.dart b/lib/pangea/widgets/chat/message_text_selection.dart index b41d62cbe..6263738f4 100644 --- a/lib/pangea/widgets/chat/message_text_selection.dart +++ b/lib/pangea/widgets/chat/message_text_selection.dart @@ -32,4 +32,6 @@ class MessageTextSelection { } selectionStream.add(selectedText); } + + int get offset => messageText.indexOf(selectedText!); } diff --git a/lib/pangea/widgets/chat/message_translation_card.dart b/lib/pangea/widgets/chat/message_translation_card.dart index c963dd251..ec24668e3 100644 --- a/lib/pangea/widgets/chat/message_translation_card.dart +++ b/lib/pangea/widgets/chat/message_translation_card.dart @@ -73,11 +73,13 @@ class MessageTranslationCardState extends State { final resp = await FullTextTranslationRepo.translate( accessToken: accessToken, request: FullTextTranslationRequestModel( - text: widget.selection.selectedText!, + text: widget.selection.messageText, tgtLang: translationLangCode()!, userL1: l1Code!, userL2: l2Code!, srcLang: widget.messageEvent.messageDisplayLangCode, + length: widget.selection.selectedText!.length, + offset: widget.selection.offset, ), ); From 40c7ef49c566e0e4882dc11790d5ff3b3a5368e4 Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Wed, 21 Feb 2024 14:35:23 -0500 Subject: [PATCH 07/10] update toolbar after highlight change --- lib/pangea/widgets/chat/message_toolbar.dart | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/widgets/chat/message_toolbar.dart index 5b91181c1..aa8a1de7b 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/widgets/chat/message_toolbar.dart @@ -247,14 +247,16 @@ class MessageToolbarState extends State { updateMode(mode); }); + Timer? timer; + selectionStream = widget.textSelection.selectionStream.stream.listen((value) { - final bool shouldSetState = - value != null && !hasSelectedText || value == null && hasSelectedText; - hasSelectedText = value != null; - if (shouldSetState) { - setState(() {}); - } + timer?.cancel(); + timer = Timer(const Duration(milliseconds: 750), () { + if (currentMode != null || value != null && value.isNotEmpty) { + updateMode(currentMode ?? MessageMode.translation); + } + }); }); } From c24619beb1b76621031fd1685522ca094ab29d22 Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Wed, 21 Feb 2024 14:39:16 -0500 Subject: [PATCH 08/10] autoplay audio in toolbar --- lib/pages/chat/events/audio_player.dart | 19 ++++++++++++++++++- .../widgets/chat/message_audio_card.dart | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/pages/chat/events/audio_player.dart b/lib/pages/chat/events/audio_player.dart index 8617303b0..0593c6122 100644 --- a/lib/pages/chat/events/audio_player.dart +++ b/lib/pages/chat/events/audio_player.dart @@ -15,12 +15,22 @@ import '../../../utils/matrix_sdk_extensions/event_extension.dart'; class AudioPlayerWidget extends StatefulWidget { final Color color; final Event event; + // #Pangea + final bool autoplay; + // Pangea# static String? currentId; static const int wavesCount = 40; - const AudioPlayerWidget(this.event, {this.color = Colors.black, super.key}); + const AudioPlayerWidget( + this.event, { + this.color = Colors.black, + super.key, + // #Pangea + this.autoplay = false, + // Pangea# + }); @override AudioPlayerState createState() => AudioPlayerState(); @@ -205,6 +215,13 @@ class AudioPlayerState extends State { void initState() { super.initState(); waveform = _getWaveform(); + // #Pangea + if (widget.autoplay) { + status == AudioPlayerStatus.downloaded + ? _playAction() + : _downloadAction(); + // Pangea# + } } @override diff --git a/lib/pangea/widgets/chat/message_audio_card.dart b/lib/pangea/widgets/chat/message_audio_card.dart index 05f8ffee2..aac21f66d 100644 --- a/lib/pangea/widgets/chat/message_audio_card.dart +++ b/lib/pangea/widgets/chat/message_audio_card.dart @@ -95,6 +95,7 @@ class MessageAudioCardState extends State { AudioPlayerWidget( localAudioEvent!, color: Theme.of(context).colorScheme.onPrimaryContainer, + autoplay: true, ), ], ), From 119789211c689a605f25ddc993f1b943449a2a97 Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Wed, 21 Feb 2024 14:46:50 -0500 Subject: [PATCH 09/10] switched to wordnet data --- lib/pangea/widgets/chat/message_toolbar.dart | 2 +- lib/pangea/widgets/igc/word_data_card.dart | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/widgets/chat/message_toolbar.dart index aa8a1de7b..913c77e4a 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/widgets/chat/message_toolbar.dart @@ -222,7 +222,7 @@ class MessageToolbarState extends State { wordLang: widget.pangeaMessageEvent.messageDisplayLangCode, fullText: widget.textSelection.messageText, fullTextLang: widget.pangeaMessageEvent.messageDisplayLangCode, - hasInfo: false, + hasInfo: true, room: widget.room, ); } diff --git a/lib/pangea/widgets/igc/word_data_card.dart b/lib/pangea/widgets/igc/word_data_card.dart index 9cf3da98f..7f68db5ea 100644 --- a/lib/pangea/widgets/igc/word_data_card.dart +++ b/lib/pangea/widgets/igc/word_data_card.dart @@ -7,9 +7,7 @@ import 'package:fluffychat/pangea/models/language_model.dart'; import 'package:fluffychat/pangea/utils/bot_style.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; -import 'package:fluffychat/pangea/widgets/common/bot_face_svg.dart'; import 'package:fluffychat/pangea/widgets/common/p_circular_loader.dart'; -import 'package:fluffychat/pangea/widgets/igc/card_header.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -183,10 +181,6 @@ class WordDataCardView extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ - CardHeader( - text: controller.widget.word, - botExpression: BotExpression.down, - ), if (controller.widget.choiceFeedback != null) Text( controller.widget.choiceFeedback!, From 2bf855028b9472edc35f27a6e3e5373f478e8567 Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Wed, 21 Feb 2024 14:51:29 -0500 Subject: [PATCH 10/10] card error widget --- .../widgets/chat/message_audio_card.dart | 6 ++---- .../chat/message_translation_card.dart | 21 ++++++++++--------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/pangea/widgets/chat/message_audio_card.dart b/lib/pangea/widgets/chat/message_audio_card.dart index aac21f66d..a7caba153 100644 --- a/lib/pangea/widgets/chat/message_audio_card.dart +++ b/lib/pangea/widgets/chat/message_audio_card.dart @@ -2,6 +2,7 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/events/audio_player.dart'; import 'package:fluffychat/pangea/models/pangea_message_event.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:fluffychat/pangea/widgets/igc/card_error_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; @@ -100,10 +101,7 @@ class MessageAudioCardState extends State { ], ), ) - : Padding( - padding: const EdgeInsets.only(left: 8), - child: playButton, - ), + : const CardErrorWidget(), ); } } diff --git a/lib/pangea/widgets/chat/message_translation_card.dart b/lib/pangea/widgets/chat/message_translation_card.dart index ec24668e3..50f6ff371 100644 --- a/lib/pangea/widgets/chat/message_translation_card.dart +++ b/lib/pangea/widgets/chat/message_translation_card.dart @@ -4,9 +4,9 @@ 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/widgets/chat/message_text_selection.dart'; +import 'package:fluffychat/pangea/widgets/igc/card_error_widget.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; class MessageTranslationCard extends StatefulWidget { final PangeaMessageEvent messageEvent; @@ -131,6 +131,12 @@ class MessageTranslationCardState extends State { @override Widget build(BuildContext context) { + if (!_fetchingRepresentation && + repEvent == null && + selectionTranslation == null) { + return const CardErrorWidget(); + } + return Padding( padding: const EdgeInsets.all(8), child: _fetchingRepresentation @@ -147,15 +153,10 @@ class MessageTranslationCardState extends State { selectionTranslation!, style: BotStyle.text(context), ) - : repEvent != null - ? Text( - repEvent!.text, - style: BotStyle.text(context), - ) - : Text( - L10n.of(context)!.oopsSomethingWentWrong, - style: BotStyle.text(context), - ), + : Text( + repEvent!.text, + style: BotStyle.text(context), + ), ); } }