gatherDeviceInfo method

  1. @override
Future<Map<String, Object?>> gatherDeviceInfo()
override

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,
  };
}