58 lines
1.6 KiB
Dart
58 lines
1.6 KiB
Dart
import 'package:flutter/services.dart';
|
|
|
|
/// BatteryManager 实时数据(电池端:电压 / 电流 / 功率)
|
|
class BatteryManagerData {
|
|
final int voltageMv;
|
|
final int currentUa;
|
|
final double powerW;
|
|
final double temperatureC;
|
|
final int plugged; // 0=未插, 1=AC, 2=USB, 4=WIRELESS
|
|
final bool isCharging;
|
|
|
|
const BatteryManagerData({
|
|
required this.voltageMv,
|
|
required this.currentUa,
|
|
required this.powerW,
|
|
required this.temperatureC,
|
|
required this.plugged,
|
|
required this.isCharging,
|
|
});
|
|
|
|
factory BatteryManagerData.empty() => const BatteryManagerData(
|
|
voltageMv: 0,
|
|
currentUa: 0,
|
|
powerW: 0,
|
|
temperatureC: 0,
|
|
plugged: 0,
|
|
isCharging: false,
|
|
);
|
|
|
|
factory BatteryManagerData.fromMap(dynamic raw) {
|
|
if (raw is! Map) return BatteryManagerData.empty();
|
|
return BatteryManagerData(
|
|
voltageMv: (raw['voltageMv'] as num?)?.toInt() ?? 0,
|
|
currentUa: (raw['currentUa'] as num?)?.toInt() ?? 0,
|
|
powerW: (raw['powerW'] as num?)?.toDouble() ?? 0.0,
|
|
temperatureC: (raw['temperatureC'] as num?)?.toDouble() ?? 0.0,
|
|
plugged: (raw['plugged'] as num?)?.toInt() ?? 0,
|
|
isCharging: raw['isCharging'] as bool? ?? false,
|
|
);
|
|
}
|
|
|
|
/// 电压 V
|
|
double get voltageV => voltageMv / 1000.0;
|
|
|
|
/// 电流 A
|
|
double get currentA => currentUa / 1_000_000.0;
|
|
}
|
|
|
|
class BatteryManagerService {
|
|
static const _channel = MethodChannel('com.lxh.battery_health/charge');
|
|
|
|
/// 主动拉取一次
|
|
static Future<BatteryManagerData> fetch() async {
|
|
final result = await _channel.invokeMethod('getBatteryManagerData');
|
|
return BatteryManagerData.fromMap(result);
|
|
}
|
|
}
|