import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import '../utils/charge_utils.dart'; import '../theme/app_colors.dart'; class ChargeDetailPage extends StatelessWidget { final String chargeType; final bool isWireless; final double power; final double volt; final double curr; final int? wiredLevel; final double bmPower; final double bmVolt; final double bmCurr; const ChargeDetailPage({ super.key, required this.chargeType, required this.isWireless, required this.power, required this.volt, required this.curr, this.wiredLevel, this.bmPower = 0, this.bmVolt = 0, this.bmCurr = 0, }); String _getProtocolDisplay() { if (isWireless) return '无线充电($chargeType)'; if (chargeType == 'PPS') return 'PPS 快充'; if (chargeType == 'SDP') return 'USB 充电'; return chargeType; } String _getRequestedDisplay() { return ChargeUtils.getDetailRequestedPowerWired( power, wiredLevel, chargeType, ); } String _getActualDisplay() { return ChargeUtils.getDetailActualPowerWired(power, chargeType); } @override Widget build(BuildContext context) { final c = context.colors; final isDark = Theme.of(context).brightness == Brightness.dark; return AnnotatedRegion( value: SystemUiOverlayStyle( statusBarColor: c.statusBarTint, statusBarIconBrightness: isDark ? Brightness.light : Brightness.dark, statusBarBrightness: Theme.of(context).brightness, ), child: Scaffold( appBar: AppBar( title: const Text('充电详情'), backgroundColor: c.background, elevation: 0, ), body: Padding( padding: const EdgeInsets.all(20.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // ========== BMS 来源 ========== _buildSectionTitle(context, 'BMS 日志'), _buildTextRow(context, '协议', _getProtocolDisplay()), const Divider(), if (!isWireless) ...[ _buildTextRow( context, '标定档位', _getRequestedDisplay(), valueFont: 'Flyme', ), const Divider(), _buildTextRow( context, '实际功率', _getActualDisplay(), valueFont: 'Flyme', ), const Divider(), ] else ...[ _buildTextRow( context, '功率', ChargeUtils.getDisplayPowerWireless(power), valueFont: 'Flyme', ), const Divider(), ], _buildDetailRow(context, '电压', volt, 'V'), const Divider(), _buildDetailRow(context, '电流', curr, 'A'), const Divider(), const SizedBox(height: 24), // ========== BM 来源 ========== _buildSectionTitle(context, 'BatteryManager(电池端)'), _buildDetailRow(context, '电压', bmVolt, 'V'), const Divider(), _buildDetailRow(context, '电流', bmCurr, 'A'), const Divider(), bmPower > 0 ? _buildDetailRow(context, '功率', bmPower, 'W') : _buildTextRow(context, '功率', '读取中...'), const Spacer(), ], ), ), ), ); } Widget _buildSectionTitle(BuildContext context, String title) { final c = context.colors; return Padding( padding: const EdgeInsets.only(bottom: 8), child: Text( title, style: TextStyle( fontFamily: 'HarmonyOS_Sans_SC', fontSize: 13, fontWeight: FontWeight.w600, color: c.textTertiary, ), ), ); } Widget _buildTextRow( BuildContext context, String label, String value, { String valueFont = 'HarmonyOS_Sans_SC', }) { final c = context.colors; return Padding( padding: const EdgeInsets.symmetric(vertical: 6.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( label, style: TextStyle( fontFamily: 'HarmonyOS_Sans_SC', fontSize: 16, fontWeight: FontWeight.w400, color: c.textTertiary, ), ), Text( value, style: TextStyle( fontFamily: valueFont, fontSize: 16, fontWeight: FontWeight.w500, color: c.textPrimary, ), ), ], ), ); } Widget _buildDetailRow( BuildContext context, String label, double value, String unit, ) { final c = context.colors; return Padding( padding: const EdgeInsets.symmetric(vertical: 6.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( label, style: TextStyle( fontFamily: 'HarmonyOS_Sans_SC', fontSize: 16, fontWeight: FontWeight.w400, color: c.textTertiary, ), ), RichText( text: TextSpan( style: TextStyle( fontSize: 16, fontWeight: FontWeight.w500, color: c.textPrimary, ), children: [ TextSpan( text: value.toStringAsFixed(2), style: const TextStyle(fontFamily: 'Flyme'), ), TextSpan( text: unit, style: const TextStyle(fontFamily: 'HarmonyOS_Sans_SC'), ), ], ), ), ], ), ); } }