device_info_handler.dart
2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import 'dart:io';
import 'dart:ui';
import 'package:appframe/services/dispatcher.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/material.dart';
class DeviceInfoHandler extends MessageHandler {
@override
Future<Map<String, dynamic>> handleMessage(dynamic params) async {
var viewPadding = PlatformDispatcher.instance.views.first.viewPadding;
var devicePixelRatio = PlatformDispatcher.instance.views.first.devicePixelRatio;
var statusBarHeight = viewPadding.top / devicePixelRatio;
var deviceInfoPlugin = DeviceInfoPlugin();
if (Platform.isAndroid) {
AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo;
return {
'abi': '${androidInfo.supportedAbis}',
'deviceAbi': androidInfo.supportedAbis.isNotEmpty ? androidInfo.supportedAbis[0] : '',
'benchmarkLevel': -1,
'brand': androidInfo.brand,
'model': androidInfo.model,
'system': androidInfo.version.release,
'platform': 'Android',
'cpuType': androidInfo.hardware,
'memorySize': _getAndroidMemorySize(androidInfo),
'statusbarHeight': statusBarHeight,
'titlebarHeight': kToolbarHeight,
};
} else if (Platform.isIOS) {
IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo;
return {
'abi': '',
'deviceAbi': '',
'benchmarkLevel': -1,
'brand': 'Apple',
'model': iosInfo.model,
'system': iosInfo.systemVersion,
'platform': 'iOS',
'cpuType': '',
'memorySize': (iosInfo.physicalRamSize ~/ (1024 * 1024)).toString(),
'statusbarHeight': statusBarHeight,
'titlebarHeight': kToolbarHeight,
};
} else {
return {};
}
}
String _getAndroidMemorySize(AndroidDeviceInfo info) {
try {
final file = File('/proc/meminfo');
final lines = file.readAsLinesSync();
for (final line in lines) {
if (line.startsWith('MemTotal:')) {
final parts = line.trim().split(RegExp(r'\s+'));
if (parts.length >= 2) {
final kb = int.tryParse(parts[1]);
if (kb != null) {
return (kb ~/ 1024).toString();
}
}
}
}
} catch (_) {}
final raw = info.physicalRamSize;
return raw.toString();
}
}