import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; /// 电池信息面板(电压 + 温度 + 极值) class BatteryInfoPanel extends StatelessWidget { final double batteryVolt; final double batteryTemp; final double maxVolt; final double minVolt; final double maxTemp; final double minTemp; const BatteryInfoPanel({ super.key, required this.batteryVolt, required this.batteryTemp, required this.maxVolt, required this.minVolt, required this.maxTemp, required this.minTemp, }); @override Widget build(BuildContext context) { return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildInfoItem( _buildIcon('voltage'), '电压', '${batteryVolt.toStringAsFixed(3)}V', ), const SizedBox(height: 8), Row( children: [ Text( '↑ ${maxVolt.toStringAsFixed(3)}V', style: const TextStyle( color: Colors.red, fontSize: 14, fontWeight: FontWeight.w500, ), ), const SizedBox(width: 12), Text( '↓ ${minVolt.toStringAsFixed(3)}V', style: const TextStyle( color: Colors.blue, fontSize: 14, fontWeight: FontWeight.w500, ), ), ], ), ], ), ), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildInfoItem( _buildIcon('temperature'), '温度', '${batteryTemp.toStringAsFixed(0)}°C', ), const SizedBox(height: 8), Row( children: [ Text( '↑ ${maxTemp.toStringAsFixed(0)}°C', style: const TextStyle( color: Colors.red, fontSize: 14, fontWeight: FontWeight.w500, ), ), const SizedBox(width: 12), Text( '↓ ${minTemp.toStringAsFixed(0)}°C', style: const TextStyle( color: Colors.blue, fontSize: 14, fontWeight: FontWeight.w500, ), ), ], ), ], ), ), ], ); } Widget _buildIcon(String type) { switch (type) { case 'voltage': return SvgPicture.asset( 'assets/icons/si--lightning-fill.svg', width: 18, height: 18, colorFilter: const ColorFilter.mode(Colors.grey, BlendMode.srcIn), ); case 'temperature': return SvgPicture.asset( 'assets/icons/mdi--temperature.svg', width: 18, height: 18, colorFilter: const ColorFilter.mode(Colors.grey, BlendMode.srcIn), ); default: return const Icon(Icons.help_outline, size: 18, color: Colors.grey); } } Widget _buildInfoItem(Widget icon, String label, String value) { return Row( children: [ icon, const SizedBox(width: 6), Text(label, style: const TextStyle(fontSize: 14, color: Colors.grey)), const SizedBox(width: 6), Text( value, style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w500), ), ], ); } }