gatherDeviceInfo method
Gathers device info
Implementation
@override
Future<Map<String, Object?>> gatherDeviceInfo() async {
final deviceInfoPlugin = DeviceInfoPlugin();
final packageInfo = await PackageInfo.fromPlatform();
// Get device info map per platform
final deviceData = await _getDeviceData(deviceInfoPlugin);
// Screen diagonal inches for category detection
final deviceCategory = await _getDeviceCategory();
// Device ID (Android ID)
String? deviceId;
if (defaultTargetPlatform == TargetPlatform.android || defaultTargetPlatform == TargetPlatform.iOS) {
deviceId = deviceData['id'];
} else {
deviceId = null;
}
// Get brand, model, platform version fallback logic
final brand = deviceData['brand'] ?? 'unknown';
final model = deviceData['model'] ?? 'unknown';
final platformVersion = deviceData['version.release'] ??
deviceData['systemVersion'] ??
'unknown';
// Timezone offset in seconds
final timeZoneOffsetSeconds = DateTime.now().timeZoneOffset.inSeconds;
// User locale language-country
final locale = ui.window.locale;
final userDefaultLanguage = locale.toLanguageTag();
// Advertising ID and limited ad tracking status (async)
final advertisingId = await _getAdvertisingId();
final isLimitAdTrackingEnabled = await _isLimitAdTrackingEnabled();
return {
'category': deviceCategory,
'id': deviceId,
'model': model,
'timezone_offset_seconds': timeZoneOffsetSeconds,
'is_limited_ad_tracking_enabled': isLimitAdTrackingEnabled,
'brand_name': brand,
'platform_version': platformVersion,
'resettable_id': advertisingId,
'user_default_language': userDefaultLanguage,
'app_version': packageInfo.version,
};
}