diff --git a/lib/pages/battery_health_page.dart b/lib/pages/battery_health_page.dart index 6830c62..2e9196a 100644 --- a/lib/pages/battery_health_page.dart +++ b/lib/pages/battery_health_page.dart @@ -613,7 +613,8 @@ class _BatteryHealthPageState extends State if (_isWireless) { return ChargeUtils.getDisplayPowerWireless(_chargePower); } else { - return ChargeUtils.getDisplayPowerWired( + // 🟢 1.5.0 改用新格式:实际/标定 + return ChargeUtils.getMainDisplayPowerWired( _chargePower, _wiredLevel, _chargeType, diff --git a/lib/utils/charge_utils.dart b/lib/utils/charge_utils.dart index fb23327..b7271b2 100644 --- a/lib/utils/charge_utils.dart +++ b/lib/utils/charge_utils.dart @@ -1,6 +1,7 @@ import '../constants/charge_maps.dart'; class ChargeUtils { + // ============ 无线充电(保持不变) ============ static String getDisplayPowerWireless(double power) { if (power == 0) return '读取中...'; const List levels = [5, 7, 15, 27, 40, 50, 66]; @@ -12,21 +13,17 @@ class ChargeUtils { return '≈${matchedLevel}W'; } + // ============ 原有有线逻辑(保留兼容,但主界面不再直接调用) ============ static String getDisplayPowerWired( double power, int? wiredLevel, String chargeType, ) { - // USB 慢充锁定 7.5W if (chargeType == "SDP") return "≈7.5W"; - - // 🟢 优先使用 wiredLevel 精确匹配 if (wiredLevel != null && ChargeMaps.wiredPower.containsKey(wiredLevel)) { double p = ChargeMaps.wiredPower[wiredLevel]!; if (p > 0) return '≈${p.toInt()}W'; } - - // 🟢 匹配阈值收窄到 ±3W,减少跳变 double best = 0; for (var entry in ChargeMaps.wiredPower.entries) { if (entry.value <= power + 3 && entry.value > best) { @@ -37,11 +34,61 @@ class ChargeUtils { return best > 0 ? '≈${best.toInt()}W' : '≈${power.round()}W'; } + // ============ 🟢 1.5.0 新增:主界面显示(实际/标定) ============ + /// 示例:≈30w/65w + static String getMainDisplayPowerWired( + double power, + int? wiredLevel, + String chargeType, + ) { + // USB 慢充锁定 7.5W + if (chargeType == "SDP") return "≈7.5w"; + + if (power == 0) return "读取中..."; + + final actual = power.round(); + + // 有档位且能查到标定值 + if (wiredLevel != null && ChargeMaps.wiredPower.containsKey(wiredLevel)) { + final requested = ChargeMaps.wiredPower[wiredLevel]!.round(); + return "≈${actual}w/${requested}w"; + } + + // 无档位信息,仅显示实际功率 + return "≈${actual}w"; + } + + // ============ 🟢 1.5.0 新增:二级页面标定档位显示 ============ + /// 示例:≈80w/L-10 + static String getDetailRequestedPowerWired( + double power, + int? wiredLevel, + String chargeType, + ) { + if (chargeType == "SDP") return "≈7.5w"; + + if (power == 0) return "读取中..."; + + if (wiredLevel != null && ChargeMaps.wiredPower.containsKey(wiredLevel)) { + final requested = ChargeMaps.wiredPower[wiredLevel]!.round(); + return "≈${requested}w/L-${wiredLevel}"; + } + + return "≈${power.round()}w"; + } + + // ============ 🟢 1.5.0 新增:二级页面实际功率显示 ============ + static String getDetailActualPowerWired(double power, String chargeType) { + if (chargeType == "SDP") return "≈7.5w"; + if (power == 0) return "读取中..."; + return "≈${power.round()}w"; + } + + // ============ 充电类型标签(保持不变) ============ static String getChargeTypeLabel(bool isWireless, String chargeType) { if (isWireless) { return chargeType == "无线" ? "无线" : chargeType; } - // 🟢 空类型显示"识别中...",比"等待log信息"更友好 if (chargeType.isEmpty) { return "识别中..."; } diff --git a/lib/widgets/charge_detail_page.dart b/lib/widgets/charge_detail_page.dart index 54d1842..5d09a56 100644 --- a/lib/widgets/charge_detail_page.dart +++ b/lib/widgets/charge_detail_page.dart @@ -11,22 +11,14 @@ class ChargeDetailPage extends StatelessWidget { final int? wiredLevel; const ChargeDetailPage({ - super.key, + Key? key, required this.chargeType, required this.isWireless, required this.power, required this.volt, required this.curr, this.wiredLevel, - }); - - String _getDisplayPower() { - if (isWireless) { - return ChargeUtils.getDisplayPowerWireless(power); - } else { - return ChargeUtils.getDisplayPowerWired(power, wiredLevel, chargeType); - } - } + }) : super(key: key); String _getProtocolDisplay() { if (isWireless) return '无线充电($chargeType)'; @@ -35,12 +27,26 @@ class ChargeDetailPage extends StatelessWidget { return chargeType; } + /// 🟢 1.5.0 标定档位显示 + String _getRequestedDisplay() { + return ChargeUtils.getDetailRequestedPowerWired( + power, + wiredLevel, + chargeType, + ); + } + + /// 🟢 1.5.0 实际功率显示 + String _getActualDisplay() { + return ChargeUtils.getDetailActualPowerWired(power, chargeType); + } + @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('充电详情'), - backgroundColor: const Color.fromARGB(0, 255, 255, 255), + backgroundColor: Colors.transparent, elevation: 0, foregroundColor: Colors.black, iconTheme: const IconThemeData(color: Colors.black), @@ -52,16 +58,28 @@ class ChargeDetailPage extends StatelessWidget { children: [ _buildDetailRow('协议', _getProtocolDisplay()), const Divider(), - _buildDetailRow('功率', _getDisplayPower()), - const Divider(), + + // 🟢 1.5.0 有线充电:标定档位 + 实际功率 两行 + if (!isWireless) ...[ + _buildDetailRow('标定档位', _getRequestedDisplay()), + const Divider(), + _buildDetailRow('实际功率', _getActualDisplay()), + const Divider(), + ] else ...[ + // 无线充电:保持原样,只显示功率 + _buildDetailRow('功率', ChargeUtils.getDisplayPowerWireless(power)), + const Divider(), + ], + _buildDetailRow('电压', '${volt.toStringAsFixed(2)}V'), const Divider(), _buildDetailRow('电流', '${curr.toStringAsFixed(2)}A'), const Divider(), - if (!isWireless && wiredLevel != null) - _buildDetailRow('档位', '$wiredLevel'), - if (!isWireless && wiredLevel == null) _buildDetailRow('档位', '自动'), + + // 辅助信息 if (isWireless) _buildDetailRow('类型', '无线'), + if (!isWireless && wiredLevel == null) _buildDetailRow('档位', '自动'), + const Spacer(), Center( child: Text( diff --git a/pubspec.yaml b/pubspec.yaml index b2ecfb1..bba64fe 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.4.7 +version: 1.5.0-dev.1 environment: sdk: ^3.9.2