Test validation lancement lavage

This commit is contained in:
bastien
2026-07-09 23:08:28 +02:00
parent eb4c322001
commit cef740de26
2 changed files with 198 additions and 1 deletions
@@ -8,6 +8,8 @@ import '../../../core/router/app_router.dart';
import '../../../core/theme/app_colors.dart';
import '../../../core/theme/machine_status_theme.dart';
import '../../../core/widgets/empty_state.dart';
import '../../../core/widgets/wash_start_confirmation_dialog.dart';
import '../../wallet/data/wallet_repository.dart';
import '../../wash/data/wash_repository.dart';
import '../data/machine_repository.dart';
import '../domain/machine_detail.dart';
@@ -25,11 +27,46 @@ class MachineActionScreen extends ConsumerStatefulWidget {
class _MachineActionScreenState extends ConsumerState<MachineActionScreen> {
bool _isStarting = false;
Future<void> _confirmAndStartWash(MachineDetail detail) async {
final currency = NumberFormat.currency(locale: 'fr_FR', symbol: '');
double currentBalance;
try {
final wallet = await ref.read(walletProvider.future);
currentBalance = wallet.currentBalance;
} catch (_) {
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Impossible de charger votre solde'),
backgroundColor: AppColors.error,
),
);
}
return;
}
if (!mounted) return;
final confirmed = await WashStartConfirmationDialog.show(
context,
machineName: detail.machine.name,
currentBalance: currentBalance,
price: detail.price,
currency: currency,
);
if (confirmed && mounted) {
await _startWash(detail);
}
}
Future<void> _startWash(MachineDetail detail) async {
setState(() => _isStarting = true);
try {
await ref.read(washRepositoryProvider).startWashFromMachine(detail.machine.uuid);
ref.invalidate(washesProvider);
ref.invalidate(walletProvider);
ref.invalidate(machineDetailProvider(widget.machineUuid));
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
@@ -74,7 +111,7 @@ class _MachineActionScreenState extends ConsumerState<MachineActionScreen> {
detail: detail,
currency: currency,
isStarting: _isStarting,
onStart: () => _startWash(detail),
onStart: () => _confirmAndStartWash(detail),
onReserve: () => context.push(AppRoutes.machineBooking(widget.machineUuid)),
),
),