55 lines
1.6 KiB
Dart
55 lines
1.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import 'package:badges/badges.dart' as badges;
|
|
|
|
import 'package:pshared/models/payment/status.dart';
|
|
|
|
|
|
class OperationStatusBadge extends StatelessWidget {
|
|
final OperationStatus status;
|
|
|
|
const OperationStatusBadge({super.key, required this.status});
|
|
|
|
Color _badgeColor(BuildContext context) {
|
|
final scheme = Theme.of(context).colorScheme;
|
|
switch (status) {
|
|
case OperationStatus.processing:
|
|
return scheme.primary;
|
|
case OperationStatus.success:
|
|
return scheme.secondary;
|
|
case OperationStatus.error:
|
|
return scheme.error;
|
|
}
|
|
}
|
|
|
|
Color _textColor(Color background) {
|
|
// computeLuminance returns 0 for black, 1 for white
|
|
return background.computeLuminance() > 0.5 ? Colors.black : Colors.white;
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final label = status.localized(context);
|
|
final bg = _badgeColor(context);
|
|
final fg = _textColor(bg);
|
|
|
|
return badges.Badge(
|
|
badgeStyle: badges.BadgeStyle(
|
|
shape: badges.BadgeShape.square,
|
|
badgeColor: bg,
|
|
borderRadius: BorderRadius.circular(12), // fully rounded
|
|
padding: const EdgeInsets.symmetric(
|
|
horizontal: 6, vertical: 2 // tighter padding
|
|
),
|
|
),
|
|
badgeContent: Text(
|
|
label.toUpperCase(), // or keep sentence case
|
|
style: TextStyle(
|
|
color: fg,
|
|
fontSize: 11, // smaller text
|
|
fontWeight: FontWeight.w500, // medium weight
|
|
),
|
|
),
|
|
);
|
|
}
|
|
} |