import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:injectable/injectable.dart'; import 'package:package_info_plus/package_info_plus.dart'; @lazySingleton class DeviceInfoService { DeviceInfoService(this._deviceInfo, this._packageInfo); final DeviceInfoPlugin _deviceInfo; final PackageInfo _packageInfo; String get appVersion => '${_packageInfo.version}+${_packageInfo.buildNumber}'; Future> getDevicePayload() async { final info = await _getDeviceInfo(); return { 'device_id': info['device_id'] ?? '', 'device_name': info['device_name'] ?? '', 'device_type': info['device_type'] ?? 'mobile', 'platform': _getPlatform(), 'app_version': appVersion, 'os_version': info['os_version'] ?? '', }; } String _getPlatform() { if (Platform.isAndroid) return 'android'; if (Platform.isIOS) return 'ios'; return 'web'; } Future> _getDeviceInfo() async { if (Platform.isAndroid) { final android = await _deviceInfo.androidInfo; return { 'device_id': android.id, 'device_name': '${android.manufacturer} ${android.model}', 'device_type': _resolveDeviceType(android.model), 'os_version': 'Android ${android.version.release} (SDK ${android.version.sdkInt})', }; } else if (Platform.isIOS) { final ios = await _deviceInfo.iosInfo; return { 'device_id': ios.identifierForVendor ?? '', 'device_name': ios.name, 'device_type': _resolveDeviceType(ios.model), 'os_version': '${ios.systemName} ${ios.systemVersion}', }; } return {'device_type': 'desktop'}; } /// Deteksi device_type berdasarkan nama model /// Nilai valid: mobile | tablet | desktop String _resolveDeviceType(String model) { final lower = model.toLowerCase(); if (lower.contains('tablet') || lower.contains('tab') || lower.contains('ipad')) { return 'tablet'; } return 'mobile'; } }