fix(alarmas): add a delete action to the vacation range edit sheet
The vacation edit sheet could save changes to an existing range but had no way to remove it, forcing users back to the swipe-to-delete gesture on the list. When editing (not creating) a range, the sheet now shows an outlined delete action next to Save; it reuses the existing confirmation dialog and EstadoAlarmas.eliminarRangoVacaciones exactly as the swipe gesture already does, then pops on success.
This commit is contained in:
@@ -842,10 +842,38 @@ class _EditorVacacionesSheetState extends State<_EditorVacacionesSheet> {
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
FilledButton.icon(
|
||||
onPressed: _guardar,
|
||||
icon: const Icon(Icons.check_rounded),
|
||||
label: Text(l10n.saveRangeAction),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: FilledButton.icon(
|
||||
onPressed: _guardar,
|
||||
icon: const Icon(Icons.check_rounded),
|
||||
label: Text(l10n.saveRangeAction),
|
||||
),
|
||||
),
|
||||
// Fix `vacaciones-delete`: only when EDITING an existing
|
||||
// range (never when creating one -- there is nothing to
|
||||
// delete yet). Reuses the exact same confirmation dialog
|
||||
// (`_confirmarEliminarRango`) and deletion method
|
||||
// (`eliminarRangoVacaciones`) the swipe-to-delete gesture
|
||||
// already uses on both `_HeroRangoActivo` and
|
||||
// `_TarjetaRangoVacaciones` -- no new deletion path.
|
||||
if (widget.rango != null) ...[
|
||||
const SizedBox(width: 10),
|
||||
OutlinedButton.icon(
|
||||
key: const ValueKey('vacation-delete-button'),
|
||||
style: OutlinedButton.styleFrom(
|
||||
foregroundColor: Theme.of(context).colorScheme.error,
|
||||
side: BorderSide(
|
||||
color: Theme.of(context).colorScheme.error,
|
||||
),
|
||||
),
|
||||
onPressed: _eliminar,
|
||||
icon: const Icon(Icons.delete_outline_rounded),
|
||||
label: Text(l10n.deleteAction),
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -903,6 +931,21 @@ class _EditorVacacionesSheetState extends State<_EditorVacacionesSheet> {
|
||||
}
|
||||
if (mounted) Navigator.pop(context);
|
||||
}
|
||||
|
||||
/// Fix `vacaciones-delete`: mirrors `_guardar`'s pop-on-success shape,
|
||||
/// but confirms first (via the same `_confirmarEliminarRange` dialog the
|
||||
/// swipe gesture uses) and calls `eliminarRangoVacaciones` instead of
|
||||
/// saving. Only reachable when [widget.rango] is non-null (the delete
|
||||
/// button itself is hidden otherwise).
|
||||
Future<void> _eliminar() async {
|
||||
final rango = widget.rango;
|
||||
if (rango == null) return;
|
||||
final l10n = AppLocalizations.of(context);
|
||||
final confirmado = await _confirmarEliminarRango(context, l10n);
|
||||
if (!confirmado || !mounted) return;
|
||||
await context.read<EstadoAlarmas>().eliminarRangoVacaciones(rango.id);
|
||||
if (mounted) Navigator.pop(context);
|
||||
}
|
||||
}
|
||||
|
||||
class _PickerButton extends StatelessWidget {
|
||||
|
||||
Reference in New Issue
Block a user