order showcase

This commit is contained in:
Inex Code 2022-12-27 09:11:02 +03:00
parent 96d70a6725
commit 43fb58226d
2 changed files with 117 additions and 6 deletions

View File

@ -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<CouriersCubit>().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(),
);
}

View File

@ -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';