200 lines
6.5 KiB
Dart
200 lines
6.5 KiB
Dart
|
|
import 'package:flutter/widgets.dart';
|
||
|
|
|
||
|
|
import '../../../../application/checkout/checkout_form/checkout_form_bloc.dart';
|
||
|
|
import '../../../../common/extension/extension.dart';
|
||
|
|
import '../../../../common/theme/theme.dart';
|
||
|
|
import '../../../components/border/dashed_border.dart';
|
||
|
|
import '../../../components/card/order_menu.dart';
|
||
|
|
import '../../../components/page/page_title.dart';
|
||
|
|
import '../../../components/spaces/space.dart';
|
||
|
|
|
||
|
|
class CheckoutLeftPanel extends StatelessWidget {
|
||
|
|
final CheckoutFormState checkoutState;
|
||
|
|
final int price;
|
||
|
|
const CheckoutLeftPanel({
|
||
|
|
super.key,
|
||
|
|
required this.checkoutState,
|
||
|
|
required this.price,
|
||
|
|
});
|
||
|
|
|
||
|
|
@override
|
||
|
|
Widget build(BuildContext context) {
|
||
|
|
return Column(
|
||
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
||
|
|
children: [
|
||
|
|
PageTitle(
|
||
|
|
title: 'Konfirmasi',
|
||
|
|
subtitle: checkoutState.table != null
|
||
|
|
? 'Pesanan Meja ${checkoutState.table?.tableName ?? "-"}'
|
||
|
|
: 'Pesanan',
|
||
|
|
actionWidget: [
|
||
|
|
Container(
|
||
|
|
decoration: BoxDecoration(
|
||
|
|
borderRadius: BorderRadius.circular(8.0),
|
||
|
|
border: Border.all(color: AppColor.primary, width: 1.0),
|
||
|
|
),
|
||
|
|
padding: const EdgeInsets.all(8.0),
|
||
|
|
child: Text(
|
||
|
|
checkoutState.orderType.value,
|
||
|
|
style: TextStyle(
|
||
|
|
color: AppColor.primary,
|
||
|
|
fontSize: 16,
|
||
|
|
fontWeight: FontWeight.w600,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
Container(
|
||
|
|
padding: const EdgeInsets.all(16.0).copyWith(bottom: 8),
|
||
|
|
decoration: const BoxDecoration(
|
||
|
|
border: Border(
|
||
|
|
bottom: BorderSide(color: AppColor.border, width: 1.0),
|
||
|
|
),
|
||
|
|
),
|
||
|
|
child: Row(
|
||
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
|
|
children: [
|
||
|
|
Text(
|
||
|
|
'Item',
|
||
|
|
style: AppStyle.lg.copyWith(
|
||
|
|
color: AppColor.primary,
|
||
|
|
fontWeight: FontWeight.w600,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
SpaceWidth(160),
|
||
|
|
SizedBox(
|
||
|
|
width: 50.0,
|
||
|
|
child: Text(
|
||
|
|
'Qty',
|
||
|
|
style: AppStyle.lg.copyWith(
|
||
|
|
color: AppColor.primary,
|
||
|
|
fontWeight: FontWeight.w600,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
),
|
||
|
|
SizedBox(
|
||
|
|
child: Text(
|
||
|
|
'Price',
|
||
|
|
style: AppStyle.lg.copyWith(
|
||
|
|
color: AppColor.primary,
|
||
|
|
fontWeight: FontWeight.w600,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
),
|
||
|
|
Expanded(
|
||
|
|
child: ListView.separated(
|
||
|
|
shrinkWrap: true,
|
||
|
|
padding: const EdgeInsets.all(16.0).copyWith(top: 8.0),
|
||
|
|
itemBuilder: (context, index) =>
|
||
|
|
OrderMenu(data: checkoutState.items[index]),
|
||
|
|
separatorBuilder: (context, index) => const SpaceHeight(12.0),
|
||
|
|
itemCount: checkoutState.items.length,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
DashedDivider(color: AppColor.border),
|
||
|
|
Container(
|
||
|
|
padding: const EdgeInsets.all(16.0),
|
||
|
|
child: Column(
|
||
|
|
children: [
|
||
|
|
if (checkoutState.delivery != null) ...[
|
||
|
|
Column(
|
||
|
|
children: [
|
||
|
|
Row(
|
||
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
|
|
children: [
|
||
|
|
Text(
|
||
|
|
'Pengiriman',
|
||
|
|
style: AppStyle.md.copyWith(
|
||
|
|
color: AppColor.black,
|
||
|
|
fontWeight: FontWeight.w600,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
Text(
|
||
|
|
checkoutState.delivery?.name ?? '-',
|
||
|
|
style: AppStyle.md.copyWith(
|
||
|
|
color: AppColor.black,
|
||
|
|
fontWeight: FontWeight.w600,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
const SpaceHeight(8.0),
|
||
|
|
DashedDivider(color: AppColor.border),
|
||
|
|
const SpaceHeight(8.0),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
],
|
||
|
|
Row(
|
||
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
|
|
children: [
|
||
|
|
Text(
|
||
|
|
'Sub total',
|
||
|
|
style: AppStyle.md.copyWith(
|
||
|
|
color: AppColor.black,
|
||
|
|
fontWeight: FontWeight.w600,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
Text(
|
||
|
|
price.currencyFormatRp,
|
||
|
|
style: AppStyle.md.copyWith(
|
||
|
|
color: AppColor.black,
|
||
|
|
fontWeight: FontWeight.w600,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
const SpaceHeight(8.0),
|
||
|
|
Row(
|
||
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
|
|
children: [
|
||
|
|
Text(
|
||
|
|
'Pajak PB1',
|
||
|
|
style: AppStyle.md.copyWith(
|
||
|
|
color: AppColor.black,
|
||
|
|
fontWeight: FontWeight.w400,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
Text(
|
||
|
|
'${checkoutState.tax}% (Rp. 0)',
|
||
|
|
style: AppStyle.md.copyWith(
|
||
|
|
color: AppColor.black,
|
||
|
|
fontWeight: FontWeight.w500,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
const SpaceHeight(8.0),
|
||
|
|
DashedDivider(color: AppColor.border),
|
||
|
|
const SpaceHeight(8.0),
|
||
|
|
Row(
|
||
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
|
|
children: [
|
||
|
|
Text(
|
||
|
|
'Total',
|
||
|
|
style: AppStyle.xl.copyWith(
|
||
|
|
color: AppColor.black,
|
||
|
|
fontWeight: FontWeight.bold,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
Text(
|
||
|
|
price.currencyFormatRp,
|
||
|
|
style: const TextStyle(
|
||
|
|
color: AppColor.primary,
|
||
|
|
fontWeight: FontWeight.bold,
|
||
|
|
fontSize: 18,
|
||
|
|
),
|
||
|
|
),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
),
|
||
|
|
],
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|