forked from firka/student-legacy
error report
This commit is contained in:
parent
e9423a8535
commit
9fbcef357e
BIN
filcnaplo/assets/fonts/SpaceMono/SpaceMono-Bold.ttf
Normal file
BIN
filcnaplo/assets/fonts/SpaceMono/SpaceMono-Bold.ttf
Normal file
Binary file not shown.
BIN
filcnaplo/assets/fonts/SpaceMono/SpaceMono-BoldItalic.ttf
Normal file
BIN
filcnaplo/assets/fonts/SpaceMono/SpaceMono-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
filcnaplo/assets/fonts/SpaceMono/SpaceMono-Italic.ttf
Normal file
BIN
filcnaplo/assets/fonts/SpaceMono/SpaceMono-Italic.ttf
Normal file
Binary file not shown.
BIN
filcnaplo/assets/fonts/SpaceMono/SpaceMono-Regular.ttf
Normal file
BIN
filcnaplo/assets/fonts/SpaceMono/SpaceMono-Regular.ttf
Normal file
Binary file not shown.
@ -6,6 +6,7 @@ import 'package:filcnaplo/models/release.dart';
|
|||||||
import 'package:filcnaplo/models/settings.dart';
|
import 'package:filcnaplo/models/settings.dart';
|
||||||
import 'package:filcnaplo/models/supporter.dart';
|
import 'package:filcnaplo/models/supporter.dart';
|
||||||
import 'package:filcnaplo_kreta_api/models/school.dart';
|
import 'package:filcnaplo_kreta_api/models/school.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
|
|
||||||
class FilcAPI {
|
class FilcAPI {
|
||||||
@ -119,5 +120,34 @@ class FilcAPI {
|
|||||||
return Future.value(null);
|
return Future.value(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: static Future<void> sendReport(ErrorReport report) async {}
|
static Future<void> sendReport(ErrorReport report) async {
|
||||||
|
try {
|
||||||
|
http.Response res = await http.post(Uri.parse(REPORT), body: {
|
||||||
|
"os": report.os,
|
||||||
|
"version": report.version,
|
||||||
|
"error": report.error,
|
||||||
|
"stack_trace": report.stack,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (res.statusCode != 200) {
|
||||||
|
throw "HTTP ${res.statusCode}: ${res.body}";
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
print("ERROR: FilcAPI.sendReport: $error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ErrorReport {
|
||||||
|
String stack;
|
||||||
|
String os;
|
||||||
|
String version;
|
||||||
|
String error;
|
||||||
|
|
||||||
|
ErrorReport({
|
||||||
|
required this.stack,
|
||||||
|
required this.os,
|
||||||
|
required this.version,
|
||||||
|
required this.error,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,12 @@ import 'package:filcnaplo/api/providers/user_provider.dart';
|
|||||||
import 'package:filcnaplo/api/providers/database_provider.dart';
|
import 'package:filcnaplo/api/providers/database_provider.dart';
|
||||||
import 'package:filcnaplo/database/init.dart';
|
import 'package:filcnaplo/database/init.dart';
|
||||||
import 'package:filcnaplo/models/settings.dart';
|
import 'package:filcnaplo/models/settings.dart';
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:filcnaplo/app.dart';
|
import 'package:filcnaplo/app.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:filcnaplo_mobile_ui/screens/error_screen.dart';
|
import 'package:filcnaplo_mobile_ui/screens/error_screen.dart';
|
||||||
|
import 'package:filcnaplo_mobile_ui/screens/error_report_screen.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
// Initalize
|
// Initalize
|
||||||
@ -39,12 +41,24 @@ class Startup {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool errorShown = false;
|
||||||
|
String lastException = '';
|
||||||
|
|
||||||
Widget errorBuilder(FlutterErrorDetails details) {
|
Widget errorBuilder(FlutterErrorDetails details) {
|
||||||
return Builder(builder: (context) {
|
return Builder(builder: (context) {
|
||||||
if (Navigator.of(context).canPop()) Navigator.pop(context);
|
if (Navigator.of(context).canPop()) Navigator.pop(context);
|
||||||
|
|
||||||
WidgetsBinding.instance?.addPostFrameCallback((_) {
|
WidgetsBinding.instance?.addPostFrameCallback((_) {
|
||||||
Navigator.of(context, rootNavigator: true).push(MaterialPageRoute(builder: (ctx) => ErrorScreen(details)));
|
if (!errorShown && details.exceptionAsString() != lastException) {
|
||||||
|
errorShown = true;
|
||||||
|
lastException = details.exceptionAsString();
|
||||||
|
Navigator.of(context, rootNavigator: true).push(MaterialPageRoute(builder: (context) {
|
||||||
|
if (kReleaseMode)
|
||||||
|
return ErrorReportScreen(details);
|
||||||
|
else
|
||||||
|
return ErrorScreen(details);
|
||||||
|
})).then((_) => errorShown = false);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return Container();
|
return Container();
|
||||||
|
@ -101,6 +101,17 @@ flutter:
|
|||||||
weight: 100
|
weight: 100
|
||||||
style: italic
|
style: italic
|
||||||
|
|
||||||
|
- family: SpaceMono
|
||||||
|
fonts:
|
||||||
|
- asset: assets/fonts/SpaceMono/SpaceMono-Regular.ttf
|
||||||
|
- asset: assets/fonts/SpaceMono/SpaceMono-Bold.ttf
|
||||||
|
weight: 700
|
||||||
|
- asset: assets/fonts/SpaceMono/SpaceMono-Italic.ttf
|
||||||
|
style: italic
|
||||||
|
- asset: assets/fonts/SpaceMono/SpaceMono-BoldItalic.ttf
|
||||||
|
weight: 700
|
||||||
|
style: italic
|
||||||
|
|
||||||
flutter_icons:
|
flutter_icons:
|
||||||
image_path: "assets/icons/ic_launcher.png"
|
image_path: "assets/icons/ic_launcher.png"
|
||||||
adaptive_icon_background: "#1F5B50"
|
adaptive_icon_background: "#1F5B50"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user