add device info at login
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
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';
|
||||
|
||||
class DeviceInfo {
|
||||
final String deviceId;
|
||||
final String deviceName;
|
||||
final String deviceType;
|
||||
final String platform;
|
||||
final String osVersion;
|
||||
final String appVersion;
|
||||
|
||||
const DeviceInfo({
|
||||
required this.deviceId,
|
||||
required this.deviceName,
|
||||
required this.deviceType,
|
||||
required this.platform,
|
||||
required this.osVersion,
|
||||
required this.appVersion,
|
||||
});
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'device_id': deviceId,
|
||||
'device_name': deviceName,
|
||||
'device_type': deviceType,
|
||||
'platform': platform,
|
||||
'os_version': osVersion,
|
||||
'app_version': appVersion,
|
||||
};
|
||||
}
|
||||
|
||||
@lazySingleton
|
||||
class DeviceInfoService {
|
||||
final DeviceInfoPlugin _deviceInfo = DeviceInfoPlugin();
|
||||
|
||||
Future<DeviceInfo> getDeviceInfo() async {
|
||||
final packageInfo = await PackageInfo.fromPlatform();
|
||||
final appVersion = packageInfo.version;
|
||||
|
||||
if (Platform.isAndroid) {
|
||||
final info = await _deviceInfo.androidInfo;
|
||||
return DeviceInfo(
|
||||
deviceId: info.id,
|
||||
deviceName: '${info.manufacturer} ${info.model}',
|
||||
deviceType: _resolveDeviceType(info.model),
|
||||
platform: 'android',
|
||||
osVersion: 'Android ${info.version.release}',
|
||||
appVersion: appVersion,
|
||||
);
|
||||
} else if (Platform.isIOS) {
|
||||
final info = await _deviceInfo.iosInfo;
|
||||
return DeviceInfo(
|
||||
deviceId: info.identifierForVendor ?? '',
|
||||
deviceName: info.name,
|
||||
deviceType: _resolveDeviceType(info.model),
|
||||
platform: 'ios',
|
||||
osVersion: '${info.systemName} ${info.systemVersion}',
|
||||
appVersion: appVersion,
|
||||
);
|
||||
}
|
||||
|
||||
// Fallback (web/desktop — tidak dipakai tapi aman)
|
||||
return DeviceInfo(
|
||||
deviceId: 'unknown',
|
||||
deviceName: 'unknown',
|
||||
deviceType: 'desktop',
|
||||
platform: 'web',
|
||||
osVersion: 'unknown',
|
||||
appVersion: appVersion,
|
||||
);
|
||||
}
|
||||
|
||||
/// Tentukan device_type berdasarkan model name.
|
||||
/// Nilai valid: 'mobile' | 'tablet' | 'desktop'
|
||||
String _resolveDeviceType(String model) {
|
||||
final lower = model.toLowerCase();
|
||||
if (lower.contains('ipad') || lower.contains('tablet')) return 'tablet';
|
||||
return 'mobile';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user