This commit is contained in:
2026-05-18 08:31:39 +02:00
parent 1a21b44bc8
commit 906265a0e3
8 changed files with 72 additions and 49 deletions

View File

@@ -103,32 +103,26 @@ class TicketList extends StatelessWidget {
FilledButton.icon(
onPressed: () async {
// 1. Apriamo la modale e ASPETTIAMO il risultato (tipizzandolo come Record)
final Uint8List? result =
await showModalBottomSheet<Uint8List>(
context: context,
isScrollControlled: true,
builder: (context) {
return BlocProvider(
create: (context) => TicketShippingCubit(
tickets: state.selectedTickets.toList(),
)..loadRepairCenters(),
child: TicketShippingModal(
ticketIds: state.selectedTickets
.map((t) => t.id!)
.toList(),
),
);
},
final bool? result = await showModalBottomSheet<bool?>(
context: context,
isScrollControlled: true,
builder: (context) {
return BlocProvider(
create: (context) => TicketShippingCubit(
tickets: state.selectedTickets.toList(),
)..loadRepairCenters(),
child: TicketShippingModal(
ticketIds: state.selectedTickets
.map((t) => t.id!)
.toList(),
),
);
},
);
// 2. Se l'utente ha chiuso trascinando giù, result è null.
// Se ha salvato con successo, result contiene il nostro Record!
if (result != null && context.mounted) {
await Printing.layoutPdf(
onLayout: (format) async => result,
name:
'DDT_${DateTime.now().millisecondsSinceEpoch}.pdf',
);
// 5. Pulizia finale: Deselezioniamo tutti i ticket e ricarichiamo la lista
context.read<TicketListCubit>().clearSelection();
// (Se necessario, chiama il metodo per ricaricare la lista dei ticket dal DB)

View File

@@ -110,6 +110,24 @@ class TicketListCard extends StatelessWidget {
overflow: TextOverflow.ellipsis,
),
),
if (ticket.shippingDocument != null) ...[
Row(
children: [
const Text('DDT'),
const SizedBox(width: 4),
InkWell(
borderRadius: BorderRadius.circular(20),
onTap: () {},
child: const Icon(
Icons.picture_as_pdf,
color: Colors.redAccent,
size: 20,
),
),
],
),
],
// IL BADGE DELLO STATO
Container(
padding: const EdgeInsets.symmetric(
@@ -123,6 +141,7 @@ class TicketListCard extends StatelessWidget {
color: statusColor.withValues(alpha: 0.5),
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [

View File

@@ -39,21 +39,7 @@ class _TicketShippingModalState extends State<TicketShippingModal> {
child: BlocConsumer<TicketShippingCubit, TicketShippingState>(
listener: (context, state) {
if (state.status == TicketShippingStatus.success) {
final provider = state.availableProviders.firstWhere(
(p) => p.id == state.document.providerId,
);
final location = state.availableLocations.firstWhere(
(l) => l.id == state.document.destinationLocationId,
);
// Creiamo un Dart Record elegante e lo "spariamo" fuori
final ddtData = (
document: state.document,
provider: provider,
location: location,
);
Navigator.pop(context, ddtData);
Navigator.pop(context, true);
}
if (state.status == TicketShippingStatus.failure &&
state.errorMessage != null) {