Compare commits

...

4 Commits

Author SHA1 Message Date
efrilm
7b64ca2bb3 feat: ui confirm payment dialog 2025-08-02 13:27:21 +07:00
efrilm
79d606a08e feat: delete item 2025-08-02 11:06:41 +07:00
efrilm
08df1b6384 feat: update home page 2025-08-02 11:00:30 +07:00
efrilm
45b348684e feat: sales page 2025-08-02 10:50:48 +07:00
27 changed files with 4229 additions and 1688 deletions

View File

@ -0,0 +1,41 @@
import 'package:flutter/material.dart';
class DashedDivider extends StatelessWidget {
final double height;
final double dashWidth;
final double dashSpacing;
final Color color;
const DashedDivider({
super.key,
this.height = 1,
this.dashWidth = 5,
this.dashSpacing = 3,
this.color = Colors.grey,
});
@override
Widget build(BuildContext context) {
return SizedBox(
height: height,
child: LayoutBuilder(
builder: (context, constraints) {
final boxWidth = constraints.constrainWidth();
final dashCount = (boxWidth / (dashWidth + dashSpacing)).floor();
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: List.generate(dashCount, (_) {
return SizedBox(
width: dashWidth,
height: height,
child: DecoratedBox(
decoration: BoxDecoration(color: color),
),
);
}),
);
},
),
);
}
}

View File

@ -7,7 +7,6 @@ import 'package:enaklo_pos/data/models/response/table_model.dart';
import 'package:enaklo_pos/presentation/home/models/order_model.dart';
import 'package:enaklo_pos/presentation/table/models/draft_order_item.dart';
import 'package:enaklo_pos/presentation/table/models/draft_order_model.dart';
import 'package:intl/intl.dart';
import 'package:sqflite/sqflite.dart';
import '../../presentation/home/models/product_quantity.dart';
@ -169,7 +168,8 @@ class ProductLocalDatasource {
if (oldVersion < 2) {
// Add order_type column to orders table if it doesn't exist
try {
await db.execute('ALTER TABLE $tableOrder ADD COLUMN order_type TEXT DEFAULT "DINE IN"');
await db.execute(
'ALTER TABLE $tableOrder ADD COLUMN order_type TEXT DEFAULT "DINE IN"');
log("Added order_type column to orders table");
} catch (e) {
log("order_type column might already exist: $e");
@ -238,6 +238,31 @@ class ProductLocalDatasource {
});
}
Future<List<OrderModel>> getAllOrderByRange(
DateTime start, DateTime end) async {
final db = await instance.database;
// Format ke ISO 8601 untuk range, hasil: yyyy-MM-ddTHH:mm:ss
final startIso = start.toIso8601String();
final endIso = end.toIso8601String();
final startDateYYYYMMDD = startIso.substring(0, 10);
final endDateYYYYMMDD = endIso.substring(0, 10);
final List<Map<String, dynamic>> maps = await db.query(
tableOrder,
where: 'substr(transaction_time, 1, 10) BETWEEN ? AND ?',
whereArgs: [startDateYYYYMMDD, endDateYYYYMMDD],
orderBy: 'transaction_time DESC',
);
log("Get All Order By Range: $startDateYYYYMMDD $endDateYYYYMMDD");
return List.generate(maps.length, (i) {
log("Save save OrderModel: ${OrderModel.fromMap(maps[i])}");
return OrderModel.fromMap(maps[i]);
});
}
//get order item by order id
Future<List<ProductQuantity>> getOrderItemByOrderId(int orderId) async {
final db = await instance.database;
@ -578,7 +603,8 @@ class ProductLocalDatasource {
where: 'id_draft_order = ?', whereArgs: [draftOrder.id]);
for (var orderItem in draftOrder.orders) {
await db.insert('draft_order_items', orderItem.toMapForLocal(draftOrder.id!));
await db.insert(
'draft_order_items', orderItem.toMapForLocal(draftOrder.id!));
}
}

View File

@ -3,7 +3,6 @@ import 'dart:developer';
import 'package:bloc/bloc.dart';
import 'package:enaklo_pos/data/datasources/product_local_datasource.dart';
import 'package:enaklo_pos/data/models/response/discount_response_model.dart';
import 'package:enaklo_pos/presentation/home/models/order_item.dart';
import 'package:enaklo_pos/presentation/table/models/draft_order_item.dart';
import 'package:enaklo_pos/presentation/table/models/draft_order_model.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
@ -21,7 +20,8 @@ part 'checkout_bloc.freezed.dart';
class CheckoutBloc extends Bloc<CheckoutEvent, CheckoutState> {
final SettingsLocalDatasource settingsLocalDatasource;
CheckoutBloc({required this.settingsLocalDatasource}) : super(const CheckoutState.initial()) {
CheckoutBloc({required this.settingsLocalDatasource})
: super(const CheckoutState.initial()) {
on<_AddItem>((event, emit) {
var currentState = state as _Loaded;
List<ProductQuantity> items = [...currentState.items];
@ -74,6 +74,28 @@ class CheckoutBloc extends Bloc<CheckoutEvent, CheckoutState> {
currentState.orderType));
});
on<_DeleteItem>((event, emit) {
var currentState = state as _Loaded;
List<ProductQuantity> items = [...currentState.items];
var index =
items.indexWhere((element) => element.product.id == event.product.id);
emit(const _Loading());
items.removeAt(index);
emit(_Loaded(
items,
currentState.discountModel,
currentState.discount,
currentState.discountAmount,
currentState.tax,
currentState.serviceCharge,
currentState.totalQuantity,
currentState.totalPrice,
currentState.draftName,
currentState.orderType));
});
on<_Started>((event, emit) async {
emit(const _Loading());
try {
@ -81,7 +103,8 @@ class CheckoutBloc extends Bloc<CheckoutEvent, CheckoutState> {
final tax = await settingsLocalDatasource.getTax();
final serviceCharge = await settingsLocalDatasource.getServiceCharge();
emit(_Loaded([], null, 0, 0, tax.value, serviceCharge, 0, 0, '', OrderType.dineIn));
emit(_Loaded([], null, 0, 0, tax.value, serviceCharge, 0, 0, '',
OrderType.dineIn));
} catch (e) {
// If loading fails, use default values
log('Failed to load settings: $e');
@ -199,7 +222,8 @@ class CheckoutBloc extends Bloc<CheckoutEvent, CheckoutState> {
on<_UpdateItemNotes>((event, emit) {
var currentState = state as _Loaded;
List<ProductQuantity> items = [...currentState.items];
var index = items.indexWhere((element) => element.product.id == event.product.id);
var index =
items.indexWhere((element) => element.product.id == event.product.id);
if (index != -1) {
items[index] = items[index].copyWith(notes: event.notes);
}

View File

@ -21,6 +21,7 @@ mixin _$CheckoutEvent {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -40,6 +41,7 @@ mixin _$CheckoutEvent {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -58,6 +60,7 @@ mixin _$CheckoutEvent {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -77,6 +80,7 @@ mixin _$CheckoutEvent {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -94,6 +98,7 @@ mixin _$CheckoutEvent {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -111,6 +116,7 @@ mixin _$CheckoutEvent {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -191,6 +197,7 @@ class _$StartedImpl implements _Started {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -213,6 +220,7 @@ class _$StartedImpl implements _Started {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -234,6 +242,7 @@ class _$StartedImpl implements _Started {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -259,6 +268,7 @@ class _$StartedImpl implements _Started {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -279,6 +289,7 @@ class _$StartedImpl implements _Started {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -299,6 +310,7 @@ class _$StartedImpl implements _Started {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -393,6 +405,7 @@ class _$AddItemImpl implements _AddItem {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -415,6 +428,7 @@ class _$AddItemImpl implements _AddItem {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -436,6 +450,7 @@ class _$AddItemImpl implements _AddItem {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -461,6 +476,7 @@ class _$AddItemImpl implements _AddItem {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -481,6 +497,7 @@ class _$AddItemImpl implements _AddItem {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -501,6 +518,7 @@ class _$AddItemImpl implements _AddItem {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -603,6 +621,7 @@ class _$RemoveItemImpl implements _RemoveItem {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -625,6 +644,7 @@ class _$RemoveItemImpl implements _RemoveItem {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -646,6 +666,7 @@ class _$RemoveItemImpl implements _RemoveItem {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -671,6 +692,7 @@ class _$RemoveItemImpl implements _RemoveItem {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -691,6 +713,7 @@ class _$RemoveItemImpl implements _RemoveItem {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -711,6 +734,7 @@ class _$RemoveItemImpl implements _RemoveItem {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -742,6 +766,222 @@ abstract class _RemoveItem implements CheckoutEvent {
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class _$$DeleteItemImplCopyWith<$Res> {
factory _$$DeleteItemImplCopyWith(
_$DeleteItemImpl value, $Res Function(_$DeleteItemImpl) then) =
__$$DeleteItemImplCopyWithImpl<$Res>;
@useResult
$Res call({Product product});
}
/// @nodoc
class __$$DeleteItemImplCopyWithImpl<$Res>
extends _$CheckoutEventCopyWithImpl<$Res, _$DeleteItemImpl>
implements _$$DeleteItemImplCopyWith<$Res> {
__$$DeleteItemImplCopyWithImpl(
_$DeleteItemImpl _value, $Res Function(_$DeleteItemImpl) _then)
: super(_value, _then);
/// Create a copy of CheckoutEvent
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? product = null,
}) {
return _then(_$DeleteItemImpl(
null == product
? _value.product
: product // ignore: cast_nullable_to_non_nullable
as Product,
));
}
}
/// @nodoc
class _$DeleteItemImpl implements _DeleteItem {
const _$DeleteItemImpl(this.product);
@override
final Product product;
@override
String toString() {
return 'CheckoutEvent.deleteItem(product: $product)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$DeleteItemImpl &&
(identical(other.product, product) || other.product == product));
}
@override
int get hashCode => Object.hash(runtimeType, product);
/// Create a copy of CheckoutEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$DeleteItemImplCopyWith<_$DeleteItemImpl> get copyWith =>
__$$DeleteItemImplCopyWithImpl<_$DeleteItemImpl>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
required TResult Function(int serviceCharge) addServiceCharge,
required TResult Function() removeTax,
required TResult Function() removeServiceCharge,
required TResult Function(OrderType orderType) updateOrderType,
required TResult Function(Product product, String notes) updateItemNotes,
required TResult Function(
int tableNumber, String draftName, int discountAmount)
saveDraftOrder,
required TResult Function(DraftOrderModel data) loadDraftOrder,
}) {
return deleteItem(product);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
TResult? Function(int serviceCharge)? addServiceCharge,
TResult? Function()? removeTax,
TResult? Function()? removeServiceCharge,
TResult? Function(OrderType orderType)? updateOrderType,
TResult? Function(Product product, String notes)? updateItemNotes,
TResult? Function(int tableNumber, String draftName, int discountAmount)?
saveDraftOrder,
TResult? Function(DraftOrderModel data)? loadDraftOrder,
}) {
return deleteItem?.call(product);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
TResult Function(int serviceCharge)? addServiceCharge,
TResult Function()? removeTax,
TResult Function()? removeServiceCharge,
TResult Function(OrderType orderType)? updateOrderType,
TResult Function(Product product, String notes)? updateItemNotes,
TResult Function(int tableNumber, String draftName, int discountAmount)?
saveDraftOrder,
TResult Function(DraftOrderModel data)? loadDraftOrder,
required TResult orElse(),
}) {
if (deleteItem != null) {
return deleteItem(product);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
required TResult Function(_AddServiceCharge value) addServiceCharge,
required TResult Function(_RemoveTax value) removeTax,
required TResult Function(_RemoveServiceCharge value) removeServiceCharge,
required TResult Function(_UpdateOrderType value) updateOrderType,
required TResult Function(_UpdateItemNotes value) updateItemNotes,
required TResult Function(_SaveDraftOrder value) saveDraftOrder,
required TResult Function(_LoadDraftOrder value) loadDraftOrder,
}) {
return deleteItem(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
TResult? Function(_AddServiceCharge value)? addServiceCharge,
TResult? Function(_RemoveTax value)? removeTax,
TResult? Function(_RemoveServiceCharge value)? removeServiceCharge,
TResult? Function(_UpdateOrderType value)? updateOrderType,
TResult? Function(_UpdateItemNotes value)? updateItemNotes,
TResult? Function(_SaveDraftOrder value)? saveDraftOrder,
TResult? Function(_LoadDraftOrder value)? loadDraftOrder,
}) {
return deleteItem?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
TResult Function(_AddServiceCharge value)? addServiceCharge,
TResult Function(_RemoveTax value)? removeTax,
TResult Function(_RemoveServiceCharge value)? removeServiceCharge,
TResult Function(_UpdateOrderType value)? updateOrderType,
TResult Function(_UpdateItemNotes value)? updateItemNotes,
TResult Function(_SaveDraftOrder value)? saveDraftOrder,
TResult Function(_LoadDraftOrder value)? loadDraftOrder,
required TResult orElse(),
}) {
if (deleteItem != null) {
return deleteItem(this);
}
return orElse();
}
}
abstract class _DeleteItem implements CheckoutEvent {
const factory _DeleteItem(final Product product) = _$DeleteItemImpl;
Product get product;
/// Create a copy of CheckoutEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
_$$DeleteItemImplCopyWith<_$DeleteItemImpl> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class _$$AddDiscountImplCopyWith<$Res> {
factory _$$AddDiscountImplCopyWith(
@ -814,6 +1054,7 @@ class _$AddDiscountImpl implements _AddDiscount {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -836,6 +1077,7 @@ class _$AddDiscountImpl implements _AddDiscount {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -857,6 +1099,7 @@ class _$AddDiscountImpl implements _AddDiscount {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -882,6 +1125,7 @@ class _$AddDiscountImpl implements _AddDiscount {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -902,6 +1146,7 @@ class _$AddDiscountImpl implements _AddDiscount {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -922,6 +1167,7 @@ class _$AddDiscountImpl implements _AddDiscount {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -997,6 +1243,7 @@ class _$RemoveDiscountImpl implements _RemoveDiscount {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -1019,6 +1266,7 @@ class _$RemoveDiscountImpl implements _RemoveDiscount {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -1040,6 +1288,7 @@ class _$RemoveDiscountImpl implements _RemoveDiscount {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -1065,6 +1314,7 @@ class _$RemoveDiscountImpl implements _RemoveDiscount {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -1085,6 +1335,7 @@ class _$RemoveDiscountImpl implements _RemoveDiscount {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -1105,6 +1356,7 @@ class _$RemoveDiscountImpl implements _RemoveDiscount {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -1199,6 +1451,7 @@ class _$AddTaxImpl implements _AddTax {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -1221,6 +1474,7 @@ class _$AddTaxImpl implements _AddTax {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -1242,6 +1496,7 @@ class _$AddTaxImpl implements _AddTax {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -1267,6 +1522,7 @@ class _$AddTaxImpl implements _AddTax {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -1287,6 +1543,7 @@ class _$AddTaxImpl implements _AddTax {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -1307,6 +1564,7 @@ class _$AddTaxImpl implements _AddTax {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -1411,6 +1669,7 @@ class _$AddServiceChargeImpl implements _AddServiceCharge {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -1433,6 +1692,7 @@ class _$AddServiceChargeImpl implements _AddServiceCharge {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -1454,6 +1714,7 @@ class _$AddServiceChargeImpl implements _AddServiceCharge {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -1479,6 +1740,7 @@ class _$AddServiceChargeImpl implements _AddServiceCharge {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -1499,6 +1761,7 @@ class _$AddServiceChargeImpl implements _AddServiceCharge {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -1519,6 +1782,7 @@ class _$AddServiceChargeImpl implements _AddServiceCharge {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -1595,6 +1859,7 @@ class _$RemoveTaxImpl implements _RemoveTax {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -1617,6 +1882,7 @@ class _$RemoveTaxImpl implements _RemoveTax {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -1638,6 +1904,7 @@ class _$RemoveTaxImpl implements _RemoveTax {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -1663,6 +1930,7 @@ class _$RemoveTaxImpl implements _RemoveTax {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -1683,6 +1951,7 @@ class _$RemoveTaxImpl implements _RemoveTax {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -1703,6 +1972,7 @@ class _$RemoveTaxImpl implements _RemoveTax {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -1771,6 +2041,7 @@ class _$RemoveServiceChargeImpl implements _RemoveServiceCharge {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -1793,6 +2064,7 @@ class _$RemoveServiceChargeImpl implements _RemoveServiceCharge {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -1814,6 +2086,7 @@ class _$RemoveServiceChargeImpl implements _RemoveServiceCharge {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -1839,6 +2112,7 @@ class _$RemoveServiceChargeImpl implements _RemoveServiceCharge {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -1859,6 +2133,7 @@ class _$RemoveServiceChargeImpl implements _RemoveServiceCharge {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -1879,6 +2154,7 @@ class _$RemoveServiceChargeImpl implements _RemoveServiceCharge {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -1975,6 +2251,7 @@ class _$UpdateOrderTypeImpl implements _UpdateOrderType {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -1997,6 +2274,7 @@ class _$UpdateOrderTypeImpl implements _UpdateOrderType {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -2018,6 +2296,7 @@ class _$UpdateOrderTypeImpl implements _UpdateOrderType {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -2043,6 +2322,7 @@ class _$UpdateOrderTypeImpl implements _UpdateOrderType {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -2063,6 +2343,7 @@ class _$UpdateOrderTypeImpl implements _UpdateOrderType {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -2083,6 +2364,7 @@ class _$UpdateOrderTypeImpl implements _UpdateOrderType {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -2195,6 +2477,7 @@ class _$UpdateItemNotesImpl implements _UpdateItemNotes {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -2217,6 +2500,7 @@ class _$UpdateItemNotesImpl implements _UpdateItemNotes {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -2238,6 +2522,7 @@ class _$UpdateItemNotesImpl implements _UpdateItemNotes {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -2263,6 +2548,7 @@ class _$UpdateItemNotesImpl implements _UpdateItemNotes {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -2283,6 +2569,7 @@ class _$UpdateItemNotesImpl implements _UpdateItemNotes {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -2303,6 +2590,7 @@ class _$UpdateItemNotesImpl implements _UpdateItemNotes {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -2429,6 +2717,7 @@ class _$SaveDraftOrderImpl implements _SaveDraftOrder {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -2451,6 +2740,7 @@ class _$SaveDraftOrderImpl implements _SaveDraftOrder {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -2472,6 +2762,7 @@ class _$SaveDraftOrderImpl implements _SaveDraftOrder {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -2497,6 +2788,7 @@ class _$SaveDraftOrderImpl implements _SaveDraftOrder {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -2517,6 +2809,7 @@ class _$SaveDraftOrderImpl implements _SaveDraftOrder {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -2537,6 +2830,7 @@ class _$SaveDraftOrderImpl implements _SaveDraftOrder {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,
@ -2643,6 +2937,7 @@ class _$LoadDraftOrderImpl implements _LoadDraftOrder {
required TResult Function() started,
required TResult Function(Product product) addItem,
required TResult Function(Product product) removeItem,
required TResult Function(Product product) deleteItem,
required TResult Function(Discount discount) addDiscount,
required TResult Function() removeDiscount,
required TResult Function(int tax) addTax,
@ -2665,6 +2960,7 @@ class _$LoadDraftOrderImpl implements _LoadDraftOrder {
TResult? Function()? started,
TResult? Function(Product product)? addItem,
TResult? Function(Product product)? removeItem,
TResult? Function(Product product)? deleteItem,
TResult? Function(Discount discount)? addDiscount,
TResult? Function()? removeDiscount,
TResult? Function(int tax)? addTax,
@ -2686,6 +2982,7 @@ class _$LoadDraftOrderImpl implements _LoadDraftOrder {
TResult Function()? started,
TResult Function(Product product)? addItem,
TResult Function(Product product)? removeItem,
TResult Function(Product product)? deleteItem,
TResult Function(Discount discount)? addDiscount,
TResult Function()? removeDiscount,
TResult Function(int tax)? addTax,
@ -2711,6 +3008,7 @@ class _$LoadDraftOrderImpl implements _LoadDraftOrder {
required TResult Function(_Started value) started,
required TResult Function(_AddItem value) addItem,
required TResult Function(_RemoveItem value) removeItem,
required TResult Function(_DeleteItem value) deleteItem,
required TResult Function(_AddDiscount value) addDiscount,
required TResult Function(_RemoveDiscount value) removeDiscount,
required TResult Function(_AddTax value) addTax,
@ -2731,6 +3029,7 @@ class _$LoadDraftOrderImpl implements _LoadDraftOrder {
TResult? Function(_Started value)? started,
TResult? Function(_AddItem value)? addItem,
TResult? Function(_RemoveItem value)? removeItem,
TResult? Function(_DeleteItem value)? deleteItem,
TResult? Function(_AddDiscount value)? addDiscount,
TResult? Function(_RemoveDiscount value)? removeDiscount,
TResult? Function(_AddTax value)? addTax,
@ -2751,6 +3050,7 @@ class _$LoadDraftOrderImpl implements _LoadDraftOrder {
TResult Function(_Started value)? started,
TResult Function(_AddItem value)? addItem,
TResult Function(_RemoveItem value)? removeItem,
TResult Function(_DeleteItem value)? deleteItem,
TResult Function(_AddDiscount value)? addDiscount,
TResult Function(_RemoveDiscount value)? removeDiscount,
TResult Function(_AddTax value)? addTax,

View File

@ -7,6 +7,8 @@ class CheckoutEvent with _$CheckoutEvent {
const factory CheckoutEvent.addItem(Product product) = _AddItem;
//remove item
const factory CheckoutEvent.removeItem(Product product) = _RemoveItem;
// Delete Item
const factory CheckoutEvent.deleteItem(Product product) = _DeleteItem;
//add discount
const factory CheckoutEvent.addDiscount(Discount discount) = _AddDiscount;
@ -23,10 +25,12 @@ class CheckoutEvent with _$CheckoutEvent {
const factory CheckoutEvent.removeServiceCharge() = _RemoveServiceCharge;
//update order type
const factory CheckoutEvent.updateOrderType(OrderType orderType) = _UpdateOrderType;
const factory CheckoutEvent.updateOrderType(OrderType orderType) =
_UpdateOrderType;
//update item notes
const factory CheckoutEvent.updateItemNotes(Product product, String notes) = _UpdateItemNotes;
const factory CheckoutEvent.updateItemNotes(Product product, String notes) =
_UpdateItemNotes;
//save draft order
const factory CheckoutEvent.saveDraftOrder(

View File

@ -0,0 +1,76 @@
import 'package:enaklo_pos/core/components/custom_modal_dialog.dart';
import 'package:enaklo_pos/core/components/spaces.dart';
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:flutter/material.dart';
class SaveDialog extends StatelessWidget {
const SaveDialog({super.key});
@override
Widget build(BuildContext context) {
return CustomModalDialog(
title: 'Pilih Aksi',
subtitle: 'Lanjutkan proses pesanan atau simpan untuk nanti.',
contentPadding:
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0),
child: Column(
children: [
_item(
icon: Icons.schedule_outlined,
title: 'Bayar Nanti',
subtitle: 'Simpan pesanan dan bayar nanti',
onTap: () {},
),
SpaceHeight(16.0),
_item(
icon: Icons.shopping_cart_checkout_outlined,
title: 'Tambahkan Pesanan',
subtitle: 'ambah item ke daftar pesanan',
onTap: () {},
),
],
),
);
}
Widget _item({
required IconData icon,
required String title,
required String subtitle,
required Function() onTap,
}) {
return GestureDetector(
onTap: onTap,
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0),
decoration: BoxDecoration(
color: AppColors.white,
borderRadius: BorderRadius.circular(8.0),
border: Border.all(
color: AppColors.grey,
width: 1.0,
),
),
child: Row(
children: [
Icon(icon, color: AppColors.primary, size: 26.0),
SpaceWidth(12.0),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: const TextStyle(fontWeight: FontWeight.w600),
),
Text(
subtitle,
style: const TextStyle(color: Colors.grey),
),
],
),
],
),
),
);
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -168,11 +168,10 @@ class _HomePageState extends State<HomePage> {
padding: const EdgeInsets.all(16),
gridDelegate:
SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent:
200, // Lebar maksimal tiap item (bisa kamu ubah)
maxCrossAxisExtent: 180,
mainAxisSpacing: 30,
crossAxisSpacing: 30,
childAspectRatio: 0.85,
childAspectRatio: 180 / 240,
),
itemBuilder: (context, index) =>
ProductCard(

View File

@ -0,0 +1,74 @@
import 'package:enaklo_pos/core/components/components.dart';
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
import 'package:flutter/material.dart';
class ConfirmPaymentTitle extends StatelessWidget {
final String title;
final String? subtitle;
final bool isBack;
final List<Widget>? actionWidget;
const ConfirmPaymentTitle({
super.key,
required this.title,
this.subtitle,
this.isBack = true,
this.actionWidget,
});
@override
Widget build(BuildContext context) {
return Container(
height: context.deviceHeight * 0.1,
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0),
decoration: BoxDecoration(
color: AppColors.white,
border: Border(
bottom: BorderSide(
color: AppColors.grey,
width: 1.0,
),
),
),
child: Row(
children: [
if (isBack) ...[
GestureDetector(
onTap: () => context.pop(),
child: Icon(
Icons.arrow_back,
color: AppColors.primary,
size: 24,
),
),
SpaceWidth(16),
],
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: TextStyle(
color: AppColors.black,
fontSize: 20,
fontWeight: FontWeight.w600,
),
),
if (subtitle != null) ...[
const SizedBox(height: 4.0),
Text(
subtitle!,
style:
const TextStyle(fontSize: 14.0, color: AppColors.grey),
),
]
],
),
),
if (actionWidget != null) ...actionWidget!,
],
),
);
}
}

View File

@ -4,6 +4,7 @@ import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
import 'package:enaklo_pos/data/models/response/table_model.dart';
import 'package:enaklo_pos/presentation/home/dialog/type_dialog.dart';
import 'package:enaklo_pos/presentation/home/pages/dashboard_page.dart';
import 'package:enaklo_pos/presentation/sales/pages/sales_page.dart';
import 'package:flutter/material.dart';
class HomeRightTitle extends StatelessWidget {
@ -33,7 +34,7 @@ class HomeRightTitle extends StatelessWidget {
width: 180.0,
height: 40,
elevation: 0,
onPressed: () {},
onPressed: () => context.push(SalesPage()),
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
icon: Icon(

View File

@ -29,7 +29,7 @@ class HomeTitle extends StatelessWidget {
'DEFAULT OUTLET',
style: TextStyle(
color: AppColors.primary,
fontSize: 28,
fontSize: 20,
fontWeight: FontWeight.w600,
),
),

View File

@ -170,16 +170,23 @@ class _OrderMenuState extends State<OrderMenu> {
),
),
const SpaceWidth(16.0),
Container(
height: 40,
width: 40,
decoration: BoxDecoration(
color: AppColors.primary,
borderRadius: BorderRadius.circular(8.0),
),
child: Icon(
Icons.delete_outline,
color: AppColors.white,
GestureDetector(
onTap: () {
context
.read<CheckoutBloc>()
.add(CheckoutEvent.deleteItem(widget.data.product));
},
child: Container(
height: 40,
width: 40,
decoration: BoxDecoration(
color: AppColors.primary,
borderRadius: BorderRadius.circular(8.0),
),
child: Icon(
Icons.delete_outline,
color: AppColors.white,
),
),
),
],

View File

@ -7,7 +7,6 @@ import 'package:enaklo_pos/core/extensions/string_ext.dart';
import 'package:enaklo_pos/data/models/response/product_response_model.dart';
import 'package:enaklo_pos/presentation/home/bloc/checkout/checkout_bloc.dart';
import '../../../core/components/spaces.dart';
import '../../../core/constants/colors.dart';
class ProductCard extends StatelessWidget {
@ -27,88 +26,80 @@ class ProductCard extends StatelessWidget {
context.read<CheckoutBloc>().add(CheckoutEvent.addItem(data));
},
child: Container(
padding: const EdgeInsets.all(16.0),
decoration: BoxDecoration(
color: AppColors.white,
borderRadius: BorderRadius.circular(12.0),
borderRadius: BorderRadius.circular(8.0),
border: Border.all(
color: AppColors.disabled,
),
),
child: Stack(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SpaceHeight(8),
Container(
alignment: Alignment.center,
padding: const EdgeInsets.all(12.0),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: AppColors.disabled.withOpacity(0.4),
),
child: ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(40.0)),
Padding(
padding: const EdgeInsets.all(4.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(8.0)),
child: CachedNetworkImage(
imageUrl: data.image!.contains('http')
? data.image!
: '${Variables.baseUrl}/${data.image}',
fit: BoxFit.cover,
width: 60,
height: 60,
width: double.infinity,
height: 120,
errorWidget: (context, url, error) => Container(
width: 60,
height: 60,
width: double.infinity,
height: 120,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: AppColors.disabled.withOpacity(0.4),
),
child: const Icon(
Icons.image_not_supported,
Icons.image,
color: AppColors.grey,
),
),
),
),
),
const Spacer(),
Text(
"${data.name}",
style: const TextStyle(
fontSize: 15,
fontWeight: FontWeight.w700,
),
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
const Spacer(),
Align(
alignment: Alignment.center,
child: Text(
data.category?.name ?? '-',
const Spacer(),
Text(
"${data.name}",
style: const TextStyle(
fontSize: 14,
color: AppColors.grey,
fontWeight: FontWeight.w500,
fontWeight: FontWeight.w700,
),
maxLines: 2,
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
),
const Spacer(),
Align(
alignment: Alignment.center,
child: Text(
data.price!.toIntegerFromText.currencyFormatRp,
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 13,
const Spacer(),
Align(
alignment: Alignment.center,
child: Text(
data.category?.name ?? '-',
style: const TextStyle(
fontSize: 12,
color: AppColors.grey,
fontWeight: FontWeight.w500,
),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
),
),
const Spacer(),
],
const Spacer(),
Align(
alignment: Alignment.center,
child: Text(
data.price!.toIntegerFromText.currencyFormatRp,
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 12,
),
),
),
const Spacer(),
],
),
),
BlocBuilder<CheckoutBloc, CheckoutState>(
builder: (context, state) {

View File

@ -1,4 +1,3 @@
import 'package:bloc/bloc.dart';
import 'package:enaklo_pos/data/datasources/product_local_datasource.dart';
import 'package:enaklo_pos/presentation/home/models/order_model.dart';
@ -12,9 +11,14 @@ class DaySalesBloc extends Bloc<DaySalesEvent, DaySalesState> {
final ProductLocalDatasource datasource;
DaySalesBloc(this.datasource) : super(const _Initial()) {
on<_GetDaySales>((event, emit) async {
emit(const _Loading());
final result = await datasource.getAllOrder(event.date);
emit(_Loaded(result));
});
on<_GetRangeDateSales>((event, emit) async {
emit(const _Loading());
final result =
await datasource.getAllOrder(event.date);
await datasource.getAllOrderByRange(event.startDate, event.endDate);
emit(_Loaded(result));
});
}

View File

@ -20,18 +20,22 @@ mixin _$DaySalesEvent {
TResult when<TResult extends Object?>({
required TResult Function() started,
required TResult Function(DateTime date) getDaySales,
required TResult Function(DateTime startDate, DateTime endDate)
getRangeDateSales,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started,
TResult? Function(DateTime date)? getDaySales,
TResult? Function(DateTime startDate, DateTime endDate)? getRangeDateSales,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? started,
TResult Function(DateTime date)? getDaySales,
TResult Function(DateTime startDate, DateTime endDate)? getRangeDateSales,
required TResult orElse(),
}) =>
throw _privateConstructorUsedError;
@ -39,18 +43,21 @@ mixin _$DaySalesEvent {
TResult map<TResult extends Object?>({
required TResult Function(_Started value) started,
required TResult Function(_GetDaySales value) getDaySales,
required TResult Function(_GetRangeDateSales value) getRangeDateSales,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_Started value)? started,
TResult? Function(_GetDaySales value)? getDaySales,
TResult? Function(_GetRangeDateSales value)? getRangeDateSales,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_Started value)? started,
TResult Function(_GetDaySales value)? getDaySales,
TResult Function(_GetRangeDateSales value)? getRangeDateSales,
required TResult orElse(),
}) =>
throw _privateConstructorUsedError;
@ -120,6 +127,8 @@ class _$StartedImpl implements _Started {
TResult when<TResult extends Object?>({
required TResult Function() started,
required TResult Function(DateTime date) getDaySales,
required TResult Function(DateTime startDate, DateTime endDate)
getRangeDateSales,
}) {
return started();
}
@ -129,6 +138,7 @@ class _$StartedImpl implements _Started {
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started,
TResult? Function(DateTime date)? getDaySales,
TResult? Function(DateTime startDate, DateTime endDate)? getRangeDateSales,
}) {
return started?.call();
}
@ -138,6 +148,7 @@ class _$StartedImpl implements _Started {
TResult maybeWhen<TResult extends Object?>({
TResult Function()? started,
TResult Function(DateTime date)? getDaySales,
TResult Function(DateTime startDate, DateTime endDate)? getRangeDateSales,
required TResult orElse(),
}) {
if (started != null) {
@ -151,6 +162,7 @@ class _$StartedImpl implements _Started {
TResult map<TResult extends Object?>({
required TResult Function(_Started value) started,
required TResult Function(_GetDaySales value) getDaySales,
required TResult Function(_GetRangeDateSales value) getRangeDateSales,
}) {
return started(this);
}
@ -160,6 +172,7 @@ class _$StartedImpl implements _Started {
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_Started value)? started,
TResult? Function(_GetDaySales value)? getDaySales,
TResult? Function(_GetRangeDateSales value)? getRangeDateSales,
}) {
return started?.call(this);
}
@ -169,6 +182,7 @@ class _$StartedImpl implements _Started {
TResult maybeMap<TResult extends Object?>({
TResult Function(_Started value)? started,
TResult Function(_GetDaySales value)? getDaySales,
TResult Function(_GetRangeDateSales value)? getRangeDateSales,
required TResult orElse(),
}) {
if (started != null) {
@ -252,6 +266,8 @@ class _$GetDaySalesImpl implements _GetDaySales {
TResult when<TResult extends Object?>({
required TResult Function() started,
required TResult Function(DateTime date) getDaySales,
required TResult Function(DateTime startDate, DateTime endDate)
getRangeDateSales,
}) {
return getDaySales(date);
}
@ -261,6 +277,7 @@ class _$GetDaySalesImpl implements _GetDaySales {
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started,
TResult? Function(DateTime date)? getDaySales,
TResult? Function(DateTime startDate, DateTime endDate)? getRangeDateSales,
}) {
return getDaySales?.call(date);
}
@ -270,6 +287,7 @@ class _$GetDaySalesImpl implements _GetDaySales {
TResult maybeWhen<TResult extends Object?>({
TResult Function()? started,
TResult Function(DateTime date)? getDaySales,
TResult Function(DateTime startDate, DateTime endDate)? getRangeDateSales,
required TResult orElse(),
}) {
if (getDaySales != null) {
@ -283,6 +301,7 @@ class _$GetDaySalesImpl implements _GetDaySales {
TResult map<TResult extends Object?>({
required TResult Function(_Started value) started,
required TResult Function(_GetDaySales value) getDaySales,
required TResult Function(_GetRangeDateSales value) getRangeDateSales,
}) {
return getDaySales(this);
}
@ -292,6 +311,7 @@ class _$GetDaySalesImpl implements _GetDaySales {
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_Started value)? started,
TResult? Function(_GetDaySales value)? getDaySales,
TResult? Function(_GetRangeDateSales value)? getRangeDateSales,
}) {
return getDaySales?.call(this);
}
@ -301,6 +321,7 @@ class _$GetDaySalesImpl implements _GetDaySales {
TResult maybeMap<TResult extends Object?>({
TResult Function(_Started value)? started,
TResult Function(_GetDaySales value)? getDaySales,
TResult Function(_GetRangeDateSales value)? getRangeDateSales,
required TResult orElse(),
}) {
if (getDaySales != null) {
@ -322,6 +343,166 @@ abstract class _GetDaySales implements DaySalesEvent {
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class _$$GetRangeDateSalesImplCopyWith<$Res> {
factory _$$GetRangeDateSalesImplCopyWith(_$GetRangeDateSalesImpl value,
$Res Function(_$GetRangeDateSalesImpl) then) =
__$$GetRangeDateSalesImplCopyWithImpl<$Res>;
@useResult
$Res call({DateTime startDate, DateTime endDate});
}
/// @nodoc
class __$$GetRangeDateSalesImplCopyWithImpl<$Res>
extends _$DaySalesEventCopyWithImpl<$Res, _$GetRangeDateSalesImpl>
implements _$$GetRangeDateSalesImplCopyWith<$Res> {
__$$GetRangeDateSalesImplCopyWithImpl(_$GetRangeDateSalesImpl _value,
$Res Function(_$GetRangeDateSalesImpl) _then)
: super(_value, _then);
/// Create a copy of DaySalesEvent
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? startDate = null,
Object? endDate = null,
}) {
return _then(_$GetRangeDateSalesImpl(
null == startDate
? _value.startDate
: startDate // ignore: cast_nullable_to_non_nullable
as DateTime,
null == endDate
? _value.endDate
: endDate // ignore: cast_nullable_to_non_nullable
as DateTime,
));
}
}
/// @nodoc
class _$GetRangeDateSalesImpl implements _GetRangeDateSales {
const _$GetRangeDateSalesImpl(this.startDate, this.endDate);
@override
final DateTime startDate;
@override
final DateTime endDate;
@override
String toString() {
return 'DaySalesEvent.getRangeDateSales(startDate: $startDate, endDate: $endDate)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$GetRangeDateSalesImpl &&
(identical(other.startDate, startDate) ||
other.startDate == startDate) &&
(identical(other.endDate, endDate) || other.endDate == endDate));
}
@override
int get hashCode => Object.hash(runtimeType, startDate, endDate);
/// Create a copy of DaySalesEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$GetRangeDateSalesImplCopyWith<_$GetRangeDateSalesImpl> get copyWith =>
__$$GetRangeDateSalesImplCopyWithImpl<_$GetRangeDateSalesImpl>(
this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() started,
required TResult Function(DateTime date) getDaySales,
required TResult Function(DateTime startDate, DateTime endDate)
getRangeDateSales,
}) {
return getRangeDateSales(startDate, endDate);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started,
TResult? Function(DateTime date)? getDaySales,
TResult? Function(DateTime startDate, DateTime endDate)? getRangeDateSales,
}) {
return getRangeDateSales?.call(startDate, endDate);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? started,
TResult Function(DateTime date)? getDaySales,
TResult Function(DateTime startDate, DateTime endDate)? getRangeDateSales,
required TResult orElse(),
}) {
if (getRangeDateSales != null) {
return getRangeDateSales(startDate, endDate);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_Started value) started,
required TResult Function(_GetDaySales value) getDaySales,
required TResult Function(_GetRangeDateSales value) getRangeDateSales,
}) {
return getRangeDateSales(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_Started value)? started,
TResult? Function(_GetDaySales value)? getDaySales,
TResult? Function(_GetRangeDateSales value)? getRangeDateSales,
}) {
return getRangeDateSales?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_Started value)? started,
TResult Function(_GetDaySales value)? getDaySales,
TResult Function(_GetRangeDateSales value)? getRangeDateSales,
required TResult orElse(),
}) {
if (getRangeDateSales != null) {
return getRangeDateSales(this);
}
return orElse();
}
}
abstract class _GetRangeDateSales implements DaySalesEvent {
const factory _GetRangeDateSales(
final DateTime startDate, final DateTime endDate) =
_$GetRangeDateSalesImpl;
DateTime get startDate;
DateTime get endDate;
/// Create a copy of DaySalesEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
_$$GetRangeDateSalesImplCopyWith<_$GetRangeDateSalesImpl> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
mixin _$DaySalesState {
@optionalTypeArgs

View File

@ -6,4 +6,8 @@ class DaySalesEvent with _$DaySalesEvent {
const factory DaySalesEvent.getDaySales(
DateTime date,
) = _GetDaySales;
const factory DaySalesEvent.getRangeDateSales(
DateTime startDate,
DateTime endDate,
) = _GetRangeDateSales;
}

View File

@ -0,0 +1,123 @@
import 'package:enaklo_pos/core/components/buttons.dart';
import 'package:enaklo_pos/core/components/custom_modal_dialog.dart';
import 'package:enaklo_pos/core/components/spaces.dart';
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
import 'package:flutter/material.dart';
class SalesFilterDialog extends StatefulWidget {
final DateTime startDate;
final DateTime endDate;
final void Function(DateTime start, DateTime end) onDateRangeChanged;
const SalesFilterDialog(
{super.key,
required this.startDate,
required this.endDate,
required this.onDateRangeChanged});
@override
State<SalesFilterDialog> createState() => _SalesFilterDialogState();
}
class _SalesFilterDialogState extends State<SalesFilterDialog> {
late DateTimeRange selectedDateRange;
@override
void initState() {
selectedDateRange =
DateTimeRange(start: widget.startDate, end: widget.endDate);
super.initState();
}
Future<void> _selectDateRange(BuildContext context) async {
final DateTimeRange? picked = await showDateRangePicker(
context: context,
initialDateRange: selectedDateRange,
firstDate: DateTime(2020),
lastDate: DateTime(2100),
builder: (context, child) {
return Theme(
data: Theme.of(context).copyWith(
colorScheme: ColorScheme.light(
primary: Colors.blue, // Header color
onPrimary: Colors.white, // Header text color
onSurface: Colors.black, // Body text color
),
),
child: child!,
);
},
);
if (picked != null) {
setState(() {
selectedDateRange = picked;
});
}
}
@override
Widget build(BuildContext context) {
return CustomModalDialog(
title: 'Filter',
contentPadding: const EdgeInsets.all(16.0),
child: Column(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Periode',
style: TextStyle(
color: AppColors.black,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
GestureDetector(
onTap: () async => await _selectDateRange(context),
child: Container(
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
margin: EdgeInsets.only(top: 8),
decoration: BoxDecoration(
border: Border.all(
color: AppColors.primary,
),
borderRadius: BorderRadius.circular(8),
),
child: Row(
children: [
Expanded(
child: Text(
'${selectedDateRange.start.toFormattedDate2()} - ${selectedDateRange.end.toFormattedDate2()}',
style: TextStyle(
color: AppColors.black,
fontSize: 14,
fontWeight: FontWeight.w600,
),
),
),
Icon(
Icons.calendar_month_outlined,
color: AppColors.primary,
),
],
),
),
),
SpaceHeight(24),
Button.filled(
onPressed: () {
context.pop();
widget.onDateRangeChanged(
selectedDateRange.start, selectedDateRange.end);
},
label: 'Terapkan'),
],
),
],
),
);
}
}

View File

@ -1,12 +1,18 @@
import 'dart:developer';
import 'package:enaklo_pos/core/components/buttons.dart';
import 'package:enaklo_pos/core/components/spaces.dart';
import 'package:enaklo_pos/presentation/home/models/order_model.dart';
import 'package:enaklo_pos/presentation/sales/blocs/day_sales/day_sales_bloc.dart';
import 'package:enaklo_pos/presentation/sales/widgets/sales_detail.dart';
import 'package:enaklo_pos/presentation/sales/widgets/sales_list_order.dart';
import 'package:enaklo_pos/presentation/sales/widgets/sales_order_information.dart';
import 'package:enaklo_pos/presentation/sales/widgets/sales_payment.dart';
import 'package:enaklo_pos/presentation/sales/widgets/sales_right_title.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
import 'package:enaklo_pos/presentation/sales/blocs/day_sales/day_sales_bloc.dart';
import '../widgets/sales_widget.dart';
import '../../../core/constants/colors.dart';
import '../widgets/sales_card.dart';
import '../widgets/sales_title.dart';
class SalesPage extends StatefulWidget {
const SalesPage({super.key});
@ -16,110 +22,178 @@ class SalesPage extends StatefulWidget {
}
class _SalesPageState extends State<SalesPage> {
DateTime startDate = DateTime.now();
DateTime endDate = DateTime.now();
OrderModel? orderDetail;
int _total = 0;
String searchQuery = '';
@override
void initState() {
context.read<DaySalesBloc>().add(DaySalesEvent.getDaySales(DateTime.now()));
context
.read<DaySalesBloc>()
.add(DaySalesEvent.getRangeDateSales(startDate, endDate));
super.initState();
}
List<OrderModel> _filterOrders(List<OrderModel> orders) {
if (searchQuery.isEmpty) {
return orders;
}
return orders.where((order) {
final customerName = order.customerName.toLowerCase();
final queryLower = searchQuery.toLowerCase();
return customerName.contains(queryLower);
}).toList();
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(32),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
'Apskel POS ',
style: TextStyle(
color: AppColors.primary,
fontSize: 22,
fontWeight: FontWeight.w600,
return SafeArea(
child: Scaffold(
backgroundColor: AppColors.background,
body: Row(
children: [
Expanded(
flex: 2,
child: Material(
color: AppColors.white,
child: Column(
children: [
SalesTitle(
startDate: startDate,
endDate: endDate,
total: _total,
onChanged: (value) {
setState(() {
searchQuery = value;
});
},
onDateRangeChanged: (start, end) {
setState(() {
startDate = start;
endDate = end;
});
context.read<DaySalesBloc>().add(
DaySalesEvent.getRangeDateSales(
startDate, endDate));
},
),
Expanded(
child: BlocBuilder<DaySalesBloc, DaySalesState>(
builder: (context, state) {
return state.maybeWhen(
orElse: () => const Center(
child: CircularProgressIndicator(),
),
loaded: (orders) {
final filtered = _filterOrders(orders);
if (filtered.isEmpty) {
return Center(
child: Text(
"Belum ada transaksi saat ini. ",
style: TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.bold,
),
),
);
} else {
WidgetsBinding.instance
.addPostFrameCallback((_) {
setState(() {
_total = filtered.length;
});
});
return SingleChildScrollView(
child: Column(
children: List.generate(
filtered.length,
(index) => GestureDetector(
onTap: () {
setState(() {
orderDetail = filtered[index];
});
},
child: SalesCard(
order: orders[index],
isActive:
orders[index] == orderDetail,
),
),
),
),
);
}
},
);
},
),
),
],
),
),
Text(
"${DateTime.now().toFormattedDate()}",
style: const TextStyle(
color: AppColors.subtitle,
fontSize: 16,
),
),
],
),
const SizedBox(
height: 12.0,
),
Expanded(
child: BlocBuilder<DaySalesBloc, DaySalesState>(
builder: (context, state) {
return state.maybeWhen(
orElse: () => const Center(
child: CircularProgressIndicator(),
),
loaded: (orders) {
log("message: ${orders.length}");
if (orders.isEmpty) {
return Center(
child: Text(
"Belum ada transaksi saat ini. ",
style: TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.bold,
),
),
);
} else {
return SalesWidget(
headerWidgets: _getTitleHeaderWidget(),
orders: orders,
);
}
},
);
},
),
),
],
),
);
}
List<Widget> _getTitleHeaderWidget() {
return [
_getTitleItemWidget('ID', 40),
_getTitleItemWidget('Customer', 120),
_getTitleItemWidget('Status', 120),
_getTitleItemWidget('Sync', 60),
_getTitleItemWidget('Payment Status', 120),
_getTitleItemWidget('Payment Method', 120),
_getTitleItemWidget('Payment Amount', 120),
_getTitleItemWidget('Sub Total', 120),
_getTitleItemWidget('Tax', 120),
_getTitleItemWidget('Discount', 60),
_getTitleItemWidget('Service Charge', 120),
_getTitleItemWidget('Total', 120),
_getTitleItemWidget('Payment', 60),
_getTitleItemWidget('Item', 60),
_getTitleItemWidget('Cashier', 150),
_getTitleItemWidget('Time', 230),
_getTitleItemWidget('Action', 230),
];
}
Widget _getTitleItemWidget(String label, double width) {
return Container(
width: width,
height: 56,
color: AppColors.primary,
alignment: Alignment.centerLeft,
child: Center(
child: Text(
label,
style: const TextStyle(
color: Colors.white,
),
Expanded(
flex: 4,
child: orderDetail == null
? Center(
child: Text(
"Belum ada order yang dipilih.",
style: TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.bold,
),
),
)
: Column(
children: [
SalesRightTitle(
order: orderDetail,
actionWidget: [
Button.outlined(
onPressed: () {},
label: 'Refund',
icon: Icon(Icons.autorenew),
),
],
),
Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
Row(
children: [
Expanded(
child: SalesOrderInformation(
order: orderDetail,
),
),
SpaceWidth(16),
Expanded(
child: SalesDetail(
order: orderDetail,
),
),
],
),
SalesListOrder(
order: orderDetail,
),
SalesPayment(
order: orderDetail,
),
],
),
)
],
),
),
],
),
),
);

View File

@ -0,0 +1,127 @@
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
import 'package:enaklo_pos/presentation/sales/blocs/day_sales/day_sales_bloc.dart';
import '../widgets/sales_widget.dart';
class SalesPage extends StatefulWidget {
const SalesPage({super.key});
@override
State<SalesPage> createState() => _SalesPageState();
}
class _SalesPageState extends State<SalesPage> {
@override
void initState() {
context.read<DaySalesBloc>().add(DaySalesEvent.getDaySales(DateTime.now()));
super.initState();
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(32),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
'Apskel POS ',
style: TextStyle(
color: AppColors.primary,
fontSize: 22,
fontWeight: FontWeight.w600,
),
),
Text(
"${DateTime.now().toFormattedDate()}",
style: const TextStyle(
color: AppColors.subtitle,
fontSize: 16,
),
),
],
),
const SizedBox(
height: 12.0,
),
Expanded(
child: BlocBuilder<DaySalesBloc, DaySalesState>(
builder: (context, state) {
return state.maybeWhen(
orElse: () => const Center(
child: CircularProgressIndicator(),
),
loaded: (orders) {
log("message: ${orders.length}");
if (orders.isEmpty) {
return Center(
child: Text(
"Belum ada transaksi saat ini. ",
style: TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.bold,
),
),
);
} else {
return SalesWidget(
headerWidgets: _getTitleHeaderWidget(),
orders: orders,
);
}
},
);
},
),
),
],
),
);
}
List<Widget> _getTitleHeaderWidget() {
return [
_getTitleItemWidget('ID', 40),
_getTitleItemWidget('Customer', 120),
_getTitleItemWidget('Status', 120),
_getTitleItemWidget('Sync', 60),
_getTitleItemWidget('Payment Status', 120),
_getTitleItemWidget('Payment Method', 120),
_getTitleItemWidget('Payment Amount', 120),
_getTitleItemWidget('Sub Total', 120),
_getTitleItemWidget('Tax', 120),
_getTitleItemWidget('Discount', 60),
_getTitleItemWidget('Service Charge', 120),
_getTitleItemWidget('Total', 120),
_getTitleItemWidget('Payment', 60),
_getTitleItemWidget('Item', 60),
_getTitleItemWidget('Cashier', 150),
_getTitleItemWidget('Time', 230),
_getTitleItemWidget('Action', 230),
];
}
Widget _getTitleItemWidget(String label, double width) {
return Container(
width: width,
height: 56,
color: AppColors.primary,
alignment: Alignment.centerLeft,
child: Center(
child: Text(
label,
style: const TextStyle(
color: Colors.white,
),
),
),
);
}
}

View File

@ -0,0 +1,113 @@
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
import 'package:enaklo_pos/core/extensions/int_ext.dart';
import 'package:enaklo_pos/presentation/home/models/order_model.dart';
import 'package:flutter/material.dart';
class SalesCard extends StatelessWidget {
final OrderModel order;
final bool isActive;
const SalesCard({
super.key,
required this.order,
required this.isActive,
});
@override
Widget build(BuildContext context) {
return Container(
margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 10),
decoration: BoxDecoration(
color: isActive ? AppColors.primary.withOpacity(0.1) : AppColors.white,
border:
Border.all(color: isActive ? AppColors.primary : AppColors.stroke),
borderRadius: BorderRadius.circular(8),
),
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CircleAvatar(
radius: 22,
backgroundColor: AppColors.primary,
child: Icon(Icons.person, color: Colors.white),
),
const SizedBox(width: 12),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
order.customerName == ""
? "Anonim"
: order.customerName,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
const SizedBox(height: 4),
Row(
children: [
Icon(Icons.table_bar, size: 16, color: Colors.grey),
const SizedBox(width: 4),
Text(
'Meja ${order.tableNumber}',
style: TextStyle(color: Colors.grey[600]),
),
],
),
],
),
),
Container(
padding:
const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
decoration: BoxDecoration(
color: Colors.green.withOpacity(0.15),
borderRadius: BorderRadius.circular(16),
),
child: Text(
order.status.toUpperCase(),
style: TextStyle(
color: Colors.green,
fontWeight: FontWeight.w600,
fontSize: 12,
letterSpacing: 0.5,
),
),
),
],
),
const SizedBox(height: 16),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
order.total.currencyFormatRpV2,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: AppColors.primary,
),
),
Text(
DateTime.parse(order.transactionTime).toFormattedDate2(),
style: TextStyle(
color: AppColors.black,
),
),
],
),
],
),
),
);
}
}

View File

@ -0,0 +1,76 @@
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
import 'package:enaklo_pos/presentation/home/models/order_model.dart';
import 'package:flutter/material.dart';
class SalesDetail extends StatelessWidget {
final OrderModel? order;
const SalesDetail({super.key, this.order});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: AppColors.white,
borderRadius: BorderRadius.circular(8),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Detail',
style: TextStyle(
color: AppColors.black,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
_item(
title: 'Pelanggan',
value: order?.customerName ?? "-",
),
_item(
title: 'Waktu',
value:
DateTime.parse(order?.transactionTime ?? "").toFormattedDate3(),
),
_item(
title: 'Status',
value: order?.paymentStatus ?? "-",
),
_item(
title: 'Jenis Order',
value: order?.paymentMethod ?? "-",
),
],
),
);
}
Padding _item({
required String title,
required String value,
}) {
return Padding(
padding: const EdgeInsets.only(top: 12),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
title,
style: const TextStyle(
fontSize: 14,
),
),
Text(
value,
style: const TextStyle(
fontSize: 14,
),
),
],
),
);
}
}

View File

@ -0,0 +1,88 @@
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/presentation/home/models/order_model.dart';
import 'package:enaklo_pos/presentation/home/models/product_quantity.dart';
import 'package:flutter/material.dart';
class SalesListOrder extends StatelessWidget {
final OrderModel? order;
const SalesListOrder({super.key, this.order});
@override
Widget build(BuildContext context) {
return Container(
margin: const EdgeInsets.only(top: 16),
decoration: BoxDecoration(
color: AppColors.white,
borderRadius: BorderRadius.circular(8),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: const EdgeInsets.all(16),
width: double.infinity,
decoration: const BoxDecoration(
border: Border(
bottom: BorderSide(color: AppColors.background),
),
),
child: Text(
'Daftar Pembelian',
style: TextStyle(
color: AppColors.black,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
),
Column(
children: List.generate(
order?.orderItems.length ?? 0,
(index) => _item(order!.orderItems[index]),
).toList(),
),
],
),
);
}
Padding _item(ProductQuantity product) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16)
.copyWith(bottom: 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
children: [
Text(
product.product.name ?? '',
style: const TextStyle(
fontSize: 14,
),
),
Text(
product.product.price ?? '',
style: const TextStyle(
fontSize: 14,
),
),
],
),
Text(
'X${product.quantity}',
style: const TextStyle(
fontSize: 14,
),
),
Text(
product.product.price ?? '',
style: const TextStyle(
fontSize: 14,
),
),
],
),
);
}
}

View File

@ -0,0 +1,76 @@
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
import 'package:enaklo_pos/presentation/home/models/order_model.dart';
import 'package:flutter/material.dart';
class SalesOrderInformation extends StatelessWidget {
final OrderModel? order;
const SalesOrderInformation({super.key, this.order});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: AppColors.white,
borderRadius: BorderRadius.circular(8),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Informasi Pesanan',
style: TextStyle(
color: AppColors.black,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
_item(
title: 'No. Order',
value: "${order?.id}",
),
_item(
title: 'Tanggal',
value:
DateTime.parse(order?.transactionTime ?? "").toFormattedDate3(),
),
_item(
title: 'Kasir',
value: order?.namaKasir ?? "-",
),
_item(
title: 'Jenis Order',
value: order?.orderType.value ?? "-",
),
],
),
);
}
Padding _item({
required String title,
required String value,
}) {
return Padding(
padding: const EdgeInsets.only(top: 12),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
title,
style: const TextStyle(
fontSize: 14,
),
),
Text(
value,
style: const TextStyle(
fontSize: 14,
),
),
],
),
);
}
}

View File

@ -0,0 +1,99 @@
import 'package:enaklo_pos/core/components/dashed_divider.dart';
import 'package:enaklo_pos/core/components/spaces.dart';
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/int_ext.dart';
import 'package:enaklo_pos/presentation/home/models/order_model.dart';
import 'package:flutter/material.dart';
class SalesPayment extends StatelessWidget {
final OrderModel? order;
const SalesPayment({super.key, this.order});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(16),
margin: const EdgeInsets.only(top: 16),
decoration: BoxDecoration(
color: AppColors.white,
borderRadius: BorderRadius.circular(8),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Informasi Pesanan',
style: TextStyle(
color: AppColors.black,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
SpaceHeight(12),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Subtotal ${order?.totalItem} Produk',
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
Text(
(order?.subTotal)?.currencyFormatRp ?? "0",
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
],
),
SpaceHeight(12),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Pajak (11%)',
style: const TextStyle(
fontSize: 16,
),
),
Text(
(order?.tax)?.currencyFormatRp ?? "0",
style: const TextStyle(
fontSize: 16,
),
),
],
),
SpaceHeight(12),
DashedDivider(
color: AppColors.stroke,
),
SpaceHeight(12),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Total',
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w700,
),
),
Text(
(order?.total)?.currencyFormatRp ?? "0",
style: const TextStyle(
color: AppColors.primary,
fontSize: 18,
fontWeight: FontWeight.w700,
),
),
],
),
],
),
);
}
}

View File

@ -0,0 +1,43 @@
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
import 'package:enaklo_pos/presentation/home/models/order_model.dart';
import 'package:flutter/material.dart';
class SalesRightTitle extends StatelessWidget {
final OrderModel? order;
final List<Widget>? actionWidget;
const SalesRightTitle({super.key, this.order, this.actionWidget});
@override
Widget build(BuildContext context) {
return Container(
height: context.deviceHeight * 0.1,
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0),
decoration: BoxDecoration(
color: AppColors.white,
border: Border(
bottom: BorderSide(
color: AppColors.background,
width: 1.0,
),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Text(
"Detail Pesanan #${order?.id}",
style: TextStyle(
color: AppColors.black,
fontSize: 20,
fontWeight: FontWeight.w600,
),
),
),
if (actionWidget != null) ...actionWidget!,
],
),
);
}
}

View File

@ -0,0 +1,146 @@
import 'package:enaklo_pos/core/components/components.dart';
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
import 'package:enaklo_pos/presentation/sales/dialog/filter_dialog.dart';
import 'package:flutter/material.dart';
class SalesTitle extends StatelessWidget {
final DateTime startDate;
final DateTime endDate;
final int total;
final Function(String) onChanged;
final void Function(DateTime start, DateTime end) onDateRangeChanged;
const SalesTitle(
{super.key,
required this.startDate,
required this.endDate,
required this.onChanged,
required this.total,
required this.onDateRangeChanged});
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
height: context.deviceHeight * 0.1,
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0),
decoration: BoxDecoration(
color: AppColors.white,
border: Border(
bottom: BorderSide(
color: AppColors.background,
width: 1.0,
),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
GestureDetector(
onTap: () => context.pop(),
child: Icon(
Icons.arrow_back,
color: AppColors.primary,
size: 24,
),
),
SpaceWidth(16),
Expanded(
child: Text(
"Daftar Pesanan",
style: TextStyle(
color: AppColors.black,
fontSize: 20,
fontWeight: FontWeight.w600,
),
),
),
],
),
),
Container(
padding: const EdgeInsets.symmetric(
horizontal: 16.0,
vertical: 12.0,
),
decoration: BoxDecoration(
color: AppColors.white,
border: Border(
bottom: BorderSide(
color: AppColors.background,
width: 1.0,
),
),
),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
startDate.toFormattedDate2() == endDate.toFormattedDate2()
? startDate.toFormattedDate2()
: '${startDate.toFormattedDate2()} - ${endDate.toFormattedDate2()}',
style: TextStyle(
color: AppColors.black,
fontWeight: FontWeight.w600,
),
),
Text(
'$total Pesanan',
style: TextStyle(
color: AppColors.black,
fontWeight: FontWeight.w600,
),
),
],
),
SpaceHeight(16),
Row(
children: [
Expanded(
child: TextFormField(
onChanged: onChanged,
decoration: InputDecoration(
prefixIcon: Icon(
Icons.search,
),
hintText: 'Cari Pesanan',
),
),
),
SpaceWidth(12),
GestureDetector(
onTap: () => showDialog(
context: context,
builder: (context) => SalesFilterDialog(
startDate: startDate,
endDate: endDate,
onDateRangeChanged: onDateRangeChanged,
),
),
child: Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: AppColors.primary,
borderRadius: BorderRadius.circular(12),
),
child: Icon(
Icons.filter_list_outlined,
color: AppColors.white,
size: 24,
),
),
),
],
),
],
),
),
],
);
}
}