Files
Holzleitner-Lieferservice-App/lib/feature/delivery/overview/presentation/delivery_info.dart
Dennis Nemec a9bf8ecdd1 Final commit.
2026-06-01 17:12:28 +02:00

93 lines
3.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:hl_lieferservice/domain/entity/delivery.dart';
import 'package:hl_lieferservice/domain/entity/tour_details.dart';
import 'package:intl/intl.dart';
/// Kopf-Karte der Auslieferungs-Übersicht. Zeigt Datum, Anzahl Lieferungen
/// und Fortschrittsbalken — gefiltert auf das aktuell gewählte Fahrzeug,
/// damit der Fahrer seine eigene Tagesleistung sieht.
class DeliveryInfo extends StatelessWidget {
final TourDetails details;
final String? selectedCarId;
const DeliveryInfo({super.key, required this.details, this.selectedCarId});
@override
Widget build(BuildContext context) {
final date = DateFormat('dd.MM.yyyy').format(details.tour.date);
final relevantDeliveries = selectedCarId != null
? details.deliveries
.where((d) => d.assignedCarId == selectedCarId)
.toList()
: details.deliveries;
final total = relevantDeliveries.length;
final done = relevantDeliveries
.where((d) => d.state == DeliveryState.completed)
.length;
final progress = total > 0 ? done / total : 0.0;
final allDone = total > 0 && done == total;
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 15),
child: SizedBox(
width: double.infinity,
child: Card(
color: Theme.of(context).colorScheme.onSecondary,
child: Padding(
padding: const EdgeInsets.all(20),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: const [
Icon(Icons.calendar_month),
Padding(
padding: EdgeInsets.only(left: 5),
child: Text('Datum'),
),
],
),
Text(date),
],
),
const SizedBox(height: 15),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: const [
Icon(Icons.local_shipping_outlined),
Padding(
padding: EdgeInsets.only(left: 5),
child: Text('Lieferungen'),
),
],
),
Text('$done / $total'),
],
),
const SizedBox(height: 10),
ClipRRect(
borderRadius: BorderRadius.circular(4),
child: LinearProgressIndicator(
value: progress,
minHeight: 6,
backgroundColor:
Theme.of(context).colorScheme.surfaceContainerHighest,
valueColor: AlwaysStoppedAnimation<Color>(
allDone ? Colors.green : Theme.of(context).primaryColor,
),
),
),
],
),
),
),
),
);
}
}