Line data Source code
1 : import 'dart:io'; 2 : 3 : import 'package:battery/battery.dart'; 4 : import 'package:device_info/device_info.dart'; 5 : import 'package:package_info/package_info.dart'; 6 : import 'package:quiver/check.dart'; 7 : import 'package:sentry/sentry.dart'; 8 : 9 : abstract class Provider<T> { 10 : Future<T> provide(); 11 : } 12 : 13 : abstract class ReleaseProvider extends Provider<String> {} 14 : 15 : abstract class EnvironmentProvider extends Provider<String> {} 16 : 17 : abstract class UserProvider extends Provider<User> {} 18 : 19 : abstract class ContextsProvider extends Provider<Contexts> {} 20 : 21 : class PlatformReleaseProvider implements ReleaseProvider { 22 : @override 23 0 : Future<String> provide() async { 24 0 : var packageInfo = await PackageInfo.fromPlatform(); 25 0 : return provideFromPackageInfo(packageInfo); 26 : } 27 : 28 1 : Future<String> provideFromPackageInfo(PackageInfo packageInfo) async { 29 1 : checkNotNull(packageInfo); 30 1 : final packageName = packageInfo.packageName; 31 1 : final version = packageInfo.version; 32 1 : final buildNumber = packageInfo.buildNumber; 33 1 : return '$version+$buildNumber'; 34 : } 35 : } 36 : 37 : class DeviceInfContextsProvider implements ContextsProvider { 38 : final _deviceInfo = DeviceInfoPlugin(); 39 : final _battery = Battery(); 40 : 41 : @override 42 0 : Future<Contexts> provide() async { 43 0 : if (Platform.isAndroid) { 44 0 : final androidDeviceInfo = await _deviceInfo.androidInfo; 45 0 : return provideFromAndroidDeviceInfo(androidDeviceInfo); 46 0 : } else if (Platform.isIOS) { 47 0 : final iosInfo = await _deviceInfo.iosInfo; 48 0 : return provideFromIosDeviceInfo(iosInfo); 49 : } 50 : } 51 : 52 1 : Future<Contexts> provideFromAndroidDeviceInfo( 53 : AndroidDeviceInfo androidDeviceInfo) async { 54 1 : checkNotNull(androidDeviceInfo); 55 : 56 1 : final os = OperatingSystem( 57 : //version: androidDeviceInfo.version. 58 : name: 'Android', 59 2 : build: androidDeviceInfo.version.release, 60 2 : version: androidDeviceInfo.version.baseOS, 61 : ); 62 0 : final device = Device( 63 1 : name: androidDeviceInfo.device, 64 1 : brand: androidDeviceInfo.brand, 65 3 : batteryLevel: (await _battery.batteryLevel).toDouble(), 66 0 : family: androidDeviceInfo.model, 67 : ); 68 0 : return Contexts( 69 : operatingSystem: os, 70 : device: device, 71 : ); 72 : } 73 : 74 1 : Future<Contexts> provideFromIosDeviceInfo(IosDeviceInfo iosDeviceInfo) async { 75 1 : checkNotNull(iosDeviceInfo); 76 1 : final os = OperatingSystem( 77 : //version: androidDeviceInfo.version. 78 1 : name: iosDeviceInfo.systemName, 79 2 : build: iosDeviceInfo.utsname.version, 80 1 : version: iosDeviceInfo.systemVersion, 81 : ); 82 1 : final device = Device( 83 1 : name: iosDeviceInfo.name, 84 : brand: 'apple', 85 : ); 86 1 : return Contexts( 87 : operatingSystem: os, 88 : device: device, 89 : ); 90 : } 91 : }