diff --git a/lib/ui/order.dart b/lib/ui/order.dart index 7d741fe..91af789 100644 --- a/lib/ui/order.dart +++ b/lib/ui/order.dart @@ -10,10 +10,11 @@ class _Order extends StatelessWidget { @override Widget build(final BuildContext context) => InkWell( onTap: () { - // Navigator.of(context).push( - // MaterialPageRoute( - // builder: (final BuildContext context) => OrderDetails(order), - // ); + Navigator.of(context).push( + MaterialPageRoute( + builder: (final BuildContext context) => OrderDetails(order: order,), + ), + ); }, child: Container( padding: const EdgeInsets.symmetric(horizontal: 15), @@ -34,11 +35,117 @@ class _Order extends StatelessWidget { ), ), const SizedBox(width: 20), - Flexible( - child: Text(order.title), + Expanded( + child: Flexible( + child: Text(order.title), + ), ), + const SizedBox(width: 20), + OrderStatusChip(status: order.status), ], ), ), ); } + +class OrderDetails extends StatelessWidget { + const OrderDetails({ + required this.order, + super.key, + }); + + final Order order; + + @override + Widget build(BuildContext context) { + final Courier? courier = context.watch().state.couriers.firstWhere((final Courier courier) => courier.id == order.courierId); + final int price = order.items.fold(0, (final int previousValue, final Item item) => previousValue + (item.price ?? 0)); + return Scaffold( + appBar: AppBar( + title: Text(order.title), + ), + body: ListView( + children: [ + // Order name + Padding(padding: const EdgeInsets.all(15), child: Text(order.title, style: Theme.of(context).textTheme.headlineMedium)), + // Order description + Padding(padding: const EdgeInsets.all(15), child: Text(order.description, style: Theme.of(context).textTheme.titleSmall)), + // Order status + Padding(padding: const EdgeInsets.all(15), child: OrderStatusChip(status: order.status)), + // Order courier + Padding(padding: const EdgeInsets.all(15), child: Text('Курьер: ${courier?.name ?? 'Не назначен'} ${courier?.surname ?? ''}')), + // Created at + Padding(padding: const EdgeInsets.all(15), child: Text('Создано: ${order.orderDate}')), + // Delivery date + Padding(padding: const EdgeInsets.all(15), child: Text('Доставка: ${order.deliveryDate}')), + // Customer name + Padding(padding: const EdgeInsets.all(15), child: Text('Заказчик: ${order.customerName}')), + // Customer phone + Padding(padding: const EdgeInsets.all(15), child: Text('Телефон: ${order.customerPhone}')), + // Customer address + Padding(padding: const EdgeInsets.all(15), child: Text('Адрес: ${order.address}')), + // Order price + Padding(padding: const EdgeInsets.all(15), child: Text('Цена: ${price} руб.')), + // Order items + Padding(padding: const EdgeInsets.all(15), child: Text('Товары:')), + ...order.items.map((final Item item) => Padding(padding: const EdgeInsets.all(15), child: Text('${item.title} - ${item.price ?? 0} руб.'))), + ], + ), + ); + } +} + +class OrderStatusChip extends StatelessWidget { + const OrderStatusChip({ + required this.status, + super.key, + }); + + final String status; + + // created + // packaged + // in_delivery + // delivered + // cancelled + + Color _getChipColor() { + switch (status) { + case 'created': + return Colors.grey; + case 'packaged': + return Colors.blue; + case 'in_delivery': + return Colors.green; + case 'delivered': + return Colors.green; + case 'cancelled': + return Colors.red; + default: + return Colors.grey; + } + } + + String _getChipText() { + switch (status) { + case 'created': + return 'Создан'; + case 'packaged': + return 'Упакован'; + case 'in_delivery': + return 'В пути'; + case 'delivered': + return 'Доставлен'; + case 'cancelled': + return 'Отменен'; + default: + return 'Неизвестно'; + } + } + + @override + Widget build(BuildContext context) => Chip( + label: Text(_getChipText()), + backgroundColor: _getChipColor(), + ); +} diff --git a/lib/ui/orderspage.dart b/lib/ui/orderspage.dart index 887cccd..594050c 100644 --- a/lib/ui/orderspage.dart +++ b/lib/ui/orderspage.dart @@ -1,7 +1,11 @@ import 'package:cubit_form/cubit_form.dart'; import 'package:flutter/material.dart'; +import 'package:selfprivacy/logic/courierscubit.dart'; import 'package:selfprivacy/logic/orderscubit.dart'; +import 'package:selfprivacy/models/courier.dart'; +import 'package:selfprivacy/models/item.dart'; import 'package:selfprivacy/models/order.dart'; +import 'package:easy_localization/easy_localization.dart'; part 'order.dart';