mirror of
https://github.com/immich-app/immich.git
synced 2025-07-09 03:04:16 -04:00
add framework error callbacks
This commit is contained in:
parent
e81b61c98b
commit
80009a77ec
@ -3,8 +3,6 @@ import 'package:immich_mobile/i18n/strings.g.dart';
|
|||||||
import 'package:immich_mobile/immich_app.dart';
|
import 'package:immich_mobile/immich_app.dart';
|
||||||
import 'package:immich_mobile/service_locator.dart';
|
import 'package:immich_mobile/service_locator.dart';
|
||||||
import 'package:immich_mobile/utils/log_manager.dart';
|
import 'package:immich_mobile/utils/log_manager.dart';
|
||||||
// ignore: depend_on_referenced_packages
|
|
||||||
import 'package:stack_trace/stack_trace.dart' as stack_trace;
|
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
@ -12,14 +10,9 @@ void main() {
|
|||||||
ServiceLocator.configureServices();
|
ServiceLocator.configureServices();
|
||||||
// Init logging
|
// Init logging
|
||||||
LogManager.I.init();
|
LogManager.I.init();
|
||||||
|
LogManager.setGlobalErrorCallbacks();
|
||||||
// Init localization
|
// Init localization
|
||||||
LocaleSettings.useDeviceLocale();
|
LocaleSettings.useDeviceLocale();
|
||||||
|
|
||||||
FlutterError.demangleStackTrace = (StackTrace stack) {
|
|
||||||
if (stack is stack_trace.Trace) return stack.vmTrace;
|
|
||||||
if (stack is stack_trace.Chain) return stack.toTrace().vmTrace;
|
|
||||||
return stack;
|
|
||||||
};
|
|
||||||
|
|
||||||
runApp(const ImmichApp());
|
runApp(const ImmichApp());
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,21 @@ import 'package:auto_route/auto_route.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:immich_mobile/utils/extensions/build_context.extension.dart';
|
import 'package:immich_mobile/utils/extensions/build_context.extension.dart';
|
||||||
|
|
||||||
|
class ImAdaptiveRoutePrimaryAppBar extends StatelessWidget
|
||||||
|
implements PreferredSizeWidget {
|
||||||
|
const ImAdaptiveRoutePrimaryAppBar({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppBar(
|
||||||
|
leading: BackButton(onPressed: () => context.router.root.maybePop()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Size get preferredSize => const Size.fromHeight(kToolbarHeight);
|
||||||
|
}
|
||||||
|
|
||||||
class ImAdaptiveRouteSecondaryAppBar extends StatelessWidget
|
class ImAdaptiveRouteSecondaryAppBar extends StatelessWidget
|
||||||
implements PreferredSizeWidget {
|
implements PreferredSizeWidget {
|
||||||
const ImAdaptiveRouteSecondaryAppBar({super.key});
|
const ImAdaptiveRouteSecondaryAppBar({super.key});
|
@ -1,17 +0,0 @@
|
|||||||
import 'package:auto_route/auto_route.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
|
|
||||||
class ImAdaptiveRoutePrimaryAppBar extends StatelessWidget
|
|
||||||
implements PreferredSizeWidget {
|
|
||||||
const ImAdaptiveRoutePrimaryAppBar({super.key});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return AppBar(
|
|
||||||
leading: BackButton(onPressed: () => context.router.root.maybePop()),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Size get preferredSize => const Size.fromHeight(kToolbarHeight);
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:immich_mobile/presentation/components/scaffold/adaptive_route_secondary_appbar.widget.dart';
|
import 'package:immich_mobile/presentation/components/scaffold/adaptive_route_appbar.widget.dart';
|
||||||
|
|
||||||
@RoutePage()
|
@RoutePage()
|
||||||
class AboutSettingsPage extends StatelessWidget {
|
class AboutSettingsPage extends StatelessWidget {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:immich_mobile/presentation/components/scaffold/adaptive_route_secondary_appbar.widget.dart';
|
import 'package:immich_mobile/presentation/components/scaffold/adaptive_route_appbar.widget.dart';
|
||||||
|
|
||||||
@RoutePage()
|
@RoutePage()
|
||||||
class AdvanceSettingsPage extends StatelessWidget {
|
class AdvanceSettingsPage extends StatelessWidget {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:immich_mobile/presentation/components/scaffold/adaptive_route_secondary_appbar.widget.dart';
|
import 'package:immich_mobile/presentation/components/scaffold/adaptive_route_appbar.widget.dart';
|
||||||
|
|
||||||
@RoutePage()
|
@RoutePage()
|
||||||
class GeneralSettingsPage extends StatelessWidget {
|
class GeneralSettingsPage extends StatelessWidget {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:immich_mobile/i18n/strings.g.dart';
|
import 'package:immich_mobile/i18n/strings.g.dart';
|
||||||
import 'package:immich_mobile/presentation/components/scaffold/adaptive_route_primary_appbar.widget.dart';
|
import 'package:immich_mobile/presentation/components/scaffold/adaptive_route_appbar.widget.dart';
|
||||||
import 'package:immich_mobile/presentation/components/scaffold/adaptive_route_wrapper.widget.dart';
|
import 'package:immich_mobile/presentation/components/scaffold/adaptive_route_wrapper.widget.dart';
|
||||||
import 'package:immich_mobile/presentation/modules/settings/models/settings_section.model.dart';
|
import 'package:immich_mobile/presentation/modules/settings/models/settings_section.model.dart';
|
||||||
import 'package:immich_mobile/presentation/router/router.dart';
|
import 'package:immich_mobile/presentation/router/router.dart';
|
||||||
|
@ -5,6 +5,8 @@ import 'package:immich_mobile/domain/interfaces/log.interface.dart';
|
|||||||
import 'package:immich_mobile/domain/models/log.model.dart';
|
import 'package:immich_mobile/domain/models/log.model.dart';
|
||||||
import 'package:immich_mobile/service_locator.dart';
|
import 'package:immich_mobile/service_locator.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
// ignore: depend_on_referenced_packages
|
||||||
|
import 'package:stack_trace/stack_trace.dart' as stack_trace;
|
||||||
|
|
||||||
/// [LogManager] is a custom logger that is built on top of the [logging] package.
|
/// [LogManager] is a custom logger that is built on top of the [logging] package.
|
||||||
/// The logs are written to the database and onto console, using `debugPrint` method.
|
/// The logs are written to the database and onto console, using `debugPrint` method.
|
||||||
@ -72,4 +74,27 @@ class LogManager {
|
|||||||
_msgBuffer.clear();
|
_msgBuffer.clear();
|
||||||
di<ILogRepository>().clear();
|
di<ILogRepository>().clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void setGlobalErrorCallbacks() {
|
||||||
|
FlutterError.demangleStackTrace = (StackTrace stack) {
|
||||||
|
if (stack is stack_trace.Trace) return stack.vmTrace;
|
||||||
|
if (stack is stack_trace.Chain) return stack.toTrace().vmTrace;
|
||||||
|
return stack;
|
||||||
|
};
|
||||||
|
|
||||||
|
FlutterError.onError = (details) {
|
||||||
|
Logger("FlutterError").severe(
|
||||||
|
'Unknown framework error occured in library ${details.library ?? "<unknown>"} at node ${details.context ?? "<unkown>"}',
|
||||||
|
details.exception,
|
||||||
|
details.stack,
|
||||||
|
);
|
||||||
|
FlutterError.presentError(details);
|
||||||
|
};
|
||||||
|
|
||||||
|
PlatformDispatcher.instance.onError = (error, stack) {
|
||||||
|
Logger("PlatformDispatcher")
|
||||||
|
.severe('Unknown error occured in root isolate', error, stack);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user