diff --git a/lib/components/unified_delivery_list.dart b/lib/components/unified_delivery_list.dart new file mode 100644 index 0000000..2a94f37 --- /dev/null +++ b/lib/components/unified_delivery_list.dart @@ -0,0 +1,61 @@ +import 'package:flutter/material.dart'; +import '../models/delivery.dart'; +import '../l10n/app_localizations.dart'; +import 'delivery_list_item.dart'; + +/// A unified list view for displaying deliveries with selection and action support. +/// +/// This component provides a consistent delivery list experience across the app, +/// supporting both expanded and collapsed states for responsive sidebar layouts. +class UnifiedDeliveryListView extends StatelessWidget { + final List deliveries; + final Delivery? selectedDelivery; + final ScrollController scrollController; + final ValueChanged onDeliverySelected; + final Function(Delivery, String) onItemAction; + final bool isCollapsed; + + const UnifiedDeliveryListView({ + super.key, + required this.deliveries, + this.selectedDelivery, + required this.scrollController, + required this.onDeliverySelected, + required this.onItemAction, + this.isCollapsed = false, + }); + + @override + Widget build(BuildContext context) { + final l10n = AppLocalizations.of(context); + if (deliveries.isEmpty) { + return Center( + child: Text(l10n.noDeliveries), + ); + } + + return RefreshIndicator( + onRefresh: () async { + // Trigger refresh via provider + }, + child: ListView.builder( + controller: scrollController, + padding: const EdgeInsets.only(top: 4, bottom: 8), + physics: const AlwaysScrollableScrollPhysics(), + itemCount: deliveries.length, + itemBuilder: (context, index) { + final delivery = deliveries[index]; + return DeliveryListItem( + delivery: delivery, + isSelected: selectedDelivery?.id == delivery.id, + onTap: () => onDeliverySelected(delivery), + onCall: () => onItemAction(delivery, 'call'), + onAction: (action) => onItemAction(delivery, action), + animationIndex: index, + isCollapsed: isCollapsed, + ); + }, + ), + ); + } +} diff --git a/lib/pages/deliveries_page.dart b/lib/pages/deliveries_page.dart index cbd4d2c..1896ec5 100644 --- a/lib/pages/deliveries_page.dart +++ b/lib/pages/deliveries_page.dart @@ -12,7 +12,7 @@ import '../api/openapi_config.dart'; import '../models/delivery_commands.dart'; import '../components/map_sidebar_layout.dart'; import '../components/dark_mode_map.dart'; -import '../components/delivery_list_item.dart'; +import '../components/unified_delivery_list.dart'; import '../utils/toast_helper.dart'; class DeliveriesPage extends ConsumerStatefulWidget { @@ -508,59 +508,6 @@ class _DeliveriesPageState extends ConsumerState { } } -class UnifiedDeliveryListView extends StatelessWidget { - final List deliveries; - final Delivery? selectedDelivery; - final ScrollController scrollController; - final ValueChanged onDeliverySelected; - final Function(Delivery, String) onItemAction; - final bool isCollapsed; - - const UnifiedDeliveryListView({ - super.key, - required this.deliveries, - this.selectedDelivery, - required this.scrollController, - required this.onDeliverySelected, - required this.onItemAction, - this.isCollapsed = false, - }); - - @override - Widget build(BuildContext context) { - final l10n = AppLocalizations.of(context)!; - if (deliveries.isEmpty) { - return Center( - child: Text(l10n.noDeliveries), - ); - } - - return RefreshIndicator( - onRefresh: () async { - // Trigger refresh via provider - }, - child: ListView.builder( - controller: scrollController, - padding: const EdgeInsets.only(top: 4, bottom: 8), - physics: const AlwaysScrollableScrollPhysics(), - itemCount: deliveries.length, // Show all deliveries with scrolling - itemBuilder: (context, index) { - final delivery = deliveries[index]; - return DeliveryListItem( - delivery: delivery, - isSelected: selectedDelivery?.id == delivery.id, - onTap: () => onDeliverySelected(delivery), - onCall: () => onItemAction(delivery, 'call'), - onAction: (action) => onItemAction(delivery, action), - animationIndex: index, - isCollapsed: isCollapsed, - ); - }, - ), - ); - } -} - class DeliveryCard extends StatelessWidget { final Delivery delivery; final bool isSelected;