slrpg-app/lib/src/features/inventory/presentation/widgets/plate_counter.dart

105 lines
3.1 KiB
Dart

import 'package:flutter/material.dart';
import '../../../../core/theme/app_theme.dart';
import '../../../../core/constants/asset_paths.dart';
class PlateCounter extends StatelessWidget {
final double weight;
final int count;
final ValueChanged<int> onChanged;
const PlateCounter({
super.key,
required this.weight,
required this.count,
required this.onChanged,
});
Color _getPlateColor() {
final colorValue = PlateColors.colors[weight];
return colorValue != null ? Color(colorValue) : Colors.grey;
}
Color _getTextColor(double weight) {
if (weight == 5.0) {
return Colors.black;
}
if (weight <= 2.5) {
return Colors.white70;
}
return Colors.white;
}
@override
Widget build(BuildContext context) {
return Card(
margin: const EdgeInsets.only(bottom: 8),
child: Padding(
padding: const EdgeInsets.all(12),
child: Row(
children: [
Container(
width: 48,
height: 48,
decoration: BoxDecoration(
color: _getPlateColor(),
shape: BoxShape.circle,
border: Border.all(
color: Colors.white24,
width: 2,
),
),
child: Center(
child: Text(
weight == weight.toInt()
? '${weight.toInt()}'
: weight.toStringAsFixed(2),
style: TextStyle(
color: _getTextColor(weight),
fontWeight: FontWeight.bold,
fontSize: 12,
),
),
),
),
const SizedBox(width: 16),
Expanded(
child: Text(
'${weight.toStringAsFixed(weight == weight.toInt() ? 0 : 2)} kg',
style: Theme.of(context).textTheme.bodyLarge,
),
),
IconButton(
icon: const Icon(Icons.remove_circle_outline),
onPressed: count > 0 ? () => onChanged(count - 1) : null,
color: AppTheme.primaryColor,
),
Container(
width: 40,
height: 40,
alignment: Alignment.center,
decoration: BoxDecoration(
color: AppTheme.primaryColor.withValues(alpha: 0.1),
borderRadius: BorderRadius.circular(8),
border: Border.all(
color: AppTheme.primaryColor.withValues(alpha: 0.3)),
),
child: Text(
count.toString(),
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.center,
),
),
IconButton(
icon: const Icon(Icons.add_circle_outline),
onPressed: count < 20 ? () => onChanged(count + 1) : null,
color: AppTheme.primaryColor,
),
],
),
),
);
}
}