58 lines
1.5 KiB
Dart
58 lines
1.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import '../models/device.dart';
|
|
import '../utils/i10n.dart';
|
|
|
|
/// 设备状态标签。
|
|
class StatusChip extends StatelessWidget {
|
|
const StatusChip({super.key, required this.status});
|
|
|
|
/// 设备状态。
|
|
final DeviceStatus status;
|
|
|
|
Color _color(BuildContext context) {
|
|
switch (status) {
|
|
case DeviceStatus.online:
|
|
return Colors.green;
|
|
case DeviceStatus.offline:
|
|
return Colors.grey;
|
|
case DeviceStatus.warning:
|
|
return Colors.orange;
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final color = _color(context);
|
|
final t = AppLocalizations.of(context);
|
|
final label = switch (status) {
|
|
DeviceStatus.online => t.statusOnline,
|
|
DeviceStatus.offline => t.statusOffline,
|
|
DeviceStatus.warning => t.statusWarning,
|
|
};
|
|
return Container(
|
|
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 4),
|
|
decoration: BoxDecoration(
|
|
color: color.withOpacity(0.15),
|
|
borderRadius: BorderRadius.circular(999),
|
|
border: Border.all(color: color.withOpacity(0.6)),
|
|
),
|
|
child: Row(
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
Icon(Icons.circle, size: 8, color: color),
|
|
const SizedBox(width: 6),
|
|
Text(
|
|
label,
|
|
style: TextStyle(
|
|
color: color,
|
|
fontSize: 12,
|
|
fontWeight: FontWeight.w600,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|