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: [ RichText( text: TextSpan( style: TextStyle( fontFamily: 'Flyme', fontSize: 14, fontWeight: FontWeight.w500, color: Colors.red, ), children: [ const TextSpan( text: '↑ ', style: TextStyle( fontFamily: 'HarmonyOS_Sans_SC', color: Colors.red, ), ), TextSpan(text: '${maxVolt.toStringAsFixed(3)}V'), ], ), ), const SizedBox(width: 12), RichText( text: TextSpan( style: TextStyle( fontFamily: 'Flyme', fontSize: 14, fontWeight: FontWeight.w500, color: Colors.blue, ), children: [ const TextSpan( text: '↓ ', style: TextStyle( fontFamily: 'HarmonyOS_Sans_SC', color: Colors.blue, ), ), TextSpan(text: '${minVolt.toStringAsFixed(3)}V'), ], ), ), ], ), ], ), ), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildInfoItem( _buildIcon('temperature'), '温度', '${batteryTemp.toStringAsFixed(0)}℃', ), const SizedBox(height: 8), Row( children: [ RichText( text: TextSpan( style: TextStyle( fontFamily: 'Flyme', fontSize: 14, fontWeight: FontWeight.w500, color: Colors.red, ), children: [ const TextSpan( text: '↑ ', style: TextStyle( fontFamily: 'HarmonyOS_Sans_SC', color: Colors.red, ), ), TextSpan(text: '${maxTemp.toStringAsFixed(0)}℃'), ], ), ), const SizedBox(width: 12), RichText( text: TextSpan( style: TextStyle( fontFamily: 'Flyme', fontSize: 14, fontWeight: FontWeight.w500, color: Colors.blue, ), children: [ const TextSpan( text: '↓ ', style: TextStyle( fontFamily: 'HarmonyOS_Sans_SC', color: Colors.blue, ), ), TextSpan(text: '${minTemp.toStringAsFixed(0)}℃'), ], ), ), ], ), ], ), ), ], ); } 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( fontFamily: 'HarmonyOS_Sans_SC', fontSize: 14, color: Colors.grey, ), ), const SizedBox(width: 6), Text( value, style: const TextStyle( fontFamily: 'Flyme', fontSize: 16, fontWeight: FontWeight.w500, color: Colors.black, ), ), ], ); } }