invoice/lib/utils/sentry.dart

73 lines
1.9 KiB
Dart

import 'dart:io';
import 'package:device_info/device_info.dart';
import 'package:flutter/foundation.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:sentry/sentry.dart';
Future<Event> getSentryEvent(
{AppState state, dynamic exception, dynamic stackTrace}) async {
OperatingSystem os;
Device device;
if (kIsWeb) {
// TODO track web info
os = OperatingSystem(
name: 'Web',
);
} else {
//final packageInfo = await PackageInfo.fromPlatform();
final deviceInfo = DeviceInfoPlugin();
if (Platform.isAndroid) {
final androidInfo = await deviceInfo.androidInfo;
os = OperatingSystem(
name: 'Android',
version: androidInfo.version.release,
);
device = Device(
model: androidInfo.model,
manufacturer: androidInfo.manufacturer,
modelId: androidInfo.product,
);
} else if (Platform.isIOS) {
final iosInfo = await deviceInfo.iosInfo;
os = OperatingSystem(
name: iosInfo.systemName,
version: iosInfo.systemVersion,
);
device = Device(
model: iosInfo.utsname.machine,
manufacturer: 'Apple',
family: iosInfo.model,
);
}
}
String environment = 'Unknown';
if (state != null) {
environment = '${state.environment}'.split('.').last;
}
return Event(
release: kClientVersion,
//release: packageInfo.version,
environment: environment,
stackTrace: stackTrace,
exception: exception,
extra: <String, dynamic>{
'server_version': state?.account?.currentVersion ?? 'Unknown',
},
contexts: Contexts(
operatingSystem: os,
device: device,
app: App(
//version: kClientVersion,
//name: packageInfo.appName,
//version: packageInfo.version,
//build: packageInfo.buildNumber,
)),
);
}