From 1d44e8b5d08e373e4814ddc838dd0fa26a7be571 Mon Sep 17 00:00:00 2001 From: Krille Date: Thu, 28 Dec 2023 09:03:54 +0100 Subject: [PATCH] chore: Follow up better error dialog --- .../homeserver_picker/homeserver_app_bar.dart | 15 ++++++++ lib/utils/error_reporter.dart | 35 +++++++++++++++---- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/lib/pages/homeserver_picker/homeserver_app_bar.dart b/lib/pages/homeserver_picker/homeserver_app_bar.dart index 50058c20..1c83c509 100644 --- a/lib/pages/homeserver_picker/homeserver_app_bar.dart +++ b/lib/pages/homeserver_picker/homeserver_app_bar.dart @@ -6,6 +6,8 @@ import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/homeserver_picker/public_homeserver.dart'; +import 'package:fluffychat/utils/error_reporter.dart'; +import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'homeserver_bottom_sheet.dart'; import 'homeserver_picker.dart'; @@ -31,6 +33,19 @@ class HomeserverAppBar extends StatelessWidget { leading: const CircularProgressIndicator.adaptive(strokeWidth: 2), title: Text(L10n.of(context)!.loadingPleaseWait), ), + errorBuilder: (context, error) { + ErrorReporter(context, 'Unable to load homeservers').onErrorCallback( + error ?? Object(), + StackTrace.current, + ); + return ListTile( + leading: const Icon(Icons.error_outlined), + title: Text( + error?.toLocalizedString(context) ?? + L10n.of(context)!.oopsSomethingWentWrong, + ), + ); + }, itemBuilder: (context, homeserver) => ListTile( title: Text(homeserver.name), subtitle: homeserver.description == null diff --git a/lib/utils/error_reporter.dart b/lib/utils/error_reporter.dart index 26fe5830..93d32036 100644 --- a/lib/utils/error_reporter.dart +++ b/lib/utils/error_reporter.dart @@ -3,8 +3,9 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:adaptive_dialog/adaptive_dialog.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'; @@ -19,14 +20,34 @@ class ErrorReporter { void onErrorCallback(Object error, [StackTrace? stackTrace]) async { Logs().e(message ?? 'Error caught', error, stackTrace); - final consent = await showOkCancelAlertDialog( + final consent = await showAdaptiveDialog( context: context, - title: L10n.of(context)!.reportErrorDescription, - message: '$error\n${stackTrace ?? ''}', - okLabel: L10n.of(context)!.report, - cancelLabel: L10n.of(context)!.close, + builder: (context) => AlertDialog.adaptive( + title: Text(L10n.of(context)!.reportErrorDescription), + content: SizedBox( + height: 256, + width: 256, + child: SingleChildScrollView( + child: HighlightView( + '$error\n${stackTrace ?? ''}', + language: 'sh', + theme: shadesOfPurpleTheme, + ), + ), + ), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(false), + child: Text(L10n.of(context)!.close), + ), + TextButton( + onPressed: () => Navigator.of(context).pop(true), + child: Text(L10n.of(context)!.report), + ), + ], + ), ); - if (consent != OkCancelResult.ok) return; + if (consent != true) return; final os = kIsWeb ? 'web' : Platform.operatingSystem; final version = await PlatformInfos.getVersion(); final description = '''