From 589901150dccb2f647d25fc6d0847158a107f7c3 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Thu, 27 Jun 2024 09:53:20 -0400 Subject: [PATCH 1/5] error handling for error found by blue --- lib/pangea/utils/error_handler.dart | 5 +++++ lib/pangea/widgets/igc/pangea_rich_text.dart | 23 ++++++++++++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/lib/pangea/utils/error_handler.dart b/lib/pangea/utils/error_handler.dart index d66c29186..2144e9f87 100644 --- a/lib/pangea/utils/error_handler.dart +++ b/lib/pangea/utils/error_handler.dart @@ -8,6 +8,11 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:http/http.dart' as http; import 'package:sentry_flutter/sentry_flutter.dart'; +class PangeaWarningError implements Exception { + final String message; + PangeaWarningError(message) : message = "Pangea Warning Error: $message"; +} + class ErrorHandler { ErrorHandler(); diff --git a/lib/pangea/widgets/igc/pangea_rich_text.dart b/lib/pangea/widgets/igc/pangea_rich_text.dart index bbd6868bf..afb72c0d9 100644 --- a/lib/pangea/widgets/igc/pangea_rich_text.dart +++ b/lib/pangea/widgets/igc/pangea_rich_text.dart @@ -57,13 +57,22 @@ class PangeaRichTextState extends State { } void _setTextSpan(String newTextSpan) { - widget.toolbarController?.toolbar?.textSelection.setMessageText( - newTextSpan, - ); - if (mounted) { - setState(() { - textSpan = newTextSpan; - }); + try { + widget.toolbarController?.toolbar?.textSelection.setMessageText( + newTextSpan, + ); + if (mounted) { + setState(() { + textSpan = newTextSpan; + }); + } + } catch (err, stack) { + ErrorHandler.logError( + e: PangeaWarningError( + err.toString(), + ), + s: stack, + ); } } From e35be8f8628a6f2c225f31e8410c3ad8c97049f2 Mon Sep 17 00:00:00 2001 From: bluearevalo <90929912+bluearevalo@users.noreply.github.com> Date: Thu, 27 Jun 2024 13:19:59 -0400 Subject: [PATCH 2/5] added error handling messages for Sentry --- lib/pangea/widgets/igc/pangea_rich_text.dart | 101 ++++++++---------- .../fcm_shared_isolate/pubspec.lock | 12 +++ pubspec.yaml | 4 +- 3 files changed, 57 insertions(+), 60 deletions(-) diff --git a/lib/pangea/widgets/igc/pangea_rich_text.dart b/lib/pangea/widgets/igc/pangea_rich_text.dart index afb72c0d9..7391edb05 100644 --- a/lib/pangea/widgets/igc/pangea_rich_text.dart +++ b/lib/pangea/widgets/igc/pangea_rich_text.dart @@ -56,70 +56,55 @@ class PangeaRichTextState extends State { setTextSpan(); } - void _setTextSpan(String newTextSpan) { - try { - widget.toolbarController?.toolbar?.textSelection.setMessageText( - newTextSpan, - ); - if (mounted) { - setState(() { - textSpan = newTextSpan; - }); - } - } catch (err, stack) { - ErrorHandler.logError( - e: PangeaWarningError( - err.toString(), - ), - s: stack, - ); - } +void _setTextSpan(String newTextSpan) { + try { + if (!mounted) return; // Early exit if the widget is no longer in the tree + + widget.toolbarController?.toolbar?.textSelection.setMessageText( + newTextSpan, + ); + setState(() { + textSpan = newTextSpan; + }); + } catch (error, stackTrace) { + ErrorHandler.logError(e: error, s: stackTrace, m: "Error setting text span in PangeaRichText"); } +} - void setTextSpan() { - if (_fetchingRepresentation == true) { - _setTextSpan( - textSpan = widget.pangeaMessageEvent.event - .getDisplayEvent(widget.pangeaMessageEvent.timeline) - .body, - ); - return; - } +void setTextSpan() { + if (_fetchingRepresentation) { + _setTextSpan(widget.pangeaMessageEvent.event.getDisplayEvent(widget.pangeaMessageEvent.timeline).body); + return; + } - if (widget.pangeaMessageEvent.eventId.contains("webdebug")) { - debugger(when: kDebugMode); - } + if (widget.pangeaMessageEvent.eventId.contains("webdebug")) { + debugger(when: kDebugMode); + } - repEvent = widget.pangeaMessageEvent - .representationByLanguage( - widget.pangeaMessageEvent.messageDisplayLangCode, - ) - ?.content; - - if (repEvent == null) { - setState(() => _fetchingRepresentation = true); - widget.pangeaMessageEvent - .representationByLanguageGlobal( - langCode: widget.pangeaMessageEvent.messageDisplayLangCode, - ) - .onError( - (error, stackTrace) => - ErrorHandler.logError(e: error, s: stackTrace), - ) - .then((event) { - repEvent = event; - _setTextSpan(repEvent?.text ?? widget.pangeaMessageEvent.body); - }).whenComplete(() { - if (mounted) { - setState(() => _fetchingRepresentation = false); - } - }); + repEvent = widget.pangeaMessageEvent + .representationByLanguage(widget.pangeaMessageEvent.messageDisplayLangCode) + ?.content; + + if (repEvent == null) { + setState(() => _fetchingRepresentation = true); + widget.pangeaMessageEvent + .representationByLanguageGlobal(langCode: widget.pangeaMessageEvent.messageDisplayLangCode) + .onError((error, stackTrace) => ErrorHandler.logError(e: error, s: stackTrace, m: "Error fetching representation")) + .then((event) { + if (!mounted) return; + repEvent = event; + _setTextSpan(repEvent?.text ?? widget.pangeaMessageEvent.body); + }).whenComplete(() { + if (mounted) { + setState(() => _fetchingRepresentation = false); + } + }); - _setTextSpan(widget.pangeaMessageEvent.body); - } else { - _setTextSpan(repEvent!.text); - } + _setTextSpan(widget.pangeaMessageEvent.body); + } else { + _setTextSpan(repEvent!.text); } +} @override Widget build(BuildContext context) { diff --git a/pangea_packages/fcm_shared_isolate/pubspec.lock b/pangea_packages/fcm_shared_isolate/pubspec.lock index 55c0cb16e..7f3457dbe 100644 --- a/pangea_packages/fcm_shared_isolate/pubspec.lock +++ b/pangea_packages/fcm_shared_isolate/pubspec.lock @@ -149,33 +149,41 @@ packages: description: name: matcher sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted version: "0.12.16+1" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted version: "0.8.0" + version: "0.8.0" meta: dependency: transitive description: name: meta sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted version: "1.12.0" + version: "1.12.0" path: dependency: transitive description: name: path sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted version: "1.9.0" + version: "1.9.0" pedantic: dependency: "direct dev" description: @@ -242,9 +250,11 @@ packages: description: name: test_api sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted version: "0.7.0" + version: "0.7.0" vector_math: dependency: transitive description: @@ -272,3 +282,5 @@ packages: sdks: dart: ">=3.3.0 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/pubspec.yaml b/pubspec.yaml index ce6ef99dc..85cfeb074 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -148,8 +148,8 @@ flutter: # #Pangea # uncomment this to enable mobile builds # causes error with github actions - # - .env - # - assets/.env + - .env + - assets/.env - assets/pangea/ - assets/pangea/bot_faces/ # Pangea# From 275e5c94f370253ae9ea5e89d78c25e76ba78acc Mon Sep 17 00:00:00 2001 From: ggurdin Date: Mon, 1 Jul 2024 12:04:11 -0400 Subject: [PATCH 3/5] formatted pangea_rich_text file --- lib/pangea/widgets/igc/pangea_rich_text.dart | 104 +++++++++++-------- 1 file changed, 61 insertions(+), 43 deletions(-) diff --git a/lib/pangea/widgets/igc/pangea_rich_text.dart b/lib/pangea/widgets/igc/pangea_rich_text.dart index 7391edb05..451423bb2 100644 --- a/lib/pangea/widgets/igc/pangea_rich_text.dart +++ b/lib/pangea/widgets/igc/pangea_rich_text.dart @@ -56,55 +56,73 @@ class PangeaRichTextState extends State { setTextSpan(); } -void _setTextSpan(String newTextSpan) { - try { - if (!mounted) return; // Early exit if the widget is no longer in the tree + void _setTextSpan(String newTextSpan) { + try { + if (!mounted) return; // Early exit if the widget is no longer in the tree - widget.toolbarController?.toolbar?.textSelection.setMessageText( - newTextSpan, - ); - setState(() { - textSpan = newTextSpan; - }); - } catch (error, stackTrace) { - ErrorHandler.logError(e: error, s: stackTrace, m: "Error setting text span in PangeaRichText"); + widget.toolbarController?.toolbar?.textSelection.setMessageText( + newTextSpan, + ); + setState(() { + textSpan = newTextSpan; + }); + } catch (error, stackTrace) { + ErrorHandler.logError( + e: error, + s: stackTrace, + m: "Error setting text span in PangeaRichText", + ); + } } -} -void setTextSpan() { - if (_fetchingRepresentation) { - _setTextSpan(widget.pangeaMessageEvent.event.getDisplayEvent(widget.pangeaMessageEvent.timeline).body); - return; - } + void setTextSpan() { + if (_fetchingRepresentation) { + _setTextSpan( + widget.pangeaMessageEvent.event + .getDisplayEvent(widget.pangeaMessageEvent.timeline) + .body, + ); + return; + } - if (widget.pangeaMessageEvent.eventId.contains("webdebug")) { - debugger(when: kDebugMode); - } + if (widget.pangeaMessageEvent.eventId.contains("webdebug")) { + debugger(when: kDebugMode); + } + + repEvent = widget.pangeaMessageEvent + .representationByLanguage( + widget.pangeaMessageEvent.messageDisplayLangCode, + ) + ?.content; + + if (repEvent == null) { + setState(() => _fetchingRepresentation = true); + widget.pangeaMessageEvent + .representationByLanguageGlobal( + langCode: widget.pangeaMessageEvent.messageDisplayLangCode, + ) + .onError( + (error, stackTrace) => ErrorHandler.logError( + e: error, + s: stackTrace, + m: "Error fetching representation", + ), + ) + .then((event) { + if (!mounted) return; + repEvent = event; + _setTextSpan(repEvent?.text ?? widget.pangeaMessageEvent.body); + }).whenComplete(() { + if (mounted) { + setState(() => _fetchingRepresentation = false); + } + }); - repEvent = widget.pangeaMessageEvent - .representationByLanguage(widget.pangeaMessageEvent.messageDisplayLangCode) - ?.content; - - if (repEvent == null) { - setState(() => _fetchingRepresentation = true); - widget.pangeaMessageEvent - .representationByLanguageGlobal(langCode: widget.pangeaMessageEvent.messageDisplayLangCode) - .onError((error, stackTrace) => ErrorHandler.logError(e: error, s: stackTrace, m: "Error fetching representation")) - .then((event) { - if (!mounted) return; - repEvent = event; - _setTextSpan(repEvent?.text ?? widget.pangeaMessageEvent.body); - }).whenComplete(() { - if (mounted) { - setState(() => _fetchingRepresentation = false); - } - }); - - _setTextSpan(widget.pangeaMessageEvent.body); - } else { - _setTextSpan(repEvent!.text); + _setTextSpan(widget.pangeaMessageEvent.body); + } else { + _setTextSpan(repEvent!.text); + } } -} @override Widget build(BuildContext context) { From f2c1a4579c7842500aa2b271b6cd35ead4c63f13 Mon Sep 17 00:00:00 2001 From: bluearevalo <90929912+bluearevalo@users.noreply.github.com> Date: Mon, 1 Jul 2024 14:45:42 -0400 Subject: [PATCH 4/5] reformatted, added PangeaWarningError, and commented back .env in pubsec --- lib/pangea/widgets/igc/pangea_rich_text.dart | 35 ++++++++------------ pubspec.yaml | 4 +-- 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/lib/pangea/widgets/igc/pangea_rich_text.dart b/lib/pangea/widgets/igc/pangea_rich_text.dart index 451423bb2..8a02c7a74 100644 --- a/lib/pangea/widgets/igc/pangea_rich_text.dart +++ b/lib/pangea/widgets/igc/pangea_rich_text.dart @@ -68,20 +68,17 @@ class PangeaRichTextState extends State { }); } catch (error, stackTrace) { ErrorHandler.logError( - e: error, - s: stackTrace, - m: "Error setting text span in PangeaRichText", - ); + e: PangeaWarningError(error), + s: stackTrace, + m: "Error setting text span in PangeaRichText"); } } void setTextSpan() { if (_fetchingRepresentation) { - _setTextSpan( - widget.pangeaMessageEvent.event - .getDisplayEvent(widget.pangeaMessageEvent.timeline) - .body, - ); + _setTextSpan(widget.pangeaMessageEvent.event + .getDisplayEvent(widget.pangeaMessageEvent.timeline) + .body); return; } @@ -91,24 +88,20 @@ class PangeaRichTextState extends State { repEvent = widget.pangeaMessageEvent .representationByLanguage( - widget.pangeaMessageEvent.messageDisplayLangCode, - ) + widget.pangeaMessageEvent.messageDisplayLangCode) ?.content; if (repEvent == null) { setState(() => _fetchingRepresentation = true); widget.pangeaMessageEvent .representationByLanguageGlobal( - langCode: widget.pangeaMessageEvent.messageDisplayLangCode, - ) - .onError( - (error, stackTrace) => ErrorHandler.logError( - e: error, - s: stackTrace, - m: "Error fetching representation", - ), - ) - .then((event) { + langCode: widget.pangeaMessageEvent.messageDisplayLangCode) + .onError((error, stackTrace) { + ErrorHandler.logError( + e: PangeaWarningError(error), + s: stackTrace, + m: "Error fetching representation"); + }).then((event) { if (!mounted) return; repEvent = event; _setTextSpan(repEvent?.text ?? widget.pangeaMessageEvent.body); diff --git a/pubspec.yaml b/pubspec.yaml index 85cfeb074..ce6ef99dc 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -148,8 +148,8 @@ flutter: # #Pangea # uncomment this to enable mobile builds # causes error with github actions - - .env - - assets/.env + # - .env + # - assets/.env - assets/pangea/ - assets/pangea/bot_faces/ # Pangea# From 3c4ed1a821613768e5913359d1dfe62221025b38 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Mon, 1 Jul 2024 15:23:36 -0400 Subject: [PATCH 5/5] formatting pangea rich text file --- lib/pangea/widgets/igc/pangea_rich_text.dart | 29 ++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/lib/pangea/widgets/igc/pangea_rich_text.dart b/lib/pangea/widgets/igc/pangea_rich_text.dart index 5b33f66a9..abf583b3b 100644 --- a/lib/pangea/widgets/igc/pangea_rich_text.dart +++ b/lib/pangea/widgets/igc/pangea_rich_text.dart @@ -68,17 +68,20 @@ class PangeaRichTextState extends State { }); } catch (error, stackTrace) { ErrorHandler.logError( - e: PangeaWarningError(error), - s: stackTrace, - m: "Error setting text span in PangeaRichText"); + e: PangeaWarningError(error), + s: stackTrace, + m: "Error setting text span in PangeaRichText", + ); } } void setTextSpan() { if (_fetchingRepresentation) { - _setTextSpan(widget.pangeaMessageEvent.event - .getDisplayEvent(widget.pangeaMessageEvent.timeline) - .body); + _setTextSpan( + widget.pangeaMessageEvent.event + .getDisplayEvent(widget.pangeaMessageEvent.timeline) + .body, + ); return; } @@ -88,19 +91,23 @@ class PangeaRichTextState extends State { repEvent = widget.pangeaMessageEvent .representationByLanguage( - widget.pangeaMessageEvent.messageDisplayLangCode) + widget.pangeaMessageEvent.messageDisplayLangCode, + ) ?.content; if (repEvent == null) { setState(() => _fetchingRepresentation = true); widget.pangeaMessageEvent .representationByLanguageGlobal( - langCode: widget.pangeaMessageEvent.messageDisplayLangCode) + langCode: widget.pangeaMessageEvent.messageDisplayLangCode, + ) .onError((error, stackTrace) { ErrorHandler.logError( - e: PangeaWarningError(error), - s: stackTrace, - m: "Error fetching representation"); + e: PangeaWarningError(error), + s: stackTrace, + m: "Error fetching representation", + ); + return null; }).then((event) { if (!mounted) return; repEvent = event;