2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 13:36:50 +00:00

Ensure that flutter errors are also reported to sentry!

This commit is contained in:
Oliver 2021-06-29 22:26:20 +10:00
parent d0aa6a61ba
commit c84941695d
3 changed files with 22 additions and 26 deletions

View File

@ -86,7 +86,7 @@ bool isInDebugMode() {
Future<void> sentryReportError(dynamic error, dynamic stackTrace) async { Future<void> sentryReportError(dynamic error, dynamic stackTrace) async {
print('Intercepted error: $error'); print('----- Sentry Intercepted error: $error -----');
print(stackTrace); print(stackTrace);
// Errors thrown in development mode are unlikely to be interesting. You can // Errors thrown in development mode are unlikely to be interesting. You can
@ -94,7 +94,7 @@ Future<void> sentryReportError(dynamic error, dynamic stackTrace) async {
// the report. // the report.
if (isInDebugMode()) { if (isInDebugMode()) {
print('In dev mode. Not sending report to Sentry.io.'); print('----- In dev mode. Not sending report to Sentry.io -----');
return; return;
} }

View File

@ -12,37 +12,32 @@ import 'package:one_context/one_context.dart';
import 'dsn.dart'; import 'dsn.dart';
import 'package:flutter/foundation.dart';
import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:sentry_flutter/sentry_flutter.dart';
void main() async { Future<void> main() async {
await Sentry.init((options) {
options.dsn = SENTRY_DSN_KEY;
},
//appRunner: () => runApp(InvenTreeApp())
);
await runZonedGuarded<Future<void>>(() async { await runZonedGuarded<Future<void>>(() async {
await Sentry.init((options) {
options.dsn = SENTRY_DSN_KEY;
});
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
// This captures errors reported by the Flutter framework. // Pass any flutter errors off to the Sentry reporting context!
FlutterError.onError = (FlutterErrorDetails details) async { FlutterError.onError = (FlutterErrorDetails details) async {
if (isInDebugMode()) {
// In development mode simply print to console. // Ensure that the error gets reported to sentry!
FlutterError.dumpErrorToConsole(details); await sentryReportError(details.exception, details.stack);
} else {
// In production mode report to the application zone to report to
// Sentry.
Zone.current.handleUncaughtError(details.exception, details.stack);
}
}; };
runApp(InvenTreeApp()); runApp(
InvenTreeApp()
);
}, (Object error, StackTrace stackTrace) { }, (Object error, StackTrace stackTrace) async {
sentryReportError(error, stackTrace); sentryReportError(error, stackTrace);
}); });
@ -81,6 +76,7 @@ class InvenTreeApp extends StatelessWidget {
const Locale('tr', ''), const Locale('tr', ''),
const Locale('zh', ''), const Locale('zh', ''),
], ],
); );
} }
} }

View File

@ -432,7 +432,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
L10().stockItems, L10().stockItems,
style: TextStyle(fontWeight: FontWeight.bold), style: TextStyle(fontWeight: FontWeight.bold),
), ),
subtitle: part.stockItems.isEmpty ? Text("No stock items available") : null, subtitle: part.stockItems.isEmpty ? Text(L10().stockItemsNotAvailable) : null,
trailing: part.stockItems.isNotEmpty ? Text("${part.stockItems.length}") : null, trailing: part.stockItems.isNotEmpty ? Text("${part.stockItems.length}") : null,
) )
); );
@ -463,7 +463,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
tiles.add( tiles.add(
ListTile( ListTile(
title: Text("Scan New Stock Item"), title: Text(L10().barcodeScanItem),
leading: FaIcon(FontAwesomeIcons.box), leading: FaIcon(FontAwesomeIcons.box),
trailing: FaIcon(FontAwesomeIcons.qrcode), trailing: FaIcon(FontAwesomeIcons.qrcode),
onTap: null, onTap: null,