102 lines
2.9 KiB
Dart
102 lines
2.9 KiB
Dart
import 'package:flutter/material.dart';
|
||
|
||
/// 电池健康度摘要组件(健康度 + cycles + mAh)
|
||
class BatterySummary extends StatelessWidget {
|
||
final double healthPercent;
|
||
final int cycleCount;
|
||
final double currentCap;
|
||
final int designCap;
|
||
|
||
const BatterySummary({
|
||
super.key,
|
||
required this.healthPercent,
|
||
required this.cycleCount,
|
||
required this.currentCap,
|
||
required this.designCap,
|
||
});
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
return Row(
|
||
crossAxisAlignment: CrossAxisAlignment.end,
|
||
children: [
|
||
// 健康度大数字
|
||
Row(
|
||
crossAxisAlignment: CrossAxisAlignment.baseline,
|
||
textBaseline: TextBaseline.alphabetic,
|
||
children: [
|
||
Text(
|
||
healthPercent.toStringAsFixed(1),
|
||
style: TextStyle(
|
||
fontSize: 40,
|
||
fontWeight: FontWeight.w500,
|
||
height: 1.0,
|
||
color: healthPercent < 70 ? Colors.red : Colors.black,
|
||
),
|
||
),
|
||
const SizedBox(width: 2),
|
||
Text(
|
||
'%',
|
||
style: TextStyle(
|
||
fontSize: 20,
|
||
fontWeight: FontWeight.w300,
|
||
height: 1.0,
|
||
color: healthPercent < 70 ? Colors.red : Colors.grey.shade600,
|
||
),
|
||
),
|
||
],
|
||
),
|
||
const Spacer(),
|
||
// cycles + mAh
|
||
Column(
|
||
crossAxisAlignment: CrossAxisAlignment.end,
|
||
children: [
|
||
Text(
|
||
'$cycleCount cycles', // ✅ 修正:去掉下划线,使用 cycleCount
|
||
style: const TextStyle(
|
||
fontSize: 16,
|
||
fontWeight: FontWeight.w500,
|
||
height: 1.2,
|
||
),
|
||
),
|
||
const SizedBox(height: 4),
|
||
Text.rich(
|
||
TextSpan(
|
||
children: [
|
||
TextSpan(
|
||
text: currentCap.toStringAsFixed(0),
|
||
style: const TextStyle(
|
||
fontSize: 20,
|
||
fontWeight: FontWeight.w300,
|
||
),
|
||
),
|
||
TextSpan(
|
||
text: ' / ',
|
||
style: TextStyle(
|
||
fontSize: 20,
|
||
fontWeight: FontWeight.w300,
|
||
color: Colors.grey.shade500,
|
||
),
|
||
),
|
||
TextSpan(
|
||
text: '${designCap}mAh',
|
||
style: const TextStyle(
|
||
fontSize: 20,
|
||
fontWeight: FontWeight.w300,
|
||
),
|
||
),
|
||
],
|
||
),
|
||
style: const TextStyle(
|
||
fontSize: 20,
|
||
fontWeight: FontWeight.w300,
|
||
height: 1.0,
|
||
),
|
||
),
|
||
],
|
||
),
|
||
],
|
||
);
|
||
}
|
||
}
|