diff --git a/packages/talker/lib/src/talker.dart b/packages/talker/lib/src/talker.dart index b461902c9..76a308c0b 100644 --- a/packages/talker/lib/src/talker.dart +++ b/packages/talker/lib/src/talker.dart @@ -187,7 +187,7 @@ class Talker { return; } if (data is TalkerLog) { - _handleLogData(data); + _handleLogData(data, logLevel: data.logLevel ?? LogLevel.info); } } diff --git a/packages/talker/lib/src/utils/error_handler.dart b/packages/talker/lib/src/utils/error_handler.dart index 7de8242e6..c11c56e6c 100644 --- a/packages/talker/lib/src/utils/error_handler.dart +++ b/packages/talker/lib/src/utils/error_handler.dart @@ -16,6 +16,9 @@ class TalkerErrorHandler { if (exception is TalkerException) { return exception; } + if (exception is TalkerLog) { + return exception; + } final errKey = TalkerKey.error; final exceptionKey = TalkerKey.exception; diff --git a/packages/talker_flutter/example/lib/main.dart b/packages/talker_flutter/example/lib/main.dart index 723f6b231..daeeb7bc6 100644 --- a/packages/talker_flutter/example/lib/main.dart +++ b/packages/talker_flutter/example/lib/main.dart @@ -3,6 +3,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:talker_example/extended_example/extended_example.dart'; import 'package:talker_flutter/talker_flutter.dart'; +// ignore: unused_import +import 'package:talker_example/talker_wrapper_example/talker_wrapper_example.dart'; /// You can see [ExtendedExample] to /// check how logs working in realtime @@ -21,6 +23,7 @@ void main() { ); runZonedGuarded( () => runApp(BaseExample(talker: talker)), + // () => runApp(CustomErrorMessagesExample(talker: talker)), (Object error, StackTrace stack) { talker.handle(error, stack, 'Uncaught app exception'); }, diff --git a/packages/talker_flutter/example/lib/talker_wrapper_example/talker_wrapper_example.dart b/packages/talker_flutter/example/lib/talker_wrapper_example/talker_wrapper_example.dart index 84a62acf7..73cb50021 100644 --- a/packages/talker_flutter/example/lib/talker_wrapper_example/talker_wrapper_example.dart +++ b/packages/talker_flutter/example/lib/talker_wrapper_example/talker_wrapper_example.dart @@ -49,6 +49,11 @@ class _Home extends StatelessWidget { onPressed: _handleError, child: const Text('Handle error'), ), + const SizedBox(height: 10), + ElevatedButton( + onPressed: _handleLog, + child: const Text('Handle log message'), + ), ], ), ), @@ -71,6 +76,11 @@ class _Home extends StatelessWidget { talker.handle(e, st); } } + + void _handleLog() { + final talkerLog = TalkerLog('Test log message'); + talker.handle(talkerLog); + } } class ExceptionSnackbar extends StatelessWidget { diff --git a/packages/talker_flutter/lib/src/ui/talker_wrapper/talker_wrapper.dart b/packages/talker_flutter/lib/src/ui/talker_wrapper/talker_wrapper.dart index fd2798b7f..3991a90da 100644 --- a/packages/talker_flutter/lib/src/ui/talker_wrapper/talker_wrapper.dart +++ b/packages/talker_flutter/lib/src/ui/talker_wrapper/talker_wrapper.dart @@ -48,6 +48,17 @@ class TalkerWrapper extends StatelessWidget { title: options.errorTitle, ), ); + return; + } + if (data is TalkerLog && options.enableLogAlerts) { + showAlert( + context, + options.logAlertBuilder?.call(context, data) ?? + SnackbarContent( + message: _mapErrorMessage(data.displayMessage), + title: data.title ?? options.logTitle, + ), + ); } }, child: child, diff --git a/packages/talker_flutter/lib/src/ui/talker_wrapper/talker_wrapper_options.dart b/packages/talker_flutter/lib/src/ui/talker_wrapper/talker_wrapper_options.dart index 934035ab9..ebbd788c6 100644 --- a/packages/talker_flutter/lib/src/ui/talker_wrapper/talker_wrapper_options.dart +++ b/packages/talker_flutter/lib/src/ui/talker_wrapper/talker_wrapper_options.dart @@ -5,10 +5,13 @@ class TalkerWrapperOptions { const TalkerWrapperOptions({ this.exceptionTitle = 'Error occurred', this.errorTitle = 'Error occurred', + this.logTitle = 'Log message', this.exceptionAlertBuilder, this.errorAlertBuilder, + this.logAlertBuilder, this.enableErrorAlerts = false, this.enableExceptionAlerts = true, + this.enableLogAlerts = true, }); /// Used for custom snackbar title @@ -17,15 +20,24 @@ class TalkerWrapperOptions { /// Used for custom snackbar title final String errorTitle; + /// Used for custom snackbar title + final String logTitle; + /// Field for customizing the displayed exception widget final TalkerExceptionBuilder? exceptionAlertBuilder; /// Field for customizing the displayed error widget final TalkerErrorBuilder? errorAlertBuilder; + /// Field for customizing the displayed log widget + final TalkerDataBuilder? logAlertBuilder; + /// [TalkerWrapper] will show error message if field is [true] final bool enableErrorAlerts; /// [TalkerWrapper] will show exceptions message if field is [true] final bool enableExceptionAlerts; + + /// [TalkerWrapper] will show log messages if field is [true] + final bool enableLogAlerts; }