diff --git a/analysis_options.yaml b/analysis_options.yaml index 1d331a6..bfb32a6 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -4,6 +4,9 @@ linter: rules: sort_pub_dependencies: false prefer_relative_imports: true + prefer_const_constructors: true + prefer_const_literals_to_create_immutables: true + prefer_const_declarations: true analyzer: errors: diff --git a/lib/application/auth/auth_bloc.dart b/lib/application/auth/auth_bloc.dart index f3e7ae8..ce6fe50 100644 --- a/lib/application/auth/auth_bloc.dart +++ b/lib/application/auth/auth_bloc.dart @@ -33,16 +33,16 @@ class AuthBloc extends Bloc { state.copyWith( failureOption: optionOf(f), status: token - ? AuthStatus.authenticated() - : AuthStatus.unauthenticated(), + ? const AuthStatus.authenticated() + : const AuthStatus.unauthenticated(), ), ), (user) => emit( state.copyWith( user: user, status: token - ? AuthStatus.authenticated() - : AuthStatus.unauthenticated(), + ? const AuthStatus.authenticated() + : const AuthStatus.unauthenticated(), ), ), ); diff --git a/lib/application/category/category_loader/category_loader_bloc.dart b/lib/application/category/category_loader/category_loader_bloc.dart index 4f92936..a80564c 100644 --- a/lib/application/category/category_loader/category_loader_bloc.dart +++ b/lib/application/category/category_loader/category_loader_bloc.dart @@ -175,7 +175,7 @@ class CategoryLoaderBloc _searchDebounce?.cancel(); // Debounce search for better UX - _searchDebounce = Timer(Duration(milliseconds: 300), () async { + _searchDebounce = Timer(const Duration(milliseconds: 300), () async { emit(state.copyWith(isLoadingMore: true)); _isLoadingMore = false; @@ -237,7 +237,7 @@ class CategoryLoaderBloc ); // After sync error, try to load local data - Timer(Duration(seconds: 2), () { + Timer(const Duration(seconds: 2), () { add(const CategoryLoaderEvent.getCategories()); }); }, @@ -251,7 +251,7 @@ class CategoryLoaderBloc ); // After successful sync, load the updated data - Timer(Duration(seconds: 1), () { + Timer(const Duration(seconds: 1), () { add(const CategoryLoaderEvent.getCategories()); }); }, diff --git a/lib/application/product/product_loader/product_loader_bloc.dart b/lib/application/product/product_loader/product_loader_bloc.dart index b46eb92..b71b095 100644 --- a/lib/application/product/product_loader/product_loader_bloc.dart +++ b/lib/application/product/product_loader/product_loader_bloc.dart @@ -43,7 +43,7 @@ class ProductLoaderBloc extends Bloc { state.copyWith( isLoadingMore: false, failureOptionProduct: optionOf( - ProductFailure.dynamicErrorMessage( + const ProductFailure.dynamicErrorMessage( 'Database lokal belum siap. Silakan lakukan sinkronisasi data terlebih dahulu.', ), ), diff --git a/lib/common/theme/app_style.dart b/lib/common/theme/app_style.dart index 45c1016..b62c301 100644 --- a/lib/common/theme/app_style.dart +++ b/lib/common/theme/app_style.dart @@ -1,27 +1,27 @@ part of 'theme.dart'; class AppStyle { - static TextStyle xs = TextStyle(color: AppColor.black, fontSize: 11); + static TextStyle xs = const TextStyle(color: AppColor.black, fontSize: 11); - static TextStyle sm = TextStyle(color: AppColor.black, fontSize: 12); + static TextStyle sm = const TextStyle(color: AppColor.black, fontSize: 12); - static TextStyle md = TextStyle(color: AppColor.black, fontSize: 14); + static TextStyle md = const TextStyle(color: AppColor.black, fontSize: 14); - static TextStyle lg = TextStyle(color: AppColor.black, fontSize: 16); + static TextStyle lg = const TextStyle(color: AppColor.black, fontSize: 16); - static TextStyle xl = TextStyle(color: AppColor.black, fontSize: 18); + static TextStyle xl = const TextStyle(color: AppColor.black, fontSize: 18); - static TextStyle xxl = TextStyle(color: AppColor.black, fontSize: 20); + static TextStyle xxl = const TextStyle(color: AppColor.black, fontSize: 20); - static TextStyle h6 = TextStyle(color: AppColor.black, fontSize: 22); + static TextStyle h6 = const TextStyle(color: AppColor.black, fontSize: 22); - static TextStyle h5 = TextStyle(color: AppColor.black, fontSize: 24); + static TextStyle h5 = const TextStyle(color: AppColor.black, fontSize: 24); - static TextStyle h4 = TextStyle(color: AppColor.black, fontSize: 26); + static TextStyle h4 = const TextStyle(color: AppColor.black, fontSize: 26); - static TextStyle h3 = TextStyle(color: AppColor.black, fontSize: 28); + static TextStyle h3 = const TextStyle(color: AppColor.black, fontSize: 28); - static TextStyle h2 = TextStyle(color: AppColor.black, fontSize: 30); + static TextStyle h2 = const TextStyle(color: AppColor.black, fontSize: 30); - static TextStyle h1 = TextStyle(color: AppColor.black, fontSize: 32); + static TextStyle h1 = const TextStyle(color: AppColor.black, fontSize: 32); } diff --git a/lib/common/theme/app_value.dart b/lib/common/theme/app_value.dart index d76dbcc..8a1c7a3 100644 --- a/lib/common/theme/app_value.dart +++ b/lib/common/theme/app_value.dart @@ -1,5 +1,3 @@ part of 'theme.dart'; -class AppValue { - // TODO: define value -} +class AppValue {} diff --git a/lib/common/theme/theme.dart b/lib/common/theme/theme.dart index b621835..9ba9eb2 100644 --- a/lib/common/theme/theme.dart +++ b/lib/common/theme/theme.dart @@ -11,7 +11,7 @@ class ThemeApp { useMaterial3: true, primaryColor: AppColor.primary, scaffoldBackgroundColor: AppColor.white, - appBarTheme: AppBarTheme( + appBarTheme: const AppBarTheme( color: AppColor.white, elevation: 0, titleTextStyle: TextStyle( @@ -19,7 +19,7 @@ class ThemeApp { fontSize: 16.0, fontWeight: FontWeight.w500, ), - iconTheme: const IconThemeData(color: AppColor.primary), + iconTheme: IconThemeData(color: AppColor.primary), ), fontFamily: FontFamily.quicksand, colorScheme: ColorScheme.fromSeed(seedColor: AppColor.primary), @@ -28,19 +28,19 @@ class ThemeApp { hintStyle: const TextStyle(color: AppColor.textSecondary), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8.0), - borderSide: BorderSide(color: AppColor.borderDark), + borderSide: const BorderSide(color: AppColor.borderDark), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8.0), - borderSide: BorderSide(color: AppColor.primary), + borderSide: const BorderSide(color: AppColor.primary), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8.0), - borderSide: BorderSide(color: AppColor.borderDark), + borderSide: const BorderSide(color: AppColor.borderDark), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8.0), - borderSide: BorderSide(color: AppColor.error), + borderSide: const BorderSide(color: AppColor.error), ), ), ); diff --git a/lib/domain/analytic/entities/product_analytic_entity.dart b/lib/domain/analytic/entities/product_analytic_entity.dart index 107bb6c..e08659b 100644 --- a/lib/domain/analytic/entities/product_analytic_entity.dart +++ b/lib/domain/analytic/entities/product_analytic_entity.dart @@ -89,6 +89,7 @@ class ProductAnalyticCategoryItem with _$ProductAnalyticCategoryItem { required int totalRevenue, }) = _ProductAnalyticCategoryItem; + // ignore: prefer_const_constructors factory ProductAnalyticCategoryItem.empty() => ProductAnalyticCategoryItem( categoryName: '', productCount: 0, diff --git a/lib/domain/customer/entities/customer_entity.dart b/lib/domain/customer/entities/customer_entity.dart index 45f9ecd..b204477 100644 --- a/lib/domain/customer/entities/customer_entity.dart +++ b/lib/domain/customer/entities/customer_entity.dart @@ -10,8 +10,8 @@ class ListCustomer with _$ListCustomer { required int totalPages, }) = _ListCustomer; - factory ListCustomer.empty() => ListCustomer( - customers: const [], + factory ListCustomer.empty() => const ListCustomer( + customers: [], totalCount: 0, page: 0, limit: 0, diff --git a/lib/domain/order/entities/add_item_order_request_entity.dart b/lib/domain/order/entities/add_item_order_request_entity.dart index 4dd4635..8c2634b 100644 --- a/lib/domain/order/entities/add_item_order_request_entity.dart +++ b/lib/domain/order/entities/add_item_order_request_entity.dart @@ -10,7 +10,7 @@ class AddItemOrderRequest with _$AddItemOrderRequest { required String notes, }) = _AddItemOrderRequest; - factory AddItemOrderRequest.empty() => AddItemOrderRequest( + factory AddItemOrderRequest.empty() => const AddItemOrderRequest( productId: '', productVariantId: '', quantity: 0, diff --git a/lib/domain/order/entities/order_entity.dart b/lib/domain/order/entities/order_entity.dart index 929100c..1f242e6 100644 --- a/lib/domain/order/entities/order_entity.dart +++ b/lib/domain/order/entities/order_entity.dart @@ -10,8 +10,13 @@ class ListOrder with _$ListOrder { required int totalPages, }) = _ListOrder; - factory ListOrder.empty() => - ListOrder(orders: [], totalCount: 0, page: 0, limit: 0, totalPages: 0); + factory ListOrder.empty() => const ListOrder( + orders: [], + totalCount: 0, + page: 0, + limit: 0, + totalPages: 0, + ); } @freezed diff --git a/lib/domain/payment_method/entities/payment_method_entity.dart b/lib/domain/payment_method/entities/payment_method_entity.dart index 073378f..820e96d 100644 --- a/lib/domain/payment_method/entities/payment_method_entity.dart +++ b/lib/domain/payment_method/entities/payment_method_entity.dart @@ -10,7 +10,7 @@ class ListPaymentMethod with _$ListPaymentMethod { required int totalPages, }) = _ListPaymentMethod; - factory ListPaymentMethod.empty() => ListPaymentMethod( + factory ListPaymentMethod.empty() => const ListPaymentMethod( paymentMethods: [], totalCount: 0, page: 0, diff --git a/lib/domain/table/entities/table_entity.dart b/lib/domain/table/entities/table_entity.dart index c51dd8a..40162cf 100644 --- a/lib/domain/table/entities/table_entity.dart +++ b/lib/domain/table/entities/table_entity.dart @@ -10,8 +10,13 @@ class ListTable with _$ListTable { required int totalPages, }) = _ListTable; - factory ListTable.empty() => - ListTable(tables: [], totalCount: 0, page: 0, limit: 0, totalPages: 0); + factory ListTable.empty() => const ListTable( + tables: [], + totalCount: 0, + page: 0, + limit: 0, + totalPages: 0, + ); } @freezed diff --git a/lib/infrastructure/analytic/datasources/remote_data_provider.dart b/lib/infrastructure/analytic/datasources/remote_data_provider.dart index b9442f7..d3c9bb1 100644 --- a/lib/infrastructure/analytic/datasources/remote_data_provider.dart +++ b/lib/infrastructure/analytic/datasources/remote_data_provider.dart @@ -36,7 +36,7 @@ class AnalyticRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(AnalyticFailure.unexpectedError()); + return DC.error(const AnalyticFailure.unexpectedError()); } final dashboard = DashboardAnalyticDto.fromJson( @@ -65,7 +65,7 @@ class AnalyticRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(AnalyticFailure.unexpectedError()); + return DC.error(const AnalyticFailure.unexpectedError()); } final sales = SalesAnalyticDto.fromJson( @@ -94,7 +94,7 @@ class AnalyticRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(AnalyticFailure.unexpectedError()); + return DC.error(const AnalyticFailure.unexpectedError()); } final products = ProductAnalyticDto.fromJson( @@ -123,7 +123,7 @@ class AnalyticRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(AnalyticFailure.unexpectedError()); + return DC.error(const AnalyticFailure.unexpectedError()); } final paymentMethods = PaymentMethodAnalyticDto.fromJson( @@ -152,7 +152,7 @@ class AnalyticRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(AnalyticFailure.unexpectedError()); + return DC.error(const AnalyticFailure.unexpectedError()); } final profitLoss = ProfitLossAnalyticDto.fromJson( @@ -181,7 +181,7 @@ class AnalyticRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(AnalyticFailure.unexpectedError()); + return DC.error(const AnalyticFailure.unexpectedError()); } final categories = CategoryAnalyticDto.fromJson( @@ -211,7 +211,7 @@ class AnalyticRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(AnalyticFailure.unexpectedError()); + return DC.error(const AnalyticFailure.unexpectedError()); } final inventory = InventoryAnalyticDto.fromJson( diff --git a/lib/infrastructure/auth/datasources/remote_data_provider.dart b/lib/infrastructure/auth/datasources/remote_data_provider.dart index 3508b78..fe4f5a2 100644 --- a/lib/infrastructure/auth/datasources/remote_data_provider.dart +++ b/lib/infrastructure/auth/datasources/remote_data_provider.dart @@ -30,7 +30,7 @@ class AuthRemoteDataProvider { if (response.data['code'] == 401) { return DC.error( - AuthFailure.serverError( + const AuthFailure.serverError( ApiFailure.unauthorized('Incorrect email or password'), ), ); @@ -52,7 +52,7 @@ class AuthRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(AuthFailure.unexpectedError()); + return DC.error(const AuthFailure.unexpectedError()); } return DC.data(unit); diff --git a/lib/infrastructure/auth/dto/login_dto.dart b/lib/infrastructure/auth/dto/login_dto.dart index 313f107..672aceb 100644 --- a/lib/infrastructure/auth/dto/login_dto.dart +++ b/lib/infrastructure/auth/dto/login_dto.dart @@ -1,3 +1,5 @@ +// ignore_for_file: prefer_const_constructors + part of '../auth_dtos.dart'; @freezed diff --git a/lib/infrastructure/category/datasources/local_data_provider.dart b/lib/infrastructure/category/datasources/local_data_provider.dart index 0592e21..1c7f70c 100644 --- a/lib/infrastructure/category/datasources/local_data_provider.dart +++ b/lib/infrastructure/category/datasources/local_data_provider.dart @@ -17,7 +17,9 @@ class CategoryLocalDataProvider { CategoryLocalDataProvider(this._databaseHelper); final Map> _queryCache = {}; - final Duration _cacheExpiry = Duration(minutes: AppConstant.cacheExpire); + final Duration _cacheExpiry = const Duration( + minutes: AppConstant.cacheExpire, + ); final Map _cacheTimestamps = {}; Future> saveCategoriesBatch( @@ -203,7 +205,7 @@ class CategoryLocalDataProvider { if (maps.isEmpty) { log('❌ Category not found: $id', name: _logName); - return DC.error(CategoryFailure.empty()); + return DC.error(const CategoryFailure.empty()); } final category = CategoryDto.fromMap(maps.first); diff --git a/lib/infrastructure/category/datasources/remote_data_provider.dart b/lib/infrastructure/category/datasources/remote_data_provider.dart index 4de4e62..86f6593 100644 --- a/lib/infrastructure/category/datasources/remote_data_provider.dart +++ b/lib/infrastructure/category/datasources/remote_data_provider.dart @@ -29,7 +29,7 @@ class CategoryRemoteDataProvider { ); if (response.data['data'] == null) { - return DC.error(CategoryFailure.empty()); + return DC.error(const CategoryFailure.empty()); } final categories = ListCategoryDto.fromJson( diff --git a/lib/infrastructure/customer/datasources/remote_data_provider.dart b/lib/infrastructure/customer/datasources/remote_data_provider.dart index 4ec2810..d377680 100644 --- a/lib/infrastructure/customer/datasources/remote_data_provider.dart +++ b/lib/infrastructure/customer/datasources/remote_data_provider.dart @@ -29,7 +29,7 @@ class CustomerRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(CustomerFailure.unexpectedError()); + return DC.error(const CustomerFailure.unexpectedError()); } final customers = ListCustomerDto.fromJson( diff --git a/lib/infrastructure/order/datasources/remote_data_provider.dart b/lib/infrastructure/order/datasources/remote_data_provider.dart index d6a0565..8add098 100644 --- a/lib/infrastructure/order/datasources/remote_data_provider.dart +++ b/lib/infrastructure/order/datasources/remote_data_provider.dart @@ -46,7 +46,7 @@ class OrderRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(OrderFailure.unexpectedError()); + return DC.error(const OrderFailure.unexpectedError()); } final orders = ListOrderDto.fromJson( @@ -68,7 +68,7 @@ class OrderRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(OrderFailure.unexpectedError()); + return DC.error(const OrderFailure.unexpectedError()); } final order = OrderDto.fromJson( @@ -93,7 +93,7 @@ class OrderRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(OrderFailure.unexpectedError()); + return DC.error(const OrderFailure.unexpectedError()); } final order = OrderDto.fromJson( @@ -119,7 +119,7 @@ class OrderRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(OrderFailure.unexpectedError()); + return DC.error(const OrderFailure.unexpectedError()); } else { final order = OrderDto.fromJson( response.data['data'] as Map, @@ -161,7 +161,7 @@ class OrderRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(OrderFailure.unexpectedError()); + return DC.error(const OrderFailure.unexpectedError()); } final payment = PaymentDto.fromJson( @@ -190,7 +190,7 @@ class OrderRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(OrderFailure.unexpectedError()); + return DC.error(const OrderFailure.unexpectedError()); } final order = OrderDto.fromJson( @@ -227,7 +227,7 @@ class OrderRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(OrderFailure.unexpectedError()); + return DC.error(const OrderFailure.unexpectedError()); } return DC.data(unit); @@ -249,7 +249,7 @@ class OrderRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(OrderFailure.unexpectedError()); + return DC.error(const OrderFailure.unexpectedError()); } final payment = PaymentDto.fromJson( @@ -276,7 +276,7 @@ class OrderRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(OrderFailure.unexpectedError()); + return DC.error(const OrderFailure.unexpectedError()); } return DC.data(unit); diff --git a/lib/infrastructure/outlet/datasources/remote_data_provider.dart b/lib/infrastructure/outlet/datasources/remote_data_provider.dart index 7f95055..6add53c 100644 --- a/lib/infrastructure/outlet/datasources/remote_data_provider.dart +++ b/lib/infrastructure/outlet/datasources/remote_data_provider.dart @@ -29,7 +29,7 @@ class OutletRemoteDataProvider { ); if (response.data['data'] == null) { - return DC.error(OutletFailure.empty()); + return DC.error(const OutletFailure.empty()); } final outlets = (response.data['data']['outlets'] as List) @@ -51,7 +51,7 @@ class OutletRemoteDataProvider { ); if (response.data['data'] == null) { - return DC.error(OutletFailure.empty()); + return DC.error(const OutletFailure.empty()); } final outlet = OutletDto.fromJson( diff --git a/lib/infrastructure/payment_method/datasources/remote_data_provider.dart b/lib/infrastructure/payment_method/datasources/remote_data_provider.dart index 7a917ac..cc32d17 100644 --- a/lib/infrastructure/payment_method/datasources/remote_data_provider.dart +++ b/lib/infrastructure/payment_method/datasources/remote_data_provider.dart @@ -29,7 +29,7 @@ class PaymentMethodRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(PaymentMethodFailure.unexpectedError()); + return DC.error(const PaymentMethodFailure.unexpectedError()); } final paymentMethods = ListPaymentMethodDto.fromJson( diff --git a/lib/infrastructure/printer/datasource/local_data_provider.dart b/lib/infrastructure/printer/datasource/local_data_provider.dart index 2b6ab91..6fb4005 100644 --- a/lib/infrastructure/printer/datasource/local_data_provider.dart +++ b/lib/infrastructure/printer/datasource/local_data_provider.dart @@ -26,7 +26,7 @@ class PrinterLocalDataProvider { if (printerExist.hasData) { return DC.error( - PrinterFailure.dynamicErrorMessage('Printer Telah Terdaftar'), + const PrinterFailure.dynamicErrorMessage('Printer Telah Terdaftar'), ); } @@ -43,7 +43,7 @@ class PrinterLocalDataProvider { log('Error creating printer', name: _logName, error: e); return DC.error( - PrinterFailure.dynamicErrorMessage('Error creating printer'), + const PrinterFailure.dynamicErrorMessage('Error creating printer'), ); } } @@ -65,7 +65,7 @@ class PrinterLocalDataProvider { if (updatedRows == 0) { return DC.error( - PrinterFailure.dynamicErrorMessage('Printer not found'), + const PrinterFailure.dynamicErrorMessage('Printer not found'), ); } @@ -76,7 +76,7 @@ class PrinterLocalDataProvider { log('Error updating printer', name: _logName, error: e); return DC.error( - PrinterFailure.dynamicErrorMessage('Error updating printer'), + const PrinterFailure.dynamicErrorMessage('Error updating printer'), ); } } @@ -94,7 +94,7 @@ class PrinterLocalDataProvider { if (deletedRows == 0) { return DC.error( - PrinterFailure.dynamicErrorMessage('Printer not found'), + const PrinterFailure.dynamicErrorMessage('Printer not found'), ); } @@ -105,7 +105,7 @@ class PrinterLocalDataProvider { log('Error deleting printer', name: _logName, error: e); return DC.error( - PrinterFailure.dynamicErrorMessage('Error deleting printer'), + const PrinterFailure.dynamicErrorMessage('Error deleting printer'), ); } } @@ -123,7 +123,7 @@ class PrinterLocalDataProvider { if (result.isEmpty) { log('Printer with code $code not found'); - return DC.error(PrinterFailure.empty()); + return DC.error(const PrinterFailure.empty()); } final printer = PrinterDto.fromJson(result.first); @@ -133,7 +133,7 @@ class PrinterLocalDataProvider { log('findPrinterByCode', name: _logName, error: e); return DC.error( - PrinterFailure.dynamicErrorMessage('Error getting printer'), + const PrinterFailure.dynamicErrorMessage('Error getting printer'), ); } } diff --git a/lib/infrastructure/printer/repositories/printer_repository.dart b/lib/infrastructure/printer/repositories/printer_repository.dart index c6504b8..9e1ab95 100644 --- a/lib/infrastructure/printer/repositories/printer_repository.dart +++ b/lib/infrastructure/printer/repositories/printer_repository.dart @@ -86,7 +86,7 @@ class PrinterRepository implements IPrinterRepository { ); log("Error connecting to Bluetooth printer", name: _logName, error: e); return left( - PrinterFailure.dynamicErrorMessage( + const PrinterFailure.dynamicErrorMessage( 'Error connecting to Bluetooth printer', ), ); @@ -102,7 +102,7 @@ class PrinterRepository implements IPrinterRepository { } catch (e) { log("Error disconnecting Bluetooth printer", error: e, name: _logName); return left( - PrinterFailure.dynamicErrorMessage( + const PrinterFailure.dynamicErrorMessage( 'Error disconnecting Bluetooth printer', ), ); @@ -121,7 +121,7 @@ class PrinterRepository implements IPrinterRepository { } catch (e) { log("Error getting paired Bluetooth devices", name: _logName, error: e); return left( - PrinterFailure.dynamicErrorMessage( + const PrinterFailure.dynamicErrorMessage( 'Error getting paired Bluetooth devices', ), ); @@ -137,7 +137,9 @@ class PrinterRepository implements IPrinterRepository { } catch (e) { log("Error checking Bluetooth status", name: _logName, error: e); return left( - PrinterFailure.dynamicErrorMessage('Error checking Bluetooth status'), + const PrinterFailure.dynamicErrorMessage( + 'Error checking Bluetooth status', + ), ); } } @@ -254,7 +256,7 @@ class PrinterRepository implements IPrinterRepository { ], ); return left( - PrinterFailure.dynamicErrorMessage( + const PrinterFailure.dynamicErrorMessage( 'Printer cannot connect to bluetooth, Please connect in printer setting!', ), ); @@ -306,7 +308,7 @@ class PrinterRepository implements IPrinterRepository { ], ); return left( - PrinterFailure.dynamicErrorMessage('Error printing struct'), + const PrinterFailure.dynamicErrorMessage('Error printing struct'), ); } }); @@ -339,7 +341,7 @@ class PrinterRepository implements IPrinterRepository { information: ['Printer: ${printer.name}', 'IP: ${printer.address}'], ); return left( - PrinterFailure.dynamicErrorMessage('Error printing struct'), + const PrinterFailure.dynamicErrorMessage('Error printing struct'), ); } } diff --git a/lib/infrastructure/product/datasources/local_data_provider.dart b/lib/infrastructure/product/datasources/local_data_provider.dart index e8a696b..bedc4b4 100644 --- a/lib/infrastructure/product/datasources/local_data_provider.dart +++ b/lib/infrastructure/product/datasources/local_data_provider.dart @@ -17,7 +17,9 @@ class ProductLocalDataProvider { final _logName = 'ProductLocalDataProvider'; final Map> _queryCache = {}; - final Duration _cacheExpiry = Duration(minutes: AppConstant.cacheExpire); + final Duration _cacheExpiry = const Duration( + minutes: AppConstant.cacheExpire, + ); final Map _cacheTimestamps = {}; ProductLocalDataProvider(this._databaseHelper); @@ -281,7 +283,7 @@ class ProductLocalDataProvider { if (maps.isEmpty) { log('❌ Product not found: $id', name: _logName); - return DC.error(ProductFailure.empty()); + return DC.error(const ProductFailure.empty()); } final variants = await _getProductVariants(db, id); diff --git a/lib/infrastructure/product/datasources/remote_data_provider.dart b/lib/infrastructure/product/datasources/remote_data_provider.dart index 1f9316b..0a6cbb9 100644 --- a/lib/infrastructure/product/datasources/remote_data_provider.dart +++ b/lib/infrastructure/product/datasources/remote_data_provider.dart @@ -41,7 +41,7 @@ class ProductRemoteDataProvider { ); if (response.data['data'] == null) { - return DC.error(ProductFailure.empty()); + return DC.error(const ProductFailure.empty()); } final categories = ListProductDto.fromJson( diff --git a/lib/infrastructure/table/datasources/remote_data_provider.dart b/lib/infrastructure/table/datasources/remote_data_provider.dart index ef48982..489ba3e 100644 --- a/lib/infrastructure/table/datasources/remote_data_provider.dart +++ b/lib/infrastructure/table/datasources/remote_data_provider.dart @@ -38,7 +38,7 @@ class TableRemoteDataProvider { ); if (response.data['data'] == null) { - return DC.error(TableFailure.empty()); + return DC.error(const TableFailure.empty()); } final tables = ListTableDto.fromJson( @@ -71,7 +71,7 @@ class TableRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(TableFailure.unexpectedError()); + return DC.error(const TableFailure.unexpectedError()); } final table = TableDto.fromJson( @@ -99,7 +99,7 @@ class TableRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(TableFailure.unexpectedError()); + return DC.error(const TableFailure.unexpectedError()); } final table = TableDto.fromJson( @@ -124,7 +124,7 @@ class TableRemoteDataProvider { ); if (response.data['success'] == false) { - return DC.error(TableFailure.unexpectedError()); + return DC.error(const TableFailure.unexpectedError()); } return DC.data(unit); diff --git a/lib/presentation/components/button/icon_button.dart b/lib/presentation/components/button/icon_button.dart index 8fd8a95..0bf248f 100644 --- a/lib/presentation/components/button/icon_button.dart +++ b/lib/presentation/components/button/icon_button.dart @@ -10,7 +10,7 @@ class AppIconButton extends StatelessWidget { return InkWell( onTap: onTap, child: Container( - padding: EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0), + padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(6.0), border: Border.all(color: AppColor.border), diff --git a/lib/presentation/components/card/customer_card.dart b/lib/presentation/components/card/customer_card.dart index ba14fd1..1f08a2a 100644 --- a/lib/presentation/components/card/customer_card.dart +++ b/lib/presentation/components/card/customer_card.dart @@ -35,7 +35,7 @@ class CustomerCard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - CircleAvatar( + const CircleAvatar( radius: 22, backgroundColor: AppColor.primary, child: Icon(Icons.person, color: Colors.white), diff --git a/lib/presentation/components/card/error_card.dart b/lib/presentation/components/card/error_card.dart index 9653009..223d845 100644 --- a/lib/presentation/components/card/error_card.dart +++ b/lib/presentation/components/card/error_card.dart @@ -20,21 +20,21 @@ class ErrorCard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.error_outline, size: 48, color: Colors.red.shade400), - SizedBox(height: 16), + const SizedBox(height: 16), Text( title, - style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600), + style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600), ), - SizedBox(height: 8), + const SizedBox(height: 8), Padding( - padding: EdgeInsets.symmetric(horizontal: 32), + padding: const EdgeInsets.symmetric(horizontal: 32), child: Text( message, textAlign: TextAlign.center, - style: TextStyle(color: Colors.grey.shade600), + style: const TextStyle(color: Colors.grey), ), ), - SizedBox(height: 16), + const SizedBox(height: 16), AppElevatedButton.filled( width: 120, onPressed: onTap, diff --git a/lib/presentation/components/card/order_card.dart b/lib/presentation/components/card/order_card.dart index 631b510..79274a0 100644 --- a/lib/presentation/components/card/order_card.dart +++ b/lib/presentation/components/card/order_card.dart @@ -84,7 +84,7 @@ class OrderCard extends StatelessWidget { const SizedBox(height: 12), Row( children: [ - CircleAvatar( + const CircleAvatar( radius: 22, backgroundColor: AppColor.primary, child: Icon(Icons.person, color: Colors.white), @@ -107,7 +107,7 @@ class OrderCard extends StatelessWidget { const SizedBox(height: 4), Row( children: [ - Icon( + const Icon( Icons.table_bar, size: 16, color: AppColor.textSecondary, @@ -145,7 +145,7 @@ class OrderCard extends StatelessWidget { ), Text( (order.createdAt).toFormattedDateTime(), - style: TextStyle(color: AppColor.black), + style: const TextStyle(color: AppColor.black), ), ], ), @@ -182,7 +182,7 @@ class OrderCard extends StatelessWidget { ), child: Text( (order.status).toUpperCase(), - style: TextStyle( + style: const TextStyle( color: AppColor.success, fontWeight: FontWeight.w600, fontSize: 12, @@ -199,7 +199,7 @@ class OrderCard extends StatelessWidget { ), child: Text( (order.status).toUpperCase(), - style: TextStyle( + style: const TextStyle( color: AppColor.textSecondary, fontWeight: FontWeight.w600, fontSize: 12, diff --git a/lib/presentation/components/card/order_menu.dart b/lib/presentation/components/card/order_menu.dart index ac8ad8a..82fda90 100644 --- a/lib/presentation/components/card/order_menu.dart +++ b/lib/presentation/components/card/order_menu.dart @@ -50,7 +50,7 @@ class _OrderMenuState extends State { child: ListTile( contentPadding: EdgeInsets.zero, leading: ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(8.0)), + borderRadius: const BorderRadius.all(Radius.circular(8.0)), child: AppNetworkImage( url: widget.data.product.imageUrl, width: 50.0, @@ -150,7 +150,7 @@ class _OrderMenuState extends State { ), ], ), - SpaceHeight(8.0), + const SpaceHeight(8.0), SizedBox( height: 40, child: Row( @@ -160,7 +160,9 @@ class _OrderMenuState extends State { cursorColor: AppColor.primary, controller: _controller, style: const TextStyle(fontSize: 12, color: AppColor.black), - decoration: InputDecoration(hintText: 'Catatan Pesanan'), + decoration: const InputDecoration( + hintText: 'Catatan Pesanan', + ), ), ), const SpaceWidth(16.0), @@ -180,7 +182,10 @@ class _OrderMenuState extends State { color: AppColor.primary, borderRadius: BorderRadius.circular(8.0), ), - child: Icon(Icons.delete_outline, color: AppColor.white), + child: const Icon( + Icons.delete_outline, + color: AppColor.white, + ), ), ), ], diff --git a/lib/presentation/components/card/outlet_card.dart b/lib/presentation/components/card/outlet_card.dart index f5ef0b1..7d2782c 100644 --- a/lib/presentation/components/card/outlet_card.dart +++ b/lib/presentation/components/card/outlet_card.dart @@ -13,7 +13,7 @@ class OutletCard extends StatelessWidget { Widget build(BuildContext context) { return Container( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0), - margin: EdgeInsets.only(bottom: 12), + margin: const EdgeInsets.only(bottom: 12), decoration: BoxDecoration( color: isSelected ? AppColor.primary.withOpacity(0.1) : AppColor.white, border: Border.all(color: AppColor.primary), @@ -21,8 +21,8 @@ class OutletCard extends StatelessWidget { ), child: Row( children: [ - Icon(Icons.store, color: AppColor.primary), - SpaceWidth(12), + const Icon(Icons.store, color: AppColor.primary), + const SpaceWidth(12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/presentation/components/card/payment_card.dart b/lib/presentation/components/card/payment_card.dart index b0d0fc6..5115a7c 100644 --- a/lib/presentation/components/card/payment_card.dart +++ b/lib/presentation/components/card/payment_card.dart @@ -28,7 +28,7 @@ class PaymentCard extends StatelessWidget { ), checkmarkColor: AppColor.white, shape: RoundedRectangleBorder( - side: BorderSide(color: AppColor.primary), + side: const BorderSide(color: AppColor.primary), borderRadius: BorderRadius.circular(8), ), padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), diff --git a/lib/presentation/components/card/product_card.dart b/lib/presentation/components/card/product_card.dart index d14f633..de9564b 100644 --- a/lib/presentation/components/card/product_card.dart +++ b/lib/presentation/components/card/product_card.dart @@ -44,7 +44,7 @@ class ProductCard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, children: [ ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(8.0)), + borderRadius: const BorderRadius.all(Radius.circular(8.0)), child: product.imageUrl == "" ? Container( width: double.infinity, @@ -71,7 +71,7 @@ class ProductCard extends StatelessWidget { maxLines: 1, overflow: TextOverflow.ellipsis, ), - SpaceHeight(4), + const SpaceHeight(4), Align( alignment: Alignment.center, child: Text( @@ -82,7 +82,7 @@ class ProductCard extends StatelessWidget { ), ), ), - SpaceHeight(4), + const SpaceHeight(4), ], ), ), @@ -126,7 +126,7 @@ class ProductCard extends StatelessWidget { Container( width: double.infinity, decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(8.0)), + borderRadius: const BorderRadius.all(Radius.circular(8.0)), color: AppColor.disabled.withOpacity(0.5), ), ), diff --git a/lib/presentation/components/dialog/custom_modal_dialog.dart b/lib/presentation/components/dialog/custom_modal_dialog.dart index 80c88a6..0a880c0 100644 --- a/lib/presentation/components/dialog/custom_modal_dialog.dart +++ b/lib/presentation/components/dialog/custom_modal_dialog.dart @@ -45,7 +45,7 @@ class CustomModalDialog extends StatelessWidget { Container( padding: const EdgeInsets.all(16), width: double.infinity, - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.primary, borderRadius: BorderRadius.vertical(top: Radius.circular(16)), ), @@ -74,9 +74,9 @@ class CustomModalDialog extends StatelessWidget { ], ), ), - SpaceWidth(12), + const SpaceWidth(12), IconButton( - icon: Icon(Icons.close, color: AppColor.white), + icon: const Icon(Icons.close, color: AppColor.white), onPressed: () { if (onClose != null) { onClose!(); diff --git a/lib/presentation/components/dialog/delivery_dialog.dart b/lib/presentation/components/dialog/delivery_dialog.dart index 997b36b..daa826b 100644 --- a/lib/presentation/components/dialog/delivery_dialog.dart +++ b/lib/presentation/components/dialog/delivery_dialog.dart @@ -68,7 +68,7 @@ class _DeliveryDialogState extends State { height: 40.0, fit: BoxFit.contain, ), - SpaceWidth(12.0), + const SpaceWidth(12.0), Expanded( child: Text( delivery.name, @@ -83,7 +83,7 @@ class _DeliveryDialogState extends State { overflow: TextOverflow.ellipsis, ), ), - SpaceWidth(12.0), + const SpaceWidth(12.0), Icon( Icons.check_circle, color: selectedType?.id == delivery.id diff --git a/lib/presentation/components/dialog/logout_modal_dialog.dart b/lib/presentation/components/dialog/logout_modal_dialog.dart index 95a0c0c..9d27e85 100644 --- a/lib/presentation/components/dialog/logout_modal_dialog.dart +++ b/lib/presentation/components/dialog/logout_modal_dialog.dart @@ -17,7 +17,7 @@ class LogoutModalDialog extends StatelessWidget { builder: (context, state) { return CustomModalDialog( title: 'Konfirmasi', - contentPadding: EdgeInsets.all(16), + contentPadding: const EdgeInsets.all(16), bottom: Padding( padding: const EdgeInsets.all(16), child: Row( @@ -28,7 +28,7 @@ class LogoutModalDialog extends StatelessWidget { label: 'Batal', ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: AppElevatedButton.filled( onPressed: state.isLoggingOut diff --git a/lib/presentation/components/dialog/order/order_add_item_dialog.dart b/lib/presentation/components/dialog/order/order_add_item_dialog.dart index 7a6028f..c3110d4 100644 --- a/lib/presentation/components/dialog/order/order_add_item_dialog.dart +++ b/lib/presentation/components/dialog/order/order_add_item_dialog.dart @@ -27,7 +27,7 @@ class _OrderAddItemDialogState extends State { void initState() { super.initState(); context.read().add( - OrderLoaderEvent.fetched(status: 'pending', isRefresh: true), + const OrderLoaderEvent.fetched(status: 'pending', isRefresh: true), ); } @@ -51,7 +51,7 @@ class _OrderAddItemDialogState extends State { BlocBuilder( builder: (context, state) { if (state.isFetching) { - return Center(child: LoaderWithText()); + return const Center(child: LoaderWithText()); } final availableOrders = state.orders; @@ -258,7 +258,7 @@ class _OrderAddItemDialogState extends State { ); }, ), - SpaceHeight(16), + const SpaceHeight(16), BlocBuilder( builder: (context, state) { return AppElevatedButton.filled( diff --git a/lib/presentation/components/dialog/order/order_pay_later_dialog.dart b/lib/presentation/components/dialog/order/order_pay_later_dialog.dart index f6c9fab..68b5fdb 100644 --- a/lib/presentation/components/dialog/order/order_pay_later_dialog.dart +++ b/lib/presentation/components/dialog/order/order_pay_later_dialog.dart @@ -195,7 +195,7 @@ class OrderPayLaterDialog extends StatelessWidget { Text( searchEntry.isEmpty ? "Tidak ada meja tersedia" - : "Tidak ditemukan meja dengan '${searchEntry}'", + : "Tidak ditemukan meja dengan '$searchEntry'", style: TextStyle( color: Colors.grey.shade600, fontSize: 14, @@ -233,7 +233,7 @@ class OrderPayLaterDialog extends StatelessWidget { ); }, ), - SpaceHeight(24), + const SpaceHeight(24), BlocBuilder( builder: (context, orderState) { return AppElevatedButton.filled( diff --git a/lib/presentation/components/dialog/order/order_save_confirm_dialog.dart b/lib/presentation/components/dialog/order/order_save_confirm_dialog.dart index 62ed42d..a583a45 100644 --- a/lib/presentation/components/dialog/order/order_save_confirm_dialog.dart +++ b/lib/presentation/components/dialog/order/order_save_confirm_dialog.dart @@ -29,7 +29,7 @@ class OrderSaveConfirmDialog extends StatelessWidget { minWidth: context.deviceWidth * 0.5, minHeight: context.deviceHeight * 0.8, bottom: Container( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), child: Row( children: [ Expanded( @@ -38,7 +38,7 @@ class OrderSaveConfirmDialog extends StatelessWidget { label: 'Batalkan', ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: AppElevatedButton.filled( isLoading: state.isCreating, @@ -63,7 +63,7 @@ class OrderSaveConfirmDialog extends StatelessWidget { children: [ Container( width: double.infinity, - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: AppColor.textSecondary.withOpacity(0.05), borderRadius: BorderRadius.circular(12), @@ -75,7 +75,7 @@ class OrderSaveConfirmDialog extends StatelessWidget { ), ), if (checkoutState.items.isNotEmpty) ...[ - SpaceHeight(16), + const SpaceHeight(16), Container( width: double.infinity, decoration: BoxDecoration( @@ -87,22 +87,22 @@ class OrderSaveConfirmDialog extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), child: Row( children: [ Container( - padding: EdgeInsets.all(6), + padding: const EdgeInsets.all(6), decoration: BoxDecoration( color: AppColor.primary, borderRadius: BorderRadius.circular(6), ), - child: Icon( + child: const Icon( Icons.list_alt_rounded, color: AppColor.white, size: 16, ), ), - SizedBox(width: 8), + const SizedBox(width: 8), Text( 'Item yang akan dipesan:', style: AppStyle.md.copyWith( @@ -114,10 +114,10 @@ class OrderSaveConfirmDialog extends StatelessWidget { ), ), Container( - constraints: BoxConstraints(maxHeight: 120), + constraints: const BoxConstraints(maxHeight: 120), child: Scrollbar( child: SingleChildScrollView( - padding: EdgeInsets.only( + padding: const EdgeInsets.only( left: 16, right: 16, bottom: 16, @@ -125,8 +125,8 @@ class OrderSaveConfirmDialog extends StatelessWidget { child: Column( children: checkoutState.items.map((item) { return Container( - margin: EdgeInsets.only(bottom: 6), - padding: EdgeInsets.all(10), + margin: const EdgeInsets.only(bottom: 6), + padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(6), @@ -134,7 +134,7 @@ class OrderSaveConfirmDialog extends StatelessWidget { BoxShadow( color: Colors.black.withOpacity(0.03), blurRadius: 2, - offset: Offset(0, 1), + offset: const Offset(0, 1), ), ], ), @@ -143,12 +143,12 @@ class OrderSaveConfirmDialog extends StatelessWidget { Container( width: 6, height: 6, - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.primary, shape: BoxShape.circle, ), ), - SizedBox(width: 8), + const SizedBox(width: 8), Expanded( child: Column( crossAxisAlignment: @@ -172,7 +172,7 @@ class OrderSaveConfirmDialog extends StatelessWidget { ), ), Container( - padding: EdgeInsets.symmetric( + padding: const EdgeInsets.symmetric( horizontal: 6, vertical: 2, ), diff --git a/lib/presentation/components/dialog/order/order_save_dialog.dart b/lib/presentation/components/dialog/order/order_save_dialog.dart index 80ca5ca..1ab016c 100644 --- a/lib/presentation/components/dialog/order/order_save_dialog.dart +++ b/lib/presentation/components/dialog/order/order_save_dialog.dart @@ -39,14 +39,14 @@ class OrderSaveDialog extends StatelessWidget { context.maybePop(); if (checkoutState.orderType == OrderType.dineIn) { - Future.delayed(Duration(milliseconds: 100), () { + Future.delayed(const Duration(milliseconds: 100), () { showDialog( context: context, builder: (context) => OrderPayLaterDialog(tables: tables), ); }); } else { - Future.delayed(Duration(milliseconds: 100), () { + Future.delayed(const Duration(milliseconds: 100), () { showDialog( context: context, builder: (context) => @@ -56,7 +56,7 @@ class OrderSaveDialog extends StatelessWidget { } }, ), - SpaceHeight(16.0), + const SpaceHeight(16.0), _item( icon: Icons.shopping_cart_checkout_outlined, title: 'Tambahkan Pesanan', @@ -92,7 +92,7 @@ class OrderSaveDialog extends StatelessWidget { child: Row( children: [ Icon(icon, color: AppColor.primary, size: 26.0), - SpaceWidth(12.0), + const SpaceWidth(12.0), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/lib/presentation/components/dialog/order/order_void_confirm_dialog.dart b/lib/presentation/components/dialog/order/order_void_confirm_dialog.dart index 63422a9..d165fec 100644 --- a/lib/presentation/components/dialog/order/order_void_confirm_dialog.dart +++ b/lib/presentation/components/dialog/order/order_void_confirm_dialog.dart @@ -21,7 +21,7 @@ class OrderVoidConfirmDialog extends StatelessWidget { return CustomModalDialog( title: 'Konfirmasi Void', subtitle: 'Tindakan ini tidak dapat dibatalkan', - contentPadding: EdgeInsets.all(16), + contentPadding: const EdgeInsets.all(16), bottom: Padding( padding: const EdgeInsets.all(16.0), child: Row( @@ -37,7 +37,7 @@ class OrderVoidConfirmDialog extends StatelessWidget { child: AppElevatedButton.filled( onPressed: () { context.read().add( - VoidFormEvent.submitted(), + const VoidFormEvent.submitted(), ); }, label: state.voidType.isAll ? 'Void Pesanan' : 'Void Item', @@ -60,7 +60,7 @@ class OrderVoidConfirmDialog extends StatelessWidget { if (state.voidType.isItem && state.selectedItemQuantities.isNotEmpty) ...[ - SizedBox(height: 16), + const SizedBox(height: 16), // Items section Container( @@ -74,22 +74,22 @@ class OrderVoidConfirmDialog extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), child: Row( children: [ Container( - padding: EdgeInsets.all(6), + padding: const EdgeInsets.all(6), decoration: BoxDecoration( color: AppColor.primary.withOpacity(0.2), borderRadius: BorderRadius.circular(6), ), - child: Icon( + child: const Icon( Icons.list_alt_rounded, color: AppColor.primary, size: 16, ), ), - SizedBox(width: 8), + const SizedBox(width: 8), Text( 'Item yang akan divoid:', style: AppStyle.md.copyWith( @@ -101,10 +101,10 @@ class OrderVoidConfirmDialog extends StatelessWidget { ), ), Container( - constraints: BoxConstraints(maxHeight: 120), + constraints: const BoxConstraints(maxHeight: 120), child: Scrollbar( child: SingleChildScrollView( - padding: EdgeInsets.only( + padding: const EdgeInsets.only( left: 16, right: 16, bottom: 16, @@ -117,8 +117,8 @@ class OrderVoidConfirmDialog extends StatelessWidget { (item) => item.id == entry.key, ); return Container( - margin: EdgeInsets.only(bottom: 6), - padding: EdgeInsets.all(10), + margin: const EdgeInsets.only(bottom: 6), + padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(6), @@ -128,7 +128,7 @@ class OrderVoidConfirmDialog extends StatelessWidget { 0.03, ), blurRadius: 2, - offset: Offset(0, 1), + offset: const Offset(0, 1), ), ], ), @@ -137,12 +137,12 @@ class OrderVoidConfirmDialog extends StatelessWidget { Container( width: 6, height: 6, - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.primary, shape: BoxShape.circle, ), ), - SizedBox(width: 8), + const SizedBox(width: 8), Expanded( child: Column( crossAxisAlignment: @@ -169,7 +169,7 @@ class OrderVoidConfirmDialog extends StatelessWidget { ), ), Container( - padding: EdgeInsets.symmetric( + padding: const EdgeInsets.symmetric( horizontal: 6, vertical: 2, ), @@ -201,11 +201,11 @@ class OrderVoidConfirmDialog extends StatelessWidget { ), ), ], - SizedBox(height: 16), + const SizedBox(height: 16), // Reason section Container( width: double.infinity, - padding: EdgeInsets.all(12), + padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: Colors.blue[50], borderRadius: BorderRadius.circular(8), @@ -215,18 +215,18 @@ class OrderVoidConfirmDialog extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - padding: EdgeInsets.all(6), + padding: const EdgeInsets.all(6), decoration: BoxDecoration( color: AppColor.info.withOpacity(0.1), borderRadius: BorderRadius.circular(6), ), - child: Icon( + child: const Icon( Icons.note_alt_rounded, color: AppColor.info, size: 16, ), ), - SizedBox(width: 8), + const SizedBox(width: 8), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -239,7 +239,7 @@ class OrderVoidConfirmDialog extends StatelessWidget { fontSize: 12, ), ), - SizedBox(height: 2), + const SizedBox(height: 2), Text( state.voidReason ?? "", style: TextStyle( diff --git a/lib/presentation/components/dialog/order_type_dialog.dart b/lib/presentation/components/dialog/order_type_dialog.dart index 3184df5..894d216 100644 --- a/lib/presentation/components/dialog/order_type_dialog.dart +++ b/lib/presentation/components/dialog/order_type_dialog.dart @@ -89,7 +89,7 @@ class OrderTypeDialog extends StatelessWidget { ? AppColor.white : AppColor.black, ), - SpaceWidth(12.0), + const SpaceWidth(12.0), Expanded( child: Text( type['label']!, @@ -103,7 +103,7 @@ class OrderTypeDialog extends StatelessWidget { overflow: TextOverflow.ellipsis, ), ), - SpaceWidth(12.0), + const SpaceWidth(12.0), Icon( Icons.check_circle, color: selectedType == type['value'] diff --git a/lib/presentation/components/dialog/outlet_dialog.dart b/lib/presentation/components/dialog/outlet_dialog.dart index 5012212..1d3abf9 100644 --- a/lib/presentation/components/dialog/outlet_dialog.dart +++ b/lib/presentation/components/dialog/outlet_dialog.dart @@ -12,7 +12,7 @@ class _OutletDialogState extends State { void initState() { super.initState(); context.read().add( - OutletLoaderEvent.fetched(isRefresh: true), + const OutletLoaderEvent.fetched(isRefresh: true), ); } @@ -29,7 +29,7 @@ class _OutletDialogState extends State { child: BlocBuilder( builder: (context, state) { if (state.isFetching) { - return LoaderWithText(); + return const LoaderWithText(); } return Column( @@ -46,8 +46,11 @@ class _OutletDialogState extends State { ), ), ), - SpaceHeight(24), - AppElevatedButton.filled(onPressed: null, label: 'Terapkan'), + const SpaceHeight(24), + const AppElevatedButton.filled( + onPressed: null, + label: 'Terapkan', + ), ], ); }, diff --git a/lib/presentation/components/dialog/printer_bluetooth_dialog.dart b/lib/presentation/components/dialog/printer_bluetooth_dialog.dart index 89c8596..facc634 100644 --- a/lib/presentation/components/dialog/printer_bluetooth_dialog.dart +++ b/lib/presentation/components/dialog/printer_bluetooth_dialog.dart @@ -13,7 +13,9 @@ class _PrinterBluetoothDialogState extends State { @override void initState() { loadPermissionBluetooth(); - context.read().add(BluetoothLoaderEvent.fetched()); + context.read().add( + const BluetoothLoaderEvent.fetched(), + ); super.initState(); } @@ -21,13 +23,13 @@ class _PrinterBluetoothDialogState extends State { Widget build(BuildContext context) { return CustomModalDialog( title: 'Bluetooth', - contentPadding: EdgeInsets.all(16), + contentPadding: const EdgeInsets.all(16), minHeight: context.deviceHeight * 0.6, minWidth: context.deviceWidth * 0.4, child: BlocBuilder( builder: (context, state) { if (state.isFetching) { - return Center(child: LoaderWithText()); + return const Center(child: LoaderWithText()); } if (state.bluetoothDevices.isEmpty) { @@ -50,7 +52,7 @@ class _PrinterBluetoothDialogState extends State { child: Container( width: double.infinity, padding: const EdgeInsets.symmetric(vertical: 12), - decoration: BoxDecoration( + decoration: const BoxDecoration( border: Border( bottom: BorderSide(color: AppColor.border, width: 1), ), @@ -66,7 +68,7 @@ class _PrinterBluetoothDialogState extends State { color: AppColor.primary, ), ), - SpaceHeight(4), + const SpaceHeight(4), Text( item.macAdress, style: AppStyle.sm.copyWith( diff --git a/lib/presentation/components/dialog/table/table_create_dialog.dart b/lib/presentation/components/dialog/table/table_create_dialog.dart index 4d8e036..fe662d4 100644 --- a/lib/presentation/components/dialog/table/table_create_dialog.dart +++ b/lib/presentation/components/dialog/table/table_create_dialog.dart @@ -31,7 +31,7 @@ class TableCreateDialog extends StatelessWidget { ); }, ), - SpaceHeight(16), + const SpaceHeight(16), AppTextFormField( label: 'Kapasitas', keyboardType: TextInputType.number, @@ -41,7 +41,7 @@ class TableCreateDialog extends StatelessWidget { ); }, ), - SpaceHeight(24), + const SpaceHeight(24), AppElevatedButton.filled( onPressed: () { context.read().add( diff --git a/lib/presentation/components/dialog/table/table_transfer_dialog.dart b/lib/presentation/components/dialog/table/table_transfer_dialog.dart index 8f119d4..8af9fdb 100644 --- a/lib/presentation/components/dialog/table/table_transfer_dialog.dart +++ b/lib/presentation/components/dialog/table/table_transfer_dialog.dart @@ -29,7 +29,7 @@ class _TableTransferDialogState extends State { void initState() { super.initState(); context.read().add( - TableLoaderEvent.fetched(isRefresh: true, status: 'available'), + const TableLoaderEvent.fetched(isRefresh: true, status: 'available'), ); } @@ -60,7 +60,7 @@ class _TableTransferDialogState extends State { final availableTables = state.tables; if (state.isFetching) { - return Center(child: const LoaderWithText()); + return const Center(child: LoaderWithText()); } if (selectTable == null && availableTables.isNotEmpty) { @@ -252,7 +252,7 @@ class _TableTransferDialogState extends State { ), ], ), - SpaceHeight(24), + const SpaceHeight(24), BlocBuilder( builder: (context, state) { return AppElevatedButton.filled( diff --git a/lib/presentation/components/dialog/variant_dialog.dart b/lib/presentation/components/dialog/variant_dialog.dart index 2821771..2d70727 100644 --- a/lib/presentation/components/dialog/variant_dialog.dart +++ b/lib/presentation/components/dialog/variant_dialog.dart @@ -10,7 +10,7 @@ class VariantDialog extends StatelessWidget { title: 'Pilih Varian', subtitle: 'Silahkan pilih varian yang sesuai', minWidth: context.deviceWidth * 0.4, - contentPadding: EdgeInsets.all(16), + contentPadding: const EdgeInsets.all(16), child: Wrap( spacing: 12, runSpacing: 12, @@ -44,7 +44,7 @@ class VariantDialog extends StatelessWidget { const SizedBox(height: 4), Text( variant.priceModifier.currencyFormatRpV2, - style: TextStyle(color: AppColor.black), + style: const TextStyle(color: AppColor.black), ), ], ), diff --git a/lib/presentation/components/error/payment_method_error_state_widget.dart b/lib/presentation/components/error/payment_method_error_state_widget.dart index a27e001..8431652 100644 --- a/lib/presentation/components/error/payment_method_error_state_widget.dart +++ b/lib/presentation/components/error/payment_method_error_state_widget.dart @@ -17,7 +17,7 @@ class PaymentMethodErrorStateWidget extends StatelessWidget { message: 'Terjadi Kesalahan saat memuat metode pembayaran', onTap: () { context.read().add( - PaymentMethodLoaderEvent.fetched(isRefresh: true), + const PaymentMethodLoaderEvent.fetched(isRefresh: true), ); }, ), @@ -26,7 +26,7 @@ class PaymentMethodErrorStateWidget extends StatelessWidget { message: value.erroMessage, onTap: () { context.read().add( - PaymentMethodLoaderEvent.fetched(isRefresh: true), + const PaymentMethodLoaderEvent.fetched(isRefresh: true), ); }, ), @@ -36,7 +36,7 @@ class PaymentMethodErrorStateWidget extends StatelessWidget { 'Metode pembayaran masih kosong, silahkan tambahkan metode pembayaran', onTap: () { context.read().add( - PaymentMethodLoaderEvent.fetched(isRefresh: true), + const PaymentMethodLoaderEvent.fetched(isRefresh: true), ); }, ), @@ -45,7 +45,7 @@ class PaymentMethodErrorStateWidget extends StatelessWidget { message: 'Terjadi Kesalahan saat memuat metode pembayaran', onTap: () { context.read().add( - PaymentMethodLoaderEvent.fetched(isRefresh: true), + const PaymentMethodLoaderEvent.fetched(isRefresh: true), ); }, ), @@ -54,7 +54,7 @@ class PaymentMethodErrorStateWidget extends StatelessWidget { message: value.erroMessage, onTap: () { context.read().add( - PaymentMethodLoaderEvent.fetched(isRefresh: true), + const PaymentMethodLoaderEvent.fetched(isRefresh: true), ); }, ), @@ -63,7 +63,7 @@ class PaymentMethodErrorStateWidget extends StatelessWidget { message: 'Terjadi Kesalahan saat memuat metode pembayaran', onTap: () { context.read().add( - PaymentMethodLoaderEvent.fetched(isRefresh: true), + const PaymentMethodLoaderEvent.fetched(isRefresh: true), ); }, ), diff --git a/lib/presentation/components/field/customer_autocomplete.dart b/lib/presentation/components/field/customer_autocomplete.dart index 76a5e87..fca4fe4 100644 --- a/lib/presentation/components/field/customer_autocomplete.dart +++ b/lib/presentation/components/field/customer_autocomplete.dart @@ -21,7 +21,7 @@ class _CustomerAutocompleteState extends State { @override void initState() { super.initState(); - context.read().add(CustomerLoaderEvent.fetched()); + context.read().add(const CustomerLoaderEvent.fetched()); } @override diff --git a/lib/presentation/components/field/dropdown_search.dart b/lib/presentation/components/field/dropdown_search.dart index 5191800..d6cc5f2 100644 --- a/lib/presentation/components/field/dropdown_search.dart +++ b/lib/presentation/components/field/dropdown_search.dart @@ -18,7 +18,7 @@ class AppDropdownSearch extends StatelessWidget { final bool isRequired; const AppDropdownSearch({ - Key? key, + super.key, required this.label, required this.hintText, required this.items, @@ -34,7 +34,7 @@ class AppDropdownSearch extends StatelessWidget { this.itemBuilder, this.showSearchBox = true, this.isRequired = false, - }) : super(key: key); + }); @override Widget build(BuildContext context) { @@ -46,14 +46,14 @@ class AppDropdownSearch extends StatelessWidget { children: [ Text( label, - style: TextStyle( + style: const TextStyle( fontSize: 14, color: Colors.black, fontWeight: FontWeight.w600, ), ), if (isRequired) - Text( + const Text( ' *', style: TextStyle( fontSize: 14, @@ -74,7 +74,10 @@ class AppDropdownSearch extends StatelessWidget { dropdownDecoratorProps: DropDownDecoratorProps( dropdownSearchDecoration: InputDecoration( hintText: hintText, - hintStyle: TextStyle(color: AppColor.textSecondary, fontSize: 14), + hintStyle: const TextStyle( + color: AppColor.textSecondary, + fontSize: 14, + ), prefixIcon: Icon( prefixIcon, color: AppColor.textSecondary, @@ -82,23 +85,29 @@ class AppDropdownSearch extends StatelessWidget { ), border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), - borderSide: BorderSide(color: AppColor.border, width: 1.5), + borderSide: const BorderSide( + color: AppColor.border, + width: 1.5, + ), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), - borderSide: BorderSide(color: AppColor.border, width: 1.5), + borderSide: const BorderSide( + color: AppColor.border, + width: 1.5, + ), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), - borderSide: BorderSide(color: AppColor.primary, width: 2), + borderSide: const BorderSide(color: AppColor.primary, width: 2), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), - borderSide: BorderSide(color: AppColor.error, width: 1.5), + borderSide: const BorderSide(color: AppColor.error, width: 1.5), ), focusedErrorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), - borderSide: BorderSide(color: AppColor.error, width: 2), + borderSide: const BorderSide(color: AppColor.error, width: 2), ), filled: true, fillColor: Colors.white, diff --git a/lib/presentation/components/field/password_text_field.dart b/lib/presentation/components/field/password_text_field.dart index 4a85fdc..f5b931e 100644 --- a/lib/presentation/components/field/password_text_field.dart +++ b/lib/presentation/components/field/password_text_field.dart @@ -64,7 +64,7 @@ class _AppPasswordTextFormFieldState extends State { prefixIcon: widget.prefixIcon, suffixIcon: isPasswordVisible ? IconButton( - icon: Icon( + icon: const Icon( Icons.visibility, color: AppColor.textSecondary, size: 20, @@ -78,7 +78,7 @@ class _AppPasswordTextFormFieldState extends State { }, ) : IconButton( - icon: Icon( + icon: const Icon( Icons.visibility_off, color: AppColor.textSecondary, size: 20, diff --git a/lib/presentation/components/field/text_field.dart b/lib/presentation/components/field/text_field.dart index 055b282..ea432e5 100644 --- a/lib/presentation/components/field/text_field.dart +++ b/lib/presentation/components/field/text_field.dart @@ -52,7 +52,10 @@ class AppTextFormField extends StatelessWidget { maxLines: maxLines, validator: validator, decoration: InputDecoration( - contentPadding: EdgeInsets.symmetric(vertical: 4, horizontal: 12), + contentPadding: const EdgeInsets.symmetric( + vertical: 4, + horizontal: 12, + ), prefixIcon: prefixIcon, suffixIcon: suffixIcon, hintText: label, diff --git a/lib/presentation/components/loader/loader_with_text.dart b/lib/presentation/components/loader/loader_with_text.dart index ab5a156..097c797 100644 --- a/lib/presentation/components/loader/loader_with_text.dart +++ b/lib/presentation/components/loader/loader_with_text.dart @@ -12,8 +12,8 @@ class LoaderWithText extends StatelessWidget { return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - SpinKitFadingCircle(color: AppColor.primary, size: 24), - SpaceWidth(10), + const SpinKitFadingCircle(color: AppColor.primary, size: 24), + const SpaceWidth(10), Text( 'Loading...', style: AppStyle.md.copyWith( diff --git a/lib/presentation/components/page/page_title.dart b/lib/presentation/components/page/page_title.dart index fbc9cf9..a5a86ef 100644 --- a/lib/presentation/components/page/page_title.dart +++ b/lib/presentation/components/page/page_title.dart @@ -28,7 +28,7 @@ class PageTitle extends StatelessWidget { Container( height: context.deviceHeight * 0.123, padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0), - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.white, border: Border( bottom: BorderSide(color: AppColor.border, width: 1.0), @@ -39,13 +39,13 @@ class PageTitle extends StatelessWidget { if (isBack) ...[ GestureDetector( onTap: () => context.router.maybePop(), - child: Icon( + child: const Icon( Icons.arrow_back, color: AppColor.primary, size: 24, ), ), - SpaceWidth(16), + const SpaceWidth(16), ], Expanded( child: Column( diff --git a/lib/presentation/components/picker/date_range_picker.dart b/lib/presentation/components/picker/date_range_picker.dart index dfe9d9b..ca95904 100644 --- a/lib/presentation/components/picker/date_range_picker.dart +++ b/lib/presentation/components/picker/date_range_picker.dart @@ -213,16 +213,9 @@ class _DateRangePickerDialogState extends State<_DateRangePickerDialog> // ── Header ────────────────────────────────────────── Container( padding: const EdgeInsets.all(20), - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - widget.primaryColor, - widget.primaryColor.withOpacity(0.8), - ], - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ), - borderRadius: const BorderRadius.only( + decoration: const BoxDecoration( + color: AppColor.primary, + borderRadius: BorderRadius.only( topLeft: Radius.circular(20), topRight: Radius.circular(20), ), @@ -254,7 +247,7 @@ class _DateRangePickerDialogState extends State<_DateRangePickerDialog> child: SingleChildScrollView( child: Column( children: [ - SpaceHeight(16), + const SpaceHeight(16), // ── TableCalendar ──────────────────────────── Padding( diff --git a/lib/presentation/components/tab/custom_tabbar.dart b/lib/presentation/components/tab/custom_tabbar.dart index 68089d9..7821189 100644 --- a/lib/presentation/components/tab/custom_tabbar.dart +++ b/lib/presentation/components/tab/custom_tabbar.dart @@ -27,7 +27,7 @@ class CustomTabBar extends StatelessWidget { isScrollable: true, tabAlignment: TabAlignment.start, labelColor: AppColor.primary, - labelStyle: TextStyle(fontWeight: FontWeight.bold), + labelStyle: const TextStyle(fontWeight: FontWeight.bold), dividerColor: AppColor.border, unselectedLabelColor: AppColor.primary, indicatorSize: TabBarIndicatorSize.label, diff --git a/lib/presentation/components/widgets/report/report_header.dart b/lib/presentation/components/widgets/report/report_header.dart index 367015f..0e019a8 100644 --- a/lib/presentation/components/widgets/report/report_header.dart +++ b/lib/presentation/components/widgets/report/report_header.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import '../../../../common/data/report_menu.dart'; import '../../../../common/extension/extension.dart'; @@ -32,7 +31,7 @@ class ReportHeader extends StatelessWidget { color: AppColor.textPrimary, ), ), - SpaceHeight(4), + const SpaceHeight(4), Text( menu.subtitle, style: AppStyle.md.copyWith(color: AppColor.textSecondary), diff --git a/lib/presentation/components/widgets/report/report_summary_card.dart b/lib/presentation/components/widgets/report/report_summary_card.dart index 03324a2..6bd1eff 100644 --- a/lib/presentation/components/widgets/report/report_summary_card.dart +++ b/lib/presentation/components/widgets/report/report_summary_card.dart @@ -37,7 +37,7 @@ class ReportSummaryCard extends StatelessWidget { ), child: Icon(icon, color: color, size: 22), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -49,7 +49,7 @@ class ReportSummaryCard extends StatelessWidget { color: AppColor.textPrimary, ), ), - SpaceHeight(4), + const SpaceHeight(4), Text( title, style: AppStyle.sm.copyWith( @@ -58,7 +58,7 @@ class ReportSummaryCard extends StatelessWidget { ), ), if (subtitle != null) ...[ - SpaceHeight(2), + const SpaceHeight(2), Text( subtitle!, style: AppStyle.sm.copyWith( diff --git a/lib/presentation/pages/auth/login/login_page.dart b/lib/presentation/pages/auth/login/login_page.dart index 17e7e8d..f44f7de 100644 --- a/lib/presentation/pages/auth/login/login_page.dart +++ b/lib/presentation/pages/auth/login/login_page.dart @@ -72,15 +72,15 @@ class LoginPage extends StatelessWidget implements AutoRouteWrapper { ), ), const SpaceHeight(20.0), - LoginEmailField(), + const LoginEmailField(), const SpaceHeight(12.0), - LoginPasswordField(), + const LoginPasswordField(), const SpaceHeight(24.0), AppElevatedButton.filled( onPressed: state.isSubmitting ? null : () => context.read().add( - LoginFormEvent.submitted(), + const LoginFormEvent.submitted(), ), textColor: state.isSubmitting ? AppColor.primary diff --git a/lib/presentation/pages/checkout/checkout_page.dart b/lib/presentation/pages/checkout/checkout_page.dart index a3e7522..67bfcfb 100644 --- a/lib/presentation/pages/checkout/checkout_page.dart +++ b/lib/presentation/pages/checkout/checkout_page.dart @@ -33,7 +33,7 @@ class CheckoutPage extends StatelessWidget implements AutoRouteWrapper { (order) { if (context.mounted) { context.read().add( - CheckoutFormEvent.started([]), + const CheckoutFormEvent.started([]), ); context.router.replace(SuccessOrderRoute(order: order)); } @@ -52,7 +52,7 @@ class CheckoutPage extends StatelessWidget implements AutoRouteWrapper { (order) { if (context.mounted) { context.read().add( - CheckoutFormEvent.started([]), + const CheckoutFormEvent.started([]), ); context.router.replace(SuccessOrderRoute(order: order)); } @@ -70,7 +70,7 @@ class CheckoutPage extends StatelessWidget implements AutoRouteWrapper { (f) => AppFlushbar.showOrderFailureToast(context, f), (order) { if (context.mounted) { - context.router.replace(SuccessAddItemOrderRoute()); + context.router.replace(const SuccessAddItemOrderRoute()); } }, ); @@ -103,7 +103,7 @@ class CheckoutPage extends StatelessWidget implements AutoRouteWrapper { price: price, ), ), - SpaceWidth(2), + const SpaceWidth(2), Expanded( flex: 3, child: CheckoutRightPanel( @@ -127,11 +127,16 @@ class CheckoutPage extends StatelessWidget implements AutoRouteWrapper { BlocProvider( create: (context) => getIt() - ..add(PaymentMethodLoaderEvent.fetched(isRefresh: true)), + ..add(const PaymentMethodLoaderEvent.fetched(isRefresh: true)), ), BlocProvider( create: (context) => getIt() - ..add(TableLoaderEvent.fetched(isRefresh: true, status: 'available')), + ..add( + const TableLoaderEvent.fetched( + isRefresh: true, + status: 'available', + ), + ), ), ], child: this, diff --git a/lib/presentation/pages/checkout/widgets/checkout_left_panel.dart b/lib/presentation/pages/checkout/widgets/checkout_left_panel.dart index 3acb220..3ee1e95 100644 --- a/lib/presentation/pages/checkout/widgets/checkout_left_panel.dart +++ b/lib/presentation/pages/checkout/widgets/checkout_left_panel.dart @@ -36,7 +36,7 @@ class CheckoutLeftPanel extends StatelessWidget { padding: const EdgeInsets.all(8.0), child: Text( checkoutState.orderType.value, - style: TextStyle( + style: const TextStyle( color: AppColor.primary, fontSize: 16, fontWeight: FontWeight.w600, @@ -62,7 +62,7 @@ class CheckoutLeftPanel extends StatelessWidget { fontWeight: FontWeight.w600, ), ), - SpaceWidth(160), + const SpaceWidth(160), SizedBox( width: 50.0, child: Text( @@ -95,7 +95,7 @@ class CheckoutLeftPanel extends StatelessWidget { itemCount: checkoutState.items.length, ), ), - DashedDivider(color: AppColor.border), + const DashedDivider(color: AppColor.border), Container( padding: const EdgeInsets.all(16.0), child: Column( @@ -123,7 +123,7 @@ class CheckoutLeftPanel extends StatelessWidget { ], ), const SpaceHeight(8.0), - DashedDivider(color: AppColor.border), + const DashedDivider(color: AppColor.border), const SpaceHeight(8.0), ], ), @@ -168,7 +168,7 @@ class CheckoutLeftPanel extends StatelessWidget { ], ), const SpaceHeight(8.0), - DashedDivider(color: AppColor.border), + const DashedDivider(color: AppColor.border), const SpaceHeight(8.0), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, diff --git a/lib/presentation/pages/checkout/widgets/checkout_right_panel.dart b/lib/presentation/pages/checkout/widgets/checkout_right_panel.dart index cdb05c4..02f8c49 100644 --- a/lib/presentation/pages/checkout/widgets/checkout_right_panel.dart +++ b/lib/presentation/pages/checkout/widgets/checkout_right_panel.dart @@ -67,7 +67,7 @@ class _CheckoutRightPanelState extends State { builder: (context, orderState) { return Column( children: [ - PageTitle( + const PageTitle( title: 'Pembayaran', isBack: false, subtitle: 'Silahkan lakukan pembayaran', @@ -78,7 +78,7 @@ class _CheckoutRightPanelState extends State { children: [ Container( padding: const EdgeInsets.all(16), - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.white, border: Border( bottom: BorderSide( @@ -100,7 +100,7 @@ class _CheckoutRightPanelState extends State { Container( padding: const EdgeInsets.all(16), width: double.infinity, - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.white, border: Border( bottom: BorderSide( @@ -125,7 +125,7 @@ class _CheckoutRightPanelState extends State { >( builder: (context, state) { if (state.isFetching) { - return Center(child: LoaderWithText()); + return const Center(child: LoaderWithText()); } return state.failureOption.fold( () => Wrap( @@ -172,7 +172,7 @@ class _CheckoutRightPanelState extends State { orderState.paymentMethod!.type == 'cash') Container( padding: const EdgeInsets.all(16), - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.white, border: Border( bottom: BorderSide( @@ -261,8 +261,8 @@ class _CheckoutRightPanelState extends State { ), ), Container( - padding: EdgeInsets.all(16), - decoration: BoxDecoration( + padding: const EdgeInsets.all(16), + decoration: const BoxDecoration( color: AppColor.white, border: Border( top: BorderSide(color: AppColor.border, width: 1.0), @@ -276,7 +276,7 @@ class _CheckoutRightPanelState extends State { label: 'Batalkan', ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: BlocBuilder( builder: (context, tableState) { @@ -304,7 +304,7 @@ class _CheckoutRightPanelState extends State { }, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: AppElevatedButton.filled( isLoading: orderState.isCreatingWithPayment, diff --git a/lib/presentation/pages/main/main_page.dart b/lib/presentation/pages/main/main_page.dart index 5f031ba..b82c824 100644 --- a/lib/presentation/pages/main/main_page.dart +++ b/lib/presentation/pages/main/main_page.dart @@ -49,7 +49,7 @@ class _MainPageState extends State { ); }, child: AutoTabsRouter( - routes: [ + routes: const [ HomeRoute(), TableRoute(), ReportRoute(), @@ -83,7 +83,7 @@ class _MainPageState extends State { ), minExtendedWidth: 56, leading: Padding( - padding: EdgeInsets.all(8.0), + padding: const EdgeInsets.all(8.0), child: Assets.images.logoWhite.image( width: 40, height: 40, @@ -103,7 +103,8 @@ class _MainPageState extends State { onPressed: () { showDialog( context: context, - builder: (context) => LogoutModalDialog(), + builder: (context) => + const LogoutModalDialog(), ); }, tooltip: 'Logout', diff --git a/lib/presentation/pages/main/pages/customer/customer_page.dart b/lib/presentation/pages/main/pages/customer/customer_page.dart index d765984..348ffbf 100644 --- a/lib/presentation/pages/main/pages/customer/customer_page.dart +++ b/lib/presentation/pages/main/pages/customer/customer_page.dart @@ -1,4 +1,3 @@ -import 'package:apskel_pos_flutter_v2/domain/customer/customer.dart'; import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -6,6 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../../../application/customer/customer_loader/customer_loader_bloc.dart'; import '../../../../../common/extension/extension.dart'; import '../../../../../common/theme/theme.dart'; +import '../../../../../domain/customer/customer.dart'; import '../../../../../injection.dart'; import '../../../../components/border/dashed_border.dart'; import '../../../../components/card/customer_card.dart'; @@ -32,10 +32,10 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { color: AppColor.white, child: Column( children: [ - PageTitle(title: 'Daftar Pelanggan'), + const PageTitle(title: 'Daftar Pelanggan'), Expanded( child: state.isFetching - ? Center(child: const LoaderWithText()) + ? const Center(child: LoaderWithText()) : state.failureOrOption.fold( () => ListView.builder( itemCount: state.customers.length, @@ -91,7 +91,7 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { ), child: Column( children: [ - CircleAvatar( + const CircleAvatar( radius: 24, backgroundColor: AppColor.primary, child: Icon( @@ -102,7 +102,7 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { const SizedBox(height: 12), Text( state.selectedCustomer?.name ?? "", - style: TextStyle( + style: const TextStyle( fontSize: 16.0, fontWeight: FontWeight.bold, ), @@ -110,7 +110,7 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { ], ), ), - DashedDivider(color: AppColor.border), + const DashedDivider(color: AppColor.border), Padding( padding: const EdgeInsets.symmetric( horizontal: 12.0, @@ -122,7 +122,7 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( + const Text( 'No. Handphone', style: TextStyle(fontSize: 12.0), ), @@ -135,19 +135,19 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { ? "-" : state.selectedCustomer?.phone ?? "-", - style: TextStyle( + style: const TextStyle( fontSize: 12.0, fontWeight: FontWeight.w600, ), ), ], ), - SpaceHeight(8), + const SpaceHeight(8), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( + const Text( 'Email', style: TextStyle(fontSize: 12.0), ), @@ -160,19 +160,19 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { ? "-" : state.selectedCustomer?.email ?? "-", - style: TextStyle( + style: const TextStyle( fontSize: 12.0, fontWeight: FontWeight.w600, ), ), ], ), - SpaceHeight(8), + const SpaceHeight(8), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( + const Text( 'Alamat', style: TextStyle(fontSize: 12.0), ), @@ -187,7 +187,7 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { .selectedCustomer ?.address ?? "-", - style: TextStyle( + style: const TextStyle( fontSize: 12.0, fontWeight: FontWeight.w600, ), @@ -216,7 +216,7 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { message: "Terjadi kesalahan saat memuat pelanggan", onTap: () { context.read().add( - CustomerLoaderEvent.fetched(isRefresh: true), + const CustomerLoaderEvent.fetched(isRefresh: true), ); }, ), @@ -225,7 +225,7 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { message: "Pelanggan masih kosong, silahkan tambahkan pelanggan", onTap: () { context.read().add( - CustomerLoaderEvent.fetched(isRefresh: true), + const CustomerLoaderEvent.fetched(isRefresh: true), ); }, ), @@ -234,7 +234,7 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { message: "Terjadi kesalahan saat memuat pelanggan", onTap: () { context.read().add( - CustomerLoaderEvent.fetched(isRefresh: true), + const CustomerLoaderEvent.fetched(isRefresh: true), ); }, ), @@ -243,7 +243,7 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { message: value.erroMessage, onTap: () { context.read().add( - CustomerLoaderEvent.fetched(isRefresh: true), + const CustomerLoaderEvent.fetched(isRefresh: true), ); }, ), @@ -252,7 +252,7 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { message: "Terjadi kesalahan saat memuat pelanggan", onTap: () { context.read().add( - CustomerLoaderEvent.fetched(isRefresh: true), + const CustomerLoaderEvent.fetched(isRefresh: true), ); }, ), @@ -263,7 +263,7 @@ class CustomerPage extends StatelessWidget implements AutoRouteWrapper { Widget wrappedRoute(BuildContext context) => BlocProvider( create: (context) => getIt() - ..add(CustomerLoaderEvent.fetched(isRefresh: true)), + ..add(const CustomerLoaderEvent.fetched(isRefresh: true)), child: this, ); } diff --git a/lib/presentation/pages/main/pages/home/home_page.dart b/lib/presentation/pages/main/pages/home/home_page.dart index 8ae2600..31a5476 100644 --- a/lib/presentation/pages/main/pages/home/home_page.dart +++ b/lib/presentation/pages/main/pages/home/home_page.dart @@ -15,7 +15,7 @@ class HomePage extends StatelessWidget implements AutoRouteWrapper { @override Widget build(BuildContext context) { - return Hero( + return const Hero( tag: 'confirmation_screen', child: Scaffold( backgroundColor: AppColor.white, @@ -41,11 +41,12 @@ class HomePage extends StatelessWidget implements AutoRouteWrapper { BlocProvider( create: (context) => getIt() - ..add(CategoryLoaderEvent.getCategories()), + ..add(const CategoryLoaderEvent.getCategories()), ), BlocProvider( create: (context) => - getIt()..add(ProductLoaderEvent.getProduct()), + getIt() + ..add(const ProductLoaderEvent.getProduct()), ), ], child: this, diff --git a/lib/presentation/pages/main/pages/home/widgets/category_tabbar.dart b/lib/presentation/pages/main/pages/home/widgets/category_tabbar.dart index 6fe5ad0..75b9862 100644 --- a/lib/presentation/pages/main/pages/home/widgets/category_tabbar.dart +++ b/lib/presentation/pages/main/pages/home/widgets/category_tabbar.dart @@ -35,7 +35,7 @@ class _CategoryTabBarState extends State if (_tabController.indexIsChanging) { if (_tabController.index == 0) { context.read().add( - ProductLoaderEvent.getProduct(), + const ProductLoaderEvent.getProduct(), ); } else { selectedCategoryId = widget.categories[_tabController.index].id; @@ -64,7 +64,7 @@ class _CategoryTabBarState extends State if (_tabController.indexIsChanging) { if (_tabController.index == 0) { context.read().add( - ProductLoaderEvent.getProduct(), + const ProductLoaderEvent.getProduct(), ); } else { selectedCategoryId = widget.categories[_tabController.index].id; @@ -99,7 +99,7 @@ class _CategoryTabBarState extends State isScrollable: true, tabAlignment: TabAlignment.start, labelColor: AppColor.primary, - labelStyle: TextStyle(fontWeight: FontWeight.bold), + labelStyle: const TextStyle(fontWeight: FontWeight.bold), dividerColor: AppColor.primary, unselectedLabelColor: AppColor.primary, indicatorSize: TabBarIndicatorSize.label, diff --git a/lib/presentation/pages/main/pages/home/widgets/home_left_panel.dart b/lib/presentation/pages/main/pages/home/widgets/home_left_panel.dart index e97bf85..bd2b7e0 100644 --- a/lib/presentation/pages/main/pages/home/widgets/home_left_panel.dart +++ b/lib/presentation/pages/main/pages/home/widgets/home_left_panel.dart @@ -33,7 +33,9 @@ class _HomeLeftPanelState extends State { if (notification is ScrollEndNotification && scrollController.position.extentAfter == 0) { log('📄 Loading more products...'); - context.read().add(ProductLoaderEvent.loadMore()); + context.read().add( + const ProductLoaderEvent.loadMore(), + ); return true; } return false; @@ -44,7 +46,7 @@ class _HomeLeftPanelState extends State { return BlocBuilder( builder: (context, state) { if (state.isLoadingMore) { - return Center(child: LoaderWithText()); + return const Center(child: LoaderWithText()); } return state.failureOptionCategory.fold( () => _buildContent(context, state.categories), @@ -53,42 +55,42 @@ class _HomeLeftPanelState extends State { title: 'Error Kategori', message: 'Terjadi kesalahan saat memuat kategori', onTap: () => context.read().add( - CategoryLoaderEvent.getCategories(), + const CategoryLoaderEvent.getCategories(), ), ), dynamicErrorMessage: (value) => ErrorCard( title: 'Error Kategori', message: value.erroMessage, onTap: () => context.read().add( - CategoryLoaderEvent.getCategories(), + const CategoryLoaderEvent.getCategories(), ), ), localStorageError: (value) => ErrorCard( title: 'Error Kategori', message: value.erroMessage, onTap: () => context.read().add( - CategoryLoaderEvent.getCategories(), + const CategoryLoaderEvent.getCategories(), ), ), serverError: (value) => ErrorCard( title: 'Error Kategori', message: 'Terjadi kesalahan saat memuat kategori', onTap: () => context.read().add( - CategoryLoaderEvent.getCategories(), + const CategoryLoaderEvent.getCategories(), ), ), unexpectedError: (value) => ErrorCard( title: 'Error Kategori', message: 'Terjadi kesalahan saat memuat kategori', onTap: () => context.read().add( - CategoryLoaderEvent.getCategories(), + const CategoryLoaderEvent.getCategories(), ), ), empty: (value) => ErrorCard( title: 'Error Kategori', message: 'Kategori kosong', onTap: () => context.read().add( - CategoryLoaderEvent.getCategories(), + const CategoryLoaderEvent.getCategories(), ), ), ), @@ -108,7 +110,7 @@ class _HomeLeftPanelState extends State { }); // Fast local search - Future.delayed(Duration(milliseconds: 200), () { + Future.delayed(const Duration(milliseconds: 200), () { if (value == searchController.text) { log('🔍 Local search: "$value"'); context.read().add( @@ -139,7 +141,7 @@ class _HomeLeftPanelState extends State { title: 'Error Produk', message: 'Terjadi kesalahan saat memuat produk', onTap: () => context.read().add( - ProductLoaderEvent.getProduct(), + const ProductLoaderEvent.getProduct(), ), ), ), @@ -165,7 +167,7 @@ class _HomeLeftPanelState extends State { children: [ if (products.isNotEmpty) Container( - padding: EdgeInsets.symmetric( + padding: const EdgeInsets.symmetric( horizontal: 16, vertical: 0, ).copyWith(bottom: 6), @@ -175,9 +177,9 @@ class _HomeLeftPanelState extends State { '${products.length} produk ditemukan', style: AppStyle.sm.copyWith(color: AppColor.textSecondary), ), - Spacer(), + const Spacer(), if (isLoadingMore) - SizedBox( + const SizedBox( width: 12, height: 12, child: SpinKitFadingCircle( @@ -198,7 +200,7 @@ class _HomeLeftPanelState extends State { controller: scrollController, padding: const EdgeInsets.all(16), cacheExtent: 200.0, - gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( + gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: 180, mainAxisSpacing: 30, crossAxisSpacing: 30, @@ -212,7 +214,7 @@ class _HomeLeftPanelState extends State { if (hasReachedMax && products.isNotEmpty) Container( - padding: EdgeInsets.all(8), + padding: const EdgeInsets.all(8), child: Text( 'Semua produk telah dimuat', style: AppStyle.sm.copyWith( diff --git a/lib/presentation/pages/main/pages/home/widgets/home_right_panel.dart b/lib/presentation/pages/main/pages/home/widgets/home_right_panel.dart index 4a4f30b..2b042ca 100644 --- a/lib/presentation/pages/main/pages/home/widgets/home_right_panel.dart +++ b/lib/presentation/pages/main/pages/home/widgets/home_right_panel.dart @@ -37,7 +37,7 @@ class HomeRightPanel extends StatelessWidget { color: Colors.white, child: Column( children: [ - HomeRightTitle(), + const HomeRightTitle(), Padding( padding: const EdgeInsets.all( 16.0, @@ -54,7 +54,7 @@ class HomeRightPanel extends StatelessWidget { fontWeight: FontWeight.w600, ), ), - SizedBox(width: 130), + const SizedBox(width: 130), SizedBox( width: 50.0, child: Text( @@ -140,7 +140,7 @@ class HomeRightPanel extends StatelessWidget { ), ], ), - SpaceHeight(16.0), + const SpaceHeight(16.0), Align( alignment: Alignment.bottomCenter, child: AppElevatedButton.filled( @@ -164,7 +164,7 @@ class HomeRightPanel extends StatelessWidget { ); return; } - context.router.push(CheckoutRoute()); + context.router.push(const CheckoutRoute()); }, label: 'Lanjutkan Pembayaran', ), diff --git a/lib/presentation/pages/main/pages/home/widgets/home_right_title.dart b/lib/presentation/pages/main/pages/home/widgets/home_right_title.dart index c90420a..e54a836 100644 --- a/lib/presentation/pages/main/pages/home/widgets/home_right_title.dart +++ b/lib/presentation/pages/main/pages/home/widgets/home_right_title.dart @@ -19,9 +19,9 @@ class HomeRightTitle extends StatelessWidget { return BlocBuilder( builder: (context, state) { return Container( - padding: EdgeInsets.only(top: 20), + padding: const EdgeInsets.only(top: 20), height: context.deviceHeight * 0.15, - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.primary, border: Border(left: BorderSide(color: Colors.white, width: 1.0)), ), @@ -47,7 +47,7 @@ class HomeRightTitle extends StatelessWidget { showDialog( context: context, builder: (context) { - return OrderTypeDialog(); + return const OrderTypeDialog(); }, ); }, @@ -66,7 +66,7 @@ class HomeRightTitle extends StatelessWidget { ); }, ), - OrderType.takeAway => SizedBox.shrink(), + OrderType.takeAway => const SizedBox.shrink(), OrderType.delivery => _buildButton( state.delivery == null ? 'Pilih Pengiriman' @@ -76,12 +76,12 @@ class HomeRightTitle extends StatelessWidget { showDialog( context: context, builder: (context) { - return DeliveryDialog(); + return const DeliveryDialog(); }, ); }, ), - OrderType.freeTable => SizedBox.shrink(), + OrderType.freeTable => const SizedBox.shrink(), }, ], ), diff --git a/lib/presentation/pages/main/pages/home/widgets/home_title.dart b/lib/presentation/pages/main/pages/home/widgets/home_title.dart index c917f47..998922f 100644 --- a/lib/presentation/pages/main/pages/home/widgets/home_title.dart +++ b/lib/presentation/pages/main/pages/home/widgets/home_title.dart @@ -21,7 +21,7 @@ class HomeTitle extends StatelessWidget { horizontal: 16.0, vertical: 0, ).copyWith(top: 20), - decoration: BoxDecoration(color: AppColor.white), + decoration: const BoxDecoration(color: AppColor.white), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -30,7 +30,7 @@ class HomeTitle extends StatelessWidget { return GestureDetector( onTap: () => showDialog( context: context, - builder: (context) => OutletDialog(), + builder: (context) => const OutletDialog(), ), child: Row( mainAxisSize: MainAxisSize.min, @@ -44,8 +44,8 @@ class HomeTitle extends StatelessWidget { fontWeight: FontWeight.w600, ), ), - SpaceWidth(2), - Icon( + const SpaceWidth(2), + const Icon( Icons.keyboard_arrow_down, color: AppColor.primary, size: 18, diff --git a/lib/presentation/pages/main/pages/report/report_page.dart b/lib/presentation/pages/main/pages/report/report_page.dart index 3b86125..57ddd30 100644 --- a/lib/presentation/pages/main/pages/report/report_page.dart +++ b/lib/presentation/pages/main/pages/report/report_page.dart @@ -64,9 +64,9 @@ class ReportPage extends StatelessWidget implements AutoRouteWrapper { ); }, ), - SpaceWidth(8), + const SpaceWidth(8), AppIconButton(icons: Icons.download_outlined, onTap: () {}), - SpaceWidth(8), + const SpaceWidth(8), AppIconButton( icons: Icons.refresh_outlined, onTap: () => onFetched(context, state), diff --git a/lib/presentation/pages/main/pages/report/sections/report_category_section.dart b/lib/presentation/pages/main/pages/report/sections/report_category_section.dart index e056f56..76ca030 100644 --- a/lib/presentation/pages/main/pages/report/sections/report_category_section.dart +++ b/lib/presentation/pages/main/pages/report/sections/report_category_section.dart @@ -43,10 +43,10 @@ class ReportCategorySection extends StatelessWidget { endDate: endDate, startDate: startDate, ), - SpaceHeight(16), + const SpaceHeight(16), _buildSummary(state), Container( - margin: EdgeInsets.only(top: 16), + margin: const EdgeInsets.only(top: 16), decoration: BoxDecoration( color: AppColor.white, borderRadius: BorderRadius.circular(14), @@ -56,7 +56,7 @@ class ReportCategorySection extends StatelessWidget { Container( decoration: BoxDecoration( color: AppColor.disabled.withOpacity(0.8), - borderRadius: BorderRadius.vertical( + borderRadius: const BorderRadius.vertical( top: Radius.circular(14), ), ), @@ -113,7 +113,7 @@ class ReportCategorySection extends StatelessWidget { ), ), Container( - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.white, borderRadius: BorderRadius.vertical( bottom: Radius.circular(14), @@ -246,7 +246,7 @@ class ReportCategorySection extends StatelessWidget { value: state.categoryAnalytic.totalRevenue.currencyFormatRpV2, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.info, @@ -255,7 +255,7 @@ class ReportCategorySection extends StatelessWidget { value: "${state.categoryAnalytic.totalQuantity} pcs", ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.primary, diff --git a/lib/presentation/pages/main/pages/report/sections/report_dashboard_section.dart b/lib/presentation/pages/main/pages/report/sections/report_dashboard_section.dart index be3257d..aa95007 100644 --- a/lib/presentation/pages/main/pages/report/sections/report_dashboard_section.dart +++ b/lib/presentation/pages/main/pages/report/sections/report_dashboard_section.dart @@ -70,7 +70,7 @@ class ReportDashboardSection extends StatelessWidget { ), ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( flex: 1, child: ReportDashboardProductChart( @@ -91,7 +91,7 @@ class ReportDashboardSection extends StatelessWidget { data: state.dashboardAnalytic.topProducts, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( flex: 1, child: ReportDashboardOrder(data: state.dashboardAnalytic), @@ -139,7 +139,7 @@ class ReportDashboardSection extends StatelessWidget { .currencyFormatRpV2, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.info, @@ -151,7 +151,7 @@ class ReportDashboardSection extends StatelessWidget { ), ], ), - SpaceHeight(12), + const SpaceHeight(12), Row( children: [ Expanded( @@ -166,7 +166,7 @@ class ReportDashboardSection extends StatelessWidget { .currencyFormatRpV2, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.primary, diff --git a/lib/presentation/pages/main/pages/report/sections/report_inventory_section.dart b/lib/presentation/pages/main/pages/report/sections/report_inventory_section.dart index acc4a16..3b98187 100644 --- a/lib/presentation/pages/main/pages/report/sections/report_inventory_section.dart +++ b/lib/presentation/pages/main/pages/report/sections/report_inventory_section.dart @@ -51,7 +51,7 @@ class _ReportInventorySectionState extends State { return Future.value(); }, child: ListView( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), children: [ ReportHeader( menu: widget.menu, @@ -64,12 +64,12 @@ class _ReportInventorySectionState extends State { child: Row( children: [ _buildTab('Produk', 0), - SpaceWidth(12), + const SpaceWidth(12), _buildTab('Bahan Baku', 1), ], ), ), - SpaceHeight(16), + const SpaceHeight(16), _selectedTabIndex == 0 ? ReportInventoryProductTab( @@ -98,7 +98,7 @@ class _ReportInventorySectionState extends State { Padding _buildSummary() { return Padding( - padding: EdgeInsetsGeometry.only(top: 16), + padding: const EdgeInsetsGeometry.only(top: 16), child: Row( children: [ Expanded( @@ -110,7 +110,7 @@ class _ReportInventorySectionState extends State { .toString(), ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.info, @@ -120,7 +120,7 @@ class _ReportInventorySectionState extends State { .toString(), ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.primary, diff --git a/lib/presentation/pages/main/pages/report/sections/report_payment_method_section.dart b/lib/presentation/pages/main/pages/report/sections/report_payment_method_section.dart index d04161c..3537fa8 100644 --- a/lib/presentation/pages/main/pages/report/sections/report_payment_method_section.dart +++ b/lib/presentation/pages/main/pages/report/sections/report_payment_method_section.dart @@ -43,13 +43,13 @@ class ReportPaymentMethodSection extends StatelessWidget { return Future.value(); }, child: ListView( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), children: [ ReportHeader(menu: menu, endDate: endDate, startDate: startDate), _buildSummary(), Container( padding: const EdgeInsets.all(12), - margin: EdgeInsets.only(top: 16), + margin: const EdgeInsets.only(top: 16), decoration: BoxDecoration( color: AppColor.white, borderRadius: BorderRadius.circular(14), @@ -65,7 +65,7 @@ class ReportPaymentMethodSection extends StatelessWidget { ), ), - SpaceHeight(16), + const SpaceHeight(16), ...List.generate(state.paymentMethodAnalytic.data.length, ( index, @@ -115,10 +115,10 @@ class ReportPaymentMethodSection extends StatelessWidget { borderRadius: BorderRadius.circular(8), border: Border.all(color: AppColor.primary, width: 1), ), - child: Icon(Icons.money, color: AppColor.white, size: 20), + child: const Icon(Icons.money, color: AppColor.white, size: 20), ), - SpaceWidth(16), + const SpaceWidth(16), // Payment Method Details Expanded( @@ -145,7 +145,7 @@ class ReportPaymentMethodSection extends StatelessWidget { ], ), - SpaceHeight(8), + const SpaceHeight(8), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -167,7 +167,7 @@ class ReportPaymentMethodSection extends StatelessWidget { ], ), - SpaceHeight(8), + const SpaceHeight(8), // Progress Bar Container( @@ -215,7 +215,7 @@ class ReportPaymentMethodSection extends StatelessWidget { .currencyFormatRpV2, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.info, @@ -227,7 +227,7 @@ class ReportPaymentMethodSection extends StatelessWidget { ), ], ), - SpaceHeight(12), + const SpaceHeight(12), Row( children: [ Expanded( @@ -242,7 +242,7 @@ class ReportPaymentMethodSection extends StatelessWidget { .currencyFormatRpV2, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.info, diff --git a/lib/presentation/pages/main/pages/report/sections/report_product_section.dart b/lib/presentation/pages/main/pages/report/sections/report_product_section.dart index 0fe2a1d..42ac4be 100644 --- a/lib/presentation/pages/main/pages/report/sections/report_product_section.dart +++ b/lib/presentation/pages/main/pages/report/sections/report_product_section.dart @@ -46,7 +46,7 @@ class ReportProductSection extends StatelessWidget { return Future.value(); }, child: SingleChildScrollView( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), child: Column( children: [ ReportHeader( @@ -56,7 +56,7 @@ class ReportProductSection extends StatelessWidget { ), Container( height: 90, - margin: EdgeInsets.only(top: 16), + margin: const EdgeInsets.only(top: 16), child: ListView.builder( scrollDirection: Axis.horizontal, itemCount: state.productAnalytic.categories.length, @@ -85,7 +85,7 @@ class ReportProductSection extends StatelessWidget { ), ), Container( - margin: EdgeInsets.only(top: 16), + margin: const EdgeInsets.only(top: 16), padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: AppColor.white, @@ -127,7 +127,7 @@ class ReportProductSection extends StatelessWidget { ), ], ), - SpaceHeight(12), + const SpaceHeight(12), ListView.builder( itemCount: state.productAnalytic.data.length, shrinkWrap: true, @@ -172,8 +172,8 @@ class ReportProductSection extends StatelessWidget { Widget _buildBottomSummary() { return Container( - padding: EdgeInsets.symmetric(vertical: 8, horizontal: 16), - decoration: BoxDecoration(color: AppColor.white), + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), + decoration: const BoxDecoration(color: AppColor.white), child: Column( children: [ Container( @@ -185,7 +185,7 @@ class ReportProductSection extends StatelessWidget { ), child: Row( children: [ - Icon(Icons.star, color: AppColor.success, size: 16), + const Icon(Icons.star, color: AppColor.success, size: 16), const SizedBox(width: 8), Expanded( child: Text( @@ -244,7 +244,7 @@ class ReportProductSection extends StatelessWidget { ), ), - SpaceWidth(12), + const SpaceWidth(12), // Product Info Expanded( @@ -296,7 +296,7 @@ class ReportProductSection extends StatelessWidget { ), ], ), - SpaceHeight(6), + const SpaceHeight(6), Row( children: [ // Category Badge diff --git a/lib/presentation/pages/main/pages/report/sections/report_profit_loss_section.dart b/lib/presentation/pages/main/pages/report/sections/report_profit_loss_section.dart index edad7b5..88f7de0 100644 --- a/lib/presentation/pages/main/pages/report/sections/report_profit_loss_section.dart +++ b/lib/presentation/pages/main/pages/report/sections/report_profit_loss_section.dart @@ -47,7 +47,7 @@ class ReportProfitLossSection extends StatelessWidget { return Future.value(); }, child: ListView( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), children: [ ReportHeader(menu: menu, endDate: endDate, startDate: startDate), _buildSummary(), @@ -63,7 +63,7 @@ class ReportProfitLossSection extends StatelessWidget { data: state.profitLossAnalytic.productData, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( flex: 2, child: ReportProfitLossBreakdown( @@ -111,7 +111,7 @@ class ReportProfitLossSection extends StatelessWidget { .currencyFormatRpV2, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.info, @@ -124,7 +124,7 @@ class ReportProfitLossSection extends StatelessWidget { ), ], ), - SpaceHeight(12), + const SpaceHeight(12), Row( children: [ Expanded( @@ -137,7 +137,7 @@ class ReportProfitLossSection extends StatelessWidget { .currencyFormatRpV2, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.primary, diff --git a/lib/presentation/pages/main/pages/report/sections/report_sales_section.dart b/lib/presentation/pages/main/pages/report/sections/report_sales_section.dart index 1b6608f..2ae1641 100644 --- a/lib/presentation/pages/main/pages/report/sections/report_sales_section.dart +++ b/lib/presentation/pages/main/pages/report/sections/report_sales_section.dart @@ -43,12 +43,12 @@ class ReportSalesSection extends StatelessWidget { return Future.value(); }, child: ListView( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), children: [ ReportHeader(menu: menu, endDate: endDate, startDate: startDate), _buildSummary(), Container( - margin: EdgeInsets.only(top: 16), + margin: const EdgeInsets.only(top: 16), padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: AppColor.white, @@ -64,7 +64,7 @@ class ReportSalesSection extends StatelessWidget { color: AppColor.textPrimary, ), ), - SpaceHeight(12), + const SpaceHeight(12), ListView.builder( itemCount: state.salesAnalytic.sortedDailyData.length, shrinkWrap: true, @@ -85,7 +85,7 @@ class ReportSalesSection extends StatelessWidget { ], ), ), - SpaceHeight(16), + const SpaceHeight(16), _buildSummaryFooter(), ], ), @@ -118,7 +118,7 @@ class ReportSalesSection extends StatelessWidget { Container( width: 8, height: 8, - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.success, shape: BoxShape.circle, ), @@ -127,10 +127,10 @@ class ReportSalesSection extends StatelessWidget { Expanded( child: Text( 'Kinerja puncak pada ${state.salesAnalytic.highestRevenueDay.date.toSimpleMonthDate()} dengan pendapatan ${state.salesAnalytic.highestRevenueDay.sales.currencyFormatRpV2} (pesanan ${state.salesAnalytic.highestRevenueDay.orders})', - style: TextStyle( + style: const TextStyle( fontSize: 13, fontWeight: FontWeight.w500, - color: const Color(0xFF374151), + color: Color(0xFF374151), ), ), ), @@ -159,17 +159,17 @@ class ReportSalesSection extends StatelessWidget { ), child: Row( children: [ - Container( + SizedBox( width: 60, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( date, - style: TextStyle( + style: const TextStyle( fontSize: 14, fontWeight: FontWeight.w600, - color: const Color(0xFF111827), + color: Color(0xFF111827), ), ), if (isHighest) @@ -183,7 +183,7 @@ class ReportSalesSection extends StatelessWidget { color: const Color(0xFF10B981), borderRadius: BorderRadius.circular(4), ), - child: Text( + child: const Text( 'TOP', style: TextStyle( fontSize: 8, @@ -203,18 +203,18 @@ class ReportSalesSection extends StatelessWidget { children: [ Text( sales, - style: TextStyle( + style: const TextStyle( fontSize: 15, fontWeight: FontWeight.w600, - color: const Color(0xFF111827), + color: Color(0xFF111827), ), ), - Text( + const Text( 'Pendapatan', style: TextStyle( fontSize: 11, fontWeight: FontWeight.w400, - color: const Color(0xFF6B7280), + color: Color(0xFF6B7280), ), ), ], @@ -227,18 +227,18 @@ class ReportSalesSection extends StatelessWidget { children: [ Text( '$orders pesanan', - style: TextStyle( + style: const TextStyle( fontSize: 13, fontWeight: FontWeight.w500, - color: const Color(0xFF374151), + color: Color(0xFF374151), ), ), Text( '$items item', - style: TextStyle( + style: const TextStyle( fontSize: 11, fontWeight: FontWeight.w400, - color: const Color(0xFF6B7280), + color: Color(0xFF6B7280), ), ), ], @@ -265,7 +265,7 @@ class ReportSalesSection extends StatelessWidget { state.salesAnalytic.summary.totalSales.currencyFormatRpV2, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.info, @@ -276,7 +276,7 @@ class ReportSalesSection extends StatelessWidget { ), ], ), - SpaceHeight(12), + const SpaceHeight(12), ReportSummaryCard( color: AppColor.primary, icon: Icons.attach_money_outlined, diff --git a/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_order.dart b/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_order.dart index 8f4f83a..e5dfc5d 100644 --- a/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_order.dart +++ b/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_order.dart @@ -32,7 +32,7 @@ class ReportDashboardOrder extends StatelessWidget { color: AppColor.textPrimary, ), ), - SpaceHeight(20), + const SpaceHeight(20), _buildSummaryItem( 'Total Pesanan', '${data.overview.totalOrders}', diff --git a/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_product_chart.dart b/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_product_chart.dart index 49db1b9..434854b 100644 --- a/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_product_chart.dart +++ b/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_product_chart.dart @@ -35,7 +35,7 @@ class ReportDashboardProductChart extends StatelessWidget { color: AppColor.textPrimary, ), ), - SpaceHeight(12), + const SpaceHeight(12), SizedBox( height: 160, child: PieChart( @@ -57,7 +57,7 @@ class ReportDashboardProductChart extends StatelessWidget { ), ), ), - SpaceHeight(16), + const SpaceHeight(16), Column( children: data.take(3).map((product) { final index = data.indexOf(product); diff --git a/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_sales_chart.dart b/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_sales_chart.dart index 00487b5..7ac6c24 100644 --- a/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_sales_chart.dart +++ b/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_sales_chart.dart @@ -51,7 +51,7 @@ class ReportDashboardSalesChart extends StatelessWidget { color: AppColor.textPrimary, ), ), - SpaceHeight(12), + const SpaceHeight(12), SizedBox( height: 220, child: LineChart( diff --git a/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_top_product.dart b/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_top_product.dart index e310fd4..81763b1 100644 --- a/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_top_product.dart +++ b/lib/presentation/pages/main/pages/report/widgets/dashboard/report_dashboard_top_product.dart @@ -27,7 +27,7 @@ class ReportDashboardTopProduct extends StatelessWidget { color: AppColor.textPrimary, ), ), - SpaceHeight(16), + const SpaceHeight(16), Column( children: data.map((product) { return Container( @@ -50,7 +50,7 @@ class ReportDashboardTopProduct extends StatelessWidget { fontWeight: FontWeight.w600, ), ), - SpaceHeight(2), + const SpaceHeight(2), Text( product.categoryName, style: AppStyle.sm.copyWith( diff --git a/lib/presentation/pages/main/pages/report/widgets/inventory/report_inventory_ingredient_tab.dart b/lib/presentation/pages/main/pages/report/widgets/inventory/report_inventory_ingredient_tab.dart index 671813b..1173a25 100644 --- a/lib/presentation/pages/main/pages/report/widgets/inventory/report_inventory_ingredient_tab.dart +++ b/lib/presentation/pages/main/pages/report/widgets/inventory/report_inventory_ingredient_tab.dart @@ -23,7 +23,7 @@ class ReportInventoryIngredientTab extends StatelessWidget { value: data.summary.lowStockIngredients.toString(), ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.error, @@ -32,7 +32,7 @@ class ReportInventoryIngredientTab extends StatelessWidget { value: data.summary.zeroStockIngredients.toString(), ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.error, @@ -44,8 +44,8 @@ class ReportInventoryIngredientTab extends StatelessWidget { ], ), Container( - margin: EdgeInsets.only(top: 16), - decoration: BoxDecoration( + margin: const EdgeInsets.only(top: 16), + decoration: const BoxDecoration( color: AppColor.primary, // Purple color borderRadius: BorderRadius.only( topLeft: Radius.circular(8), @@ -72,9 +72,9 @@ class ReportInventoryIngredientTab extends StatelessWidget { ), ), Container( - decoration: BoxDecoration(color: AppColor.white), + decoration: const BoxDecoration(color: AppColor.white), child: Table( - columnWidths: { + columnWidths: const { 0: FlexColumnWidth(2.5), // Name 1: FlexColumnWidth(1), // Stock 2: FlexColumnWidth(2), // Masuk @@ -91,7 +91,7 @@ class ReportInventoryIngredientTab extends StatelessWidget { ), ), Container( - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.primary, // Purple color borderRadius: BorderRadius.only( bottomLeft: Radius.circular(8), @@ -165,7 +165,7 @@ class ReportInventoryIngredientTab extends StatelessWidget { Color? textColor, }) { return Container( - padding: EdgeInsets.symmetric(horizontal: 12, vertical: 16), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16), alignment: alignment, child: Text( text, @@ -182,7 +182,7 @@ class ReportInventoryIngredientTab extends StatelessWidget { Widget _buildHeaderCell(String text) { return Container( - padding: EdgeInsets.symmetric(horizontal: 12, vertical: 16), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16), child: Text( text, style: AppStyle.sm.copyWith( @@ -196,7 +196,7 @@ class ReportInventoryIngredientTab extends StatelessWidget { Widget _buildTotalCell(String text) { return Container( - padding: EdgeInsets.symmetric(horizontal: 12, vertical: 16), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16), child: Text( text, style: AppStyle.sm.copyWith( diff --git a/lib/presentation/pages/main/pages/report/widgets/inventory/report_inventory_product_tab.dart b/lib/presentation/pages/main/pages/report/widgets/inventory/report_inventory_product_tab.dart index 1fa677c..98733c5 100644 --- a/lib/presentation/pages/main/pages/report/widgets/inventory/report_inventory_product_tab.dart +++ b/lib/presentation/pages/main/pages/report/widgets/inventory/report_inventory_product_tab.dart @@ -23,7 +23,7 @@ class ReportInventoryProductTab extends StatelessWidget { value: data.summary.lowStockProducts.toString(), ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.error, @@ -32,7 +32,7 @@ class ReportInventoryProductTab extends StatelessWidget { value: data.summary.zeroStockProducts.toString(), ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: ReportSummaryCard( color: AppColor.error, @@ -44,8 +44,8 @@ class ReportInventoryProductTab extends StatelessWidget { ], ), Container( - margin: EdgeInsets.only(top: 16), - decoration: BoxDecoration( + margin: const EdgeInsets.only(top: 16), + decoration: const BoxDecoration( color: AppColor.primary, // Purple color borderRadius: BorderRadius.only( topLeft: Radius.circular(8), @@ -74,9 +74,9 @@ class ReportInventoryProductTab extends StatelessWidget { ), ), Container( - decoration: BoxDecoration(color: AppColor.white), + decoration: const BoxDecoration(color: AppColor.white), child: Table( - columnWidths: { + columnWidths: const { 0: FlexColumnWidth(2.5), // Produk 1: FlexColumnWidth(2), // Kategori 2: FlexColumnWidth(1), // Stock @@ -94,7 +94,7 @@ class ReportInventoryProductTab extends StatelessWidget { ), ), Container( - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.primary, // Purple color borderRadius: BorderRadius.only( bottomLeft: Radius.circular(8), @@ -171,7 +171,7 @@ class ReportInventoryProductTab extends StatelessWidget { Color? textColor, }) { return Container( - padding: EdgeInsets.symmetric(horizontal: 12, vertical: 16), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16), alignment: alignment, child: Text( text, @@ -188,7 +188,7 @@ class ReportInventoryProductTab extends StatelessWidget { Widget _buildHeaderCell(String text) { return Container( - padding: EdgeInsets.symmetric(horizontal: 12, vertical: 16), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16), child: Text( text, style: AppStyle.sm.copyWith( @@ -202,7 +202,7 @@ class ReportInventoryProductTab extends StatelessWidget { Widget _buildTotalCell(String text) { return Container( - padding: EdgeInsets.symmetric(horizontal: 12, vertical: 16), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16), child: Text( text, style: AppStyle.sm.copyWith( diff --git a/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_breakdown.dart b/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_breakdown.dart index a545f94..5028898 100644 --- a/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_breakdown.dart +++ b/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_breakdown.dart @@ -52,12 +52,12 @@ class ReportProfitLossBreakdown extends StatelessWidget { color: AppColor.textPrimary, ), ), - SpaceHeight(4), + const SpaceHeight(4), Text( 'Komponen pembentuk profit', style: AppStyle.sm.copyWith(color: AppColor.textSecondary), ), - SpaceHeight(20), + const SpaceHeight(20), // Grafik Donut SizedBox( @@ -93,7 +93,7 @@ class ReportProfitLossBreakdown extends StatelessWidget { ), ), - SpaceHeight(16), + const SpaceHeight(16), // Legenda Column( @@ -132,7 +132,7 @@ class ReportProfitLossBreakdown extends StatelessWidget { }).toList(), ), - SpaceHeight(16), + const SpaceHeight(16), // Rasio Profitabilitas Container( @@ -159,7 +159,7 @@ class ReportProfitLossBreakdown extends StatelessWidget { color: AppColor.textSecondary, ), ), - SpaceHeight(8), + const SpaceHeight(8), Text( '${safeRound(data.summary.profitabilityRatio)}%', style: AppStyle.h5.copyWith( @@ -167,7 +167,7 @@ class ReportProfitLossBreakdown extends StatelessWidget { color: AppColor.primary, ), ), - SpaceHeight(4), + const SpaceHeight(4), Text( 'Tingkat Pengembalian Pendapatan', style: AppStyle.xs.copyWith( diff --git a/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_metric.dart b/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_metric.dart index a7a0337..c310458 100644 --- a/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_metric.dart +++ b/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_metric.dart @@ -15,7 +15,7 @@ class ReportProfitLossMetric extends StatelessWidget { Widget build(BuildContext context) { return Container( padding: const EdgeInsets.all(12), - margin: EdgeInsets.only(top: 16), + margin: const EdgeInsets.only(top: 16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), @@ -30,7 +30,7 @@ class ReportProfitLossMetric extends StatelessWidget { color: AppColor.textPrimary, ), ), - SpaceHeight(16), + const SpaceHeight(16), Row( children: [ @@ -43,7 +43,7 @@ class ReportProfitLossMetric extends StatelessWidget { AppColor.info, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: _buildMetricCard( 'Keuntungan Rata-rata', @@ -53,7 +53,7 @@ class ReportProfitLossMetric extends StatelessWidget { AppColor.success, ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: _buildMetricCard( 'Rasio Biaya', @@ -66,7 +66,7 @@ class ReportProfitLossMetric extends StatelessWidget { ], ), - SpaceHeight(16), + const SpaceHeight(16), // Tabel rincian harian Container( @@ -246,7 +246,7 @@ class ReportProfitLossMetric extends StatelessWidget { child: Column( children: [ Icon(icon, color: color, size: 24), - SpaceHeight(8), + const SpaceHeight(8), Text( value, style: AppStyle.lg.copyWith( @@ -254,7 +254,7 @@ class ReportProfitLossMetric extends StatelessWidget { color: color, ), ), - SpaceHeight(4), + const SpaceHeight(4), Text( title, textAlign: TextAlign.center, @@ -263,7 +263,7 @@ class ReportProfitLossMetric extends StatelessWidget { color: AppColor.textPrimary, ), ), - SpaceHeight(2), + const SpaceHeight(2), Text( subtitle, textAlign: TextAlign.center, diff --git a/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_product_profitability.dart b/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_product_profitability.dart index 8156340..4ae88e6 100644 --- a/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_product_profitability.dart +++ b/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_product_profitability.dart @@ -28,12 +28,12 @@ class ReportProfitLossProductProfitability extends StatelessWidget { color: AppColor.textPrimary, ), ), - SpaceHeight(4), + const SpaceHeight(4), Text( 'Analisis margin keuntungan per produk', style: AppStyle.sm.copyWith(color: AppColor.textSecondary), ), - SpaceHeight(12), + const SpaceHeight(12), Column( children: data.take(4).map((product) { return _buildProductItem(product); @@ -72,10 +72,10 @@ class ReportProfitLossProductProfitability extends StatelessWidget { product.productName, style: AppStyle.md.copyWith( fontWeight: FontWeight.w600, - color: Color(0xFF0F172A), + color: const Color(0xFF0F172A), ), ), - SpaceHeight(2), + const SpaceHeight(2), Text( '${product.quantitySold} unit • ${product.categoryName}', style: AppStyle.sm.copyWith( @@ -105,7 +105,7 @@ class ReportProfitLossProductProfitability extends StatelessWidget { ), ), ), - SpaceHeight(4), + const SpaceHeight(4), Text( product.grossProfit.toString().currencyFormatRpV2, style: AppStyle.md.copyWith( @@ -118,7 +118,7 @@ class ReportProfitLossProductProfitability extends StatelessWidget { ), ], ), - SpaceHeight(12), + const SpaceHeight(12), Row( children: [ Expanded( @@ -128,7 +128,7 @@ class ReportProfitLossProductProfitability extends StatelessWidget { AppColor.info, ), ), - SpaceWidth(8), + const SpaceWidth(8), Expanded( child: _buildProductMetric( 'Biaya', @@ -136,7 +136,7 @@ class ReportProfitLossProductProfitability extends StatelessWidget { AppColor.error, ), ), - SpaceWidth(8), + const SpaceWidth(8), Expanded( child: _buildProductMetric( 'Laba/Unit', @@ -168,7 +168,7 @@ class ReportProfitLossProductProfitability extends StatelessWidget { color: Colors.grey[600], ), ), - SpaceHeight(2), + const SpaceHeight(2), Text( value.toString().currencyFormatRpV2, style: TextStyle( diff --git a/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_trend_chart.dart b/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_trend_chart.dart index e355428..c3cedea 100644 --- a/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_trend_chart.dart +++ b/lib/presentation/pages/main/pages/report/widgets/profit_loss/report_profit_loss_trend_chart.dart @@ -12,7 +12,7 @@ class ReportProfitLossTrendChart extends StatelessWidget { Widget build(BuildContext context) { return Container( padding: const EdgeInsets.all(12), - margin: EdgeInsets.only(top: 16), + margin: const EdgeInsets.only(top: 16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), diff --git a/lib/presentation/pages/main/pages/report/widgets/report_menu_card.dart b/lib/presentation/pages/main/pages/report/widgets/report_menu_card.dart index 5ace3e1..ca3acb0 100644 --- a/lib/presentation/pages/main/pages/report/widgets/report_menu_card.dart +++ b/lib/presentation/pages/main/pages/report/widgets/report_menu_card.dart @@ -45,7 +45,7 @@ class ReportMenuCard extends StatelessWidget { menu.title, style: AppStyle.lg.copyWith(fontWeight: FontWeight.bold), ), - SpaceHeight(4.0), + const SpaceHeight(4.0), Text( menu.subtitle, style: AppStyle.md.copyWith(color: AppColor.textSecondary), diff --git a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_bar.dart b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_bar.dart index c31b2e6..1e9f99a 100644 --- a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_bar.dart +++ b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_bar.dart @@ -87,7 +87,7 @@ class _SettingPrinterBarState extends State { code: 'bar', onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('bar'), + const PrinterLoaderEvent.getByCode('bar'), ); }, ); @@ -105,7 +105,7 @@ class _SettingPrinterBarState extends State { }, onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('bar'), + const PrinterLoaderEvent.getByCode('bar'), ); setState(() { isEdit = false; @@ -143,7 +143,7 @@ class _SettingPrinterBarState extends State { code: 'bar', onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('bar'), + const PrinterLoaderEvent.getByCode('bar'), ); }, ), diff --git a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_checker.dart b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_checker.dart index 29079a6..f783bfc 100644 --- a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_checker.dart +++ b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_checker.dart @@ -87,7 +87,7 @@ class _SettingPrinterCheckerState extends State { code: 'checker', onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('checker'), + const PrinterLoaderEvent.getByCode('checker'), ); }, ); @@ -105,7 +105,7 @@ class _SettingPrinterCheckerState extends State { }, onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('checker'), + const PrinterLoaderEvent.getByCode('checker'), ); setState(() { isEdit = false; @@ -143,7 +143,7 @@ class _SettingPrinterCheckerState extends State { code: 'checker', onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('checker'), + const PrinterLoaderEvent.getByCode('checker'), ); }, ), diff --git a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_form.dart b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_form.dart index aa9251b..5ad248e 100644 --- a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_form.dart +++ b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_form.dart @@ -141,7 +141,7 @@ class _SettingPrinterFormState extends State { ); }, ), - SpaceHeight(12), + const SpaceHeight(12), state.type == 'Bluetooth' ? SizedBox( width: double.infinity, @@ -169,7 +169,7 @@ class _SettingPrinterFormState extends State { ); }, ), - SpaceHeight(12), + const SpaceHeight(12), AppTextFormField( label: 'Nama Printer', controller: _nameController, @@ -179,7 +179,7 @@ class _SettingPrinterFormState extends State { ); }, ), - SpaceHeight(12), + const SpaceHeight(12), AppDropdownSearch( label: 'Kertas', hintText: 'Kertas Tipe', @@ -192,7 +192,7 @@ class _SettingPrinterFormState extends State { ); }, ), - SpaceHeight(20), + const SpaceHeight(20), Row( children: [ if (widget.printer != null) ...[ @@ -202,7 +202,7 @@ class _SettingPrinterFormState extends State { label: 'Batal', ), ), - SpaceWidth(12), + const SpaceWidth(12), ], Expanded( child: AppElevatedButton.outlined( @@ -217,7 +217,7 @@ class _SettingPrinterFormState extends State { label: 'Test Print', ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: AppElevatedButton.filled( onPressed: () { @@ -228,7 +228,7 @@ class _SettingPrinterFormState extends State { ); context.read().add( - PrinterFormEvent.created(), + const PrinterFormEvent.created(), ); } } else { diff --git a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_kitchen.dart b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_kitchen.dart index 12f739d..11fea45 100644 --- a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_kitchen.dart +++ b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_kitchen.dart @@ -87,7 +87,7 @@ class _SettingPrinterKitchenState extends State { code: 'kitchen', onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('kitchen'), + const PrinterLoaderEvent.getByCode('kitchen'), ); }, ); @@ -105,7 +105,7 @@ class _SettingPrinterKitchenState extends State { }, onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('kitchen'), + const PrinterLoaderEvent.getByCode('kitchen'), ); setState(() { isEdit = false; @@ -143,7 +143,7 @@ class _SettingPrinterKitchenState extends State { code: 'kitchen', onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('kitchen'), + const PrinterLoaderEvent.getByCode('kitchen'), ); }, ), diff --git a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_receipt.dart b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_receipt.dart index 558fa0a..97d65ff 100644 --- a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_receipt.dart +++ b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_receipt.dart @@ -87,7 +87,7 @@ class _SettingPrinterReceiptState extends State { code: 'receipt', onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('receipt'), + const PrinterLoaderEvent.getByCode('receipt'), ); }, ); @@ -105,7 +105,7 @@ class _SettingPrinterReceiptState extends State { }, onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('receipt'), + const PrinterLoaderEvent.getByCode('receipt'), ); setState(() { isEdit = false; @@ -143,7 +143,7 @@ class _SettingPrinterReceiptState extends State { code: 'receipt', onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('receipt'), + const PrinterLoaderEvent.getByCode('receipt'), ); }, ), diff --git a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_ticket.dart b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_ticket.dart index f0ea2d6..46aac16 100644 --- a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_ticket.dart +++ b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_ticket.dart @@ -87,7 +87,7 @@ class _SettingPrinterTicketState extends State { code: 'ticket', onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('ticket'), + const PrinterLoaderEvent.getByCode('ticket'), ); }, ); @@ -105,7 +105,7 @@ class _SettingPrinterTicketState extends State { }, onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('ticket'), + const PrinterLoaderEvent.getByCode('ticket'), ); setState(() { isEdit = false; @@ -140,7 +140,7 @@ class _SettingPrinterTicketState extends State { code: 'ticket', onSuccess: () { context.read().add( - PrinterLoaderEvent.getByCode('ticket'), + const PrinterLoaderEvent.getByCode('ticket'), ); }, ), diff --git a/lib/presentation/pages/main/pages/setting/sections/setting_printer_section.dart b/lib/presentation/pages/main/pages/setting/sections/setting_printer_section.dart index ea93221..7b1babc 100644 --- a/lib/presentation/pages/main/pages/setting/sections/setting_printer_section.dart +++ b/lib/presentation/pages/main/pages/setting/sections/setting_printer_section.dart @@ -13,7 +13,7 @@ class SettingPrinterSection extends StatelessWidget { @override Widget build(BuildContext context) { - return Column( + return const Column( children: [ PageTitle( isBack: false, diff --git a/lib/presentation/pages/main/pages/setting/sections/setting_sync_section.dart b/lib/presentation/pages/main/pages/setting/sections/setting_sync_section.dart index 2c69e32..b7353f1 100644 --- a/lib/presentation/pages/main/pages/setting/sections/setting_sync_section.dart +++ b/lib/presentation/pages/main/pages/setting/sections/setting_sync_section.dart @@ -79,7 +79,7 @@ class _SettingSyncPageContent extends StatelessWidget { builder: (context, state) { return Column( children: [ - PageTitle( + const PageTitle( title: 'Sinkronisasi', subtitle: 'Sinkronisasi data dengan server', isBack: false, @@ -91,11 +91,11 @@ class _SettingSyncPageContent extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 16), child: Column( children: [ - SpaceHeight(24), + const SpaceHeight(24), _buildQuickActions(context, state), - SpaceHeight(24), + const SpaceHeight(24), _buildSyncTables(context, state), - SpaceHeight(24), + const SpaceHeight(24), _buildDatabaseStats(context, state), ], ), @@ -123,7 +123,7 @@ class _SettingSyncPageContent extends StatelessWidget { 'Aksi Cepat', style: AppStyle.lg.copyWith(fontWeight: FontWeight.w600), ), - SpaceHeight(16), + const SpaceHeight(16), Row( children: [ Expanded( @@ -136,7 +136,7 @@ class _SettingSyncPageContent extends StatelessWidget { : 'Sync Semua Data', ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: AppElevatedButton.outlined( onPressed: state.isLoading || state.isSyncing @@ -168,7 +168,7 @@ class _SettingSyncPageContent extends StatelessWidget { 'Sinkronisasi per Tabel', style: AppStyle.lg.copyWith(fontWeight: FontWeight.w600), ), - SpaceHeight(16), + const SpaceHeight(16), _buildSyncTableItem( context: context, state: state, @@ -184,9 +184,9 @@ class _SettingSyncPageContent extends StatelessWidget { }, onClear: () => _clearCategories(context), ), - SpaceHeight(12), + const SpaceHeight(12), const Divider(), - SpaceHeight(12), + const SpaceHeight(12), _buildSyncTableItem( context: context, state: state, @@ -228,7 +228,7 @@ class _SettingSyncPageContent extends StatelessWidget { ), child: Icon(icon, color: color, size: 24), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -239,7 +239,7 @@ class _SettingSyncPageContent extends StatelessWidget { title, style: AppStyle.md.copyWith(fontWeight: FontWeight.w600), ), - SpaceWidth(8), + const SpaceWidth(8), Container( padding: const EdgeInsets.symmetric( horizontal: 6, @@ -278,7 +278,7 @@ class _SettingSyncPageContent extends StatelessWidget { foregroundColor: color, ), ), - SpaceWidth(4), + const SpaceWidth(4), IconButton( onPressed: state.isLoading || state.isSyncing ? null : onClear, icon: const Icon(Icons.delete_outline, size: 20), @@ -320,7 +320,7 @@ class _SettingSyncPageContent extends StatelessWidget { ), const Spacer(), if (state.isLoading) - Center(child: LoaderWithText()) + const Center(child: LoaderWithText()) else IconButton( onPressed: () { @@ -333,7 +333,7 @@ class _SettingSyncPageContent extends StatelessWidget { ), ], ), - SpaceHeight(16), + const SpaceHeight(16), if (state.isLoading) const Center(child: LoaderWithText()) else @@ -345,28 +345,28 @@ class _SettingSyncPageContent extends StatelessWidget { Icons.category, Colors.blue, ), - SpaceHeight(8), + const SpaceHeight(8), _buildStatRow( 'Produk', state.productStats['total_products']?.toString() ?? '0', Icons.inventory_2, Colors.green, ), - SpaceHeight(8), + const SpaceHeight(8), _buildStatRow( 'Variant', state.productStats['total_variants']?.toString() ?? '0', Icons.tune, Colors.orange, ), - SpaceHeight(8), + const SpaceHeight(8), _buildStatRow( 'Cache Entries', '$totalCacheEntries', Icons.memory, Colors.purple, ), - SpaceHeight(8), + const SpaceHeight(8), _buildStatRow( 'Ukuran Database', '${totalDatabaseSize.toStringAsFixed(2)} MB', @@ -384,7 +384,7 @@ class _SettingSyncPageContent extends StatelessWidget { return Row( children: [ Icon(icon, size: 16, color: color), - SpaceWidth(8), + const SpaceWidth(8), Expanded( child: Text( label, diff --git a/lib/presentation/pages/main/pages/setting/setting_page.dart b/lib/presentation/pages/main/pages/setting/setting_page.dart index 47a40f6..a27b6f3 100644 --- a/lib/presentation/pages/main/pages/setting/setting_page.dart +++ b/lib/presentation/pages/main/pages/setting/setting_page.dart @@ -25,8 +25,8 @@ class SettingPage extends StatelessWidget implements AutoRouteWrapper { Expanded( flex: 4, child: switch (state.index) { - 0 => SettingPrinterSection(), - 1 => SettingSyncSection(), + 0 => const SettingPrinterSection(), + 1 => const SettingSyncSection(), _ => Container(), }, ), diff --git a/lib/presentation/pages/main/pages/setting/widgets/setting_left_panel.dart b/lib/presentation/pages/main/pages/setting/widgets/setting_left_panel.dart index e8da79a..e5f251a 100644 --- a/lib/presentation/pages/main/pages/setting/widgets/setting_left_panel.dart +++ b/lib/presentation/pages/main/pages/setting/widgets/setting_left_panel.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../../../../application/printer/printer_bloc.dart'; @@ -17,7 +16,7 @@ class SettingLeftPanel extends StatelessWidget { color: AppColor.white, child: Column( children: [ - PageTitle( + const PageTitle( title: 'Pengaturan', subtitle: 'Kelola pengaturan aplikasi', isBack: false, @@ -33,7 +32,7 @@ class SettingLeftPanel extends StatelessWidget { subtitle: 'Kelola printer', icon: Icons.print_outlined, onTap: () => context.read().add( - PrinterEvent.indexChanged(0), + const PrinterEvent.indexChanged(0), ), ), SettingTile( @@ -43,7 +42,7 @@ class SettingLeftPanel extends StatelessWidget { subtitle: 'Sinkronisasi data', icon: Icons.sync_outlined, onTap: () => context.read().add( - PrinterEvent.indexChanged(1), + const PrinterEvent.indexChanged(1), ), ), ], diff --git a/lib/presentation/pages/main/pages/setting/widgets/setting_tile.dart b/lib/presentation/pages/main/pages/setting/widgets/setting_tile.dart index 0b7e49b..09e9fa6 100644 --- a/lib/presentation/pages/main/pages/setting/widgets/setting_tile.dart +++ b/lib/presentation/pages/main/pages/setting/widgets/setting_tile.dart @@ -55,7 +55,7 @@ class SettingTile extends StatelessWidget { title, style: AppStyle.lg.copyWith(fontWeight: FontWeight.bold), ), - SpaceHeight(4.0), + const SpaceHeight(4.0), Text( subtitle, style: AppStyle.md.copyWith(color: AppColor.textSecondary), diff --git a/lib/presentation/pages/main/pages/table/table_page.dart b/lib/presentation/pages/main/pages/table/table_page.dart index 6ecae6b..3991fcb 100644 --- a/lib/presentation/pages/main/pages/table/table_page.dart +++ b/lib/presentation/pages/main/pages/table/table_page.dart @@ -30,7 +30,7 @@ class TablePage extends StatefulWidget implements AutoRouteWrapper { BlocProvider( create: (context) => getIt() - ..add(TableLoaderEvent.fetched(isRefresh: true)), + ..add(const TableLoaderEvent.fetched(isRefresh: true)), ), ], child: this, @@ -94,7 +94,7 @@ class _TablePageState extends State if (context.mounted) { context.router.maybePop(); context.read().add( - TableLoaderEvent.fetched(isRefresh: true), + const TableLoaderEvent.fetched(isRefresh: true), ); } }, @@ -113,7 +113,7 @@ class _TablePageState extends State if (context.mounted) { context.router.maybePop(); context.read().add( - TableLoaderEvent.fetched(isRefresh: true), + const TableLoaderEvent.fetched(isRefresh: true), ); } }, @@ -143,7 +143,7 @@ class _TablePageState extends State onPressed: () { showDialog( context: context, - builder: (context) => TableCreateDialog(), + builder: (context) => const TableCreateDialog(), ); }, ), @@ -298,7 +298,7 @@ class _TablePageState extends State onLongPress: () { if (table.status.isOccupied) { context.read().add( - TableLoaderEvent.setSelectedTable( + const TableLoaderEvent.setSelectedTable( null, ), ); @@ -349,7 +349,7 @@ class _TablePageState extends State position: RelativeRect.fromRect( tapPosition != null ? Rect.fromLTWH(tapPosition!.dx, tapPosition!.dy, 0, 0) - : Rect.fromLTWH(100, 100, 0, 0), + : const Rect.fromLTWH(100, 100, 0, 0), Offset.zero & overlay.size, ), color: AppColor.white, @@ -363,7 +363,7 @@ class _TablePageState extends State builder: (context) => TableTransferDialog(fromTable: table), ); }, - child: Row( + child: const Row( children: [ Icon(Icons.swap_horiz), SizedBox(width: 8), diff --git a/lib/presentation/pages/main/pages/table/widgets/floating_bottom_navbar.dart b/lib/presentation/pages/main/pages/table/widgets/floating_bottom_navbar.dart index 1894037..09e0df0 100644 --- a/lib/presentation/pages/main/pages/table/widgets/floating_bottom_navbar.dart +++ b/lib/presentation/pages/main/pages/table/widgets/floating_bottom_navbar.dart @@ -48,9 +48,9 @@ class TableFloatingBottomNavbar extends StatelessWidget { children: [ const Icon(Icons.table_bar, color: Colors.white, size: 24), const SizedBox(width: 12), - Text( + const Text( "1 Meja Dipilih", - style: const TextStyle( + style: TextStyle( color: Colors.white, fontWeight: FontWeight.bold, fontSize: 16, @@ -87,7 +87,9 @@ class TableFloatingBottomNavbar extends StatelessWidget { GestureDetector( onTap: () { context.read().add( - TableLoaderEvent.setSelectedTable(null), + const TableLoaderEvent.setSelectedTable( + null, + ), ); }, child: const Icon( @@ -123,7 +125,7 @@ class TableFloatingBottomNavbar extends StatelessWidget { CheckoutFormEvent.updateTable(selectedTable), ); context.read().add( - TableLoaderEvent.setSelectedTable(null), + const TableLoaderEvent.setSelectedTable(null), ); context.router.navigate( const MainRoute(children: [HomeRoute()]), diff --git a/lib/presentation/pages/order/order_page.dart b/lib/presentation/pages/order/order_page.dart index 44bc997..513666e 100644 --- a/lib/presentation/pages/order/order_page.dart +++ b/lib/presentation/pages/order/order_page.dart @@ -1,6 +1,5 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../application/order/order_loader/order_loader_bloc.dart'; diff --git a/lib/presentation/pages/order/pages/success_add_item_order/success_add_item_order_page.dart b/lib/presentation/pages/order/pages/success_add_item_order/success_add_item_order_page.dart index 9f844e2..5a63058 100644 --- a/lib/presentation/pages/order/pages/success_add_item_order/success_add_item_order_page.dart +++ b/lib/presentation/pages/order/pages/success_add_item_order/success_add_item_order_page.dart @@ -44,7 +44,7 @@ class SuccessAddItemOrderPage extends StatelessWidget { checkoutState: checkoutState, ), ), - SpaceWidth(16), + const SpaceWidth(16), Expanded( flex: 65, child: SuccessAddItemOrderRightPanel( diff --git a/lib/presentation/pages/order/pages/success_add_item_order/widgets/success_add_item_order_left_panel.dart b/lib/presentation/pages/order/pages/success_add_item_order/widgets/success_add_item_order_left_panel.dart index 14f5fda..3407fde 100644 --- a/lib/presentation/pages/order/pages/success_add_item_order/widgets/success_add_item_order_left_panel.dart +++ b/lib/presentation/pages/order/pages/success_add_item_order/widgets/success_add_item_order_left_panel.dart @@ -72,7 +72,7 @@ class SuccessAddItemOrderLeftPanel extends StatelessWidget { color: Colors.white, ), ), - SpaceHeight(16), + const SpaceHeight(16), Text( 'Pesanan Berhasil!', style: AppStyle.h4.copyWith( @@ -80,7 +80,7 @@ class SuccessAddItemOrderLeftPanel extends StatelessWidget { color: AppColor.primary, ), ), - SpaceHeight(12), + const SpaceHeight(12), Text( 'Pesanan telah diterima dan\nsedang diproses', style: AppStyle.md.copyWith( @@ -103,7 +103,7 @@ class SuccessAddItemOrderLeftPanel extends StatelessWidget { fontWeight: FontWeight.bold, ), ), - SpaceHeight(24), + const SpaceHeight(24), _buildInfoRow( icon: Icons.person, label: 'Pemesan', @@ -177,7 +177,7 @@ class SuccessAddItemOrderLeftPanel extends StatelessWidget { child: AppElevatedButton.outlined( onPressed: () { context.read().add( - CheckoutFormEvent.started([]), + const CheckoutFormEvent.started([]), ); context.router.replaceAll([const MainRoute()]); }, @@ -198,7 +198,7 @@ class SuccessAddItemOrderLeftPanel extends StatelessWidget { ); }, label: 'Cetak Struk', - icon: Icon(Icons.print_rounded, color: AppColor.white), + icon: const Icon(Icons.print_rounded, color: AppColor.white), ), ), ], diff --git a/lib/presentation/pages/order/pages/success_add_item_order/widgets/success_add_item_order_right_panel.dart b/lib/presentation/pages/order/pages/success_add_item_order/widgets/success_add_item_order_right_panel.dart index 452c7fa..7cbb1b5 100644 --- a/lib/presentation/pages/order/pages/success_add_item_order/widgets/success_add_item_order_right_panel.dart +++ b/lib/presentation/pages/order/pages/success_add_item_order/widgets/success_add_item_order_right_panel.dart @@ -70,7 +70,7 @@ class SuccessAddItemOrderRightPanel extends StatelessWidget { children: [ Row( children: [ - Icon( + const Icon( Icons.shopping_cart_outlined, size: 16, color: AppColor.textSecondary, @@ -130,13 +130,13 @@ class SuccessAddItemOrderRightPanel extends StatelessWidget { color: AppColor.primary.withOpacity(0.2), borderRadius: BorderRadius.circular(8), ), - child: Icon( + child: const Icon( Icons.payments_rounded, size: 16, color: AppColor.primary, ), ), - SpaceWidth(12), + const SpaceWidth(12), Text( 'Total Pembayaran', style: AppStyle.lg.copyWith(fontWeight: FontWeight.bold), @@ -207,7 +207,7 @@ class SuccessAddItemOrderRightPanel extends StatelessWidget { color: AppColor.primaryWithOpacity(0.1), borderRadius: BorderRadius.circular(16.0), ), - child: Icon( + child: const Icon( Icons.restaurant_rounded, color: AppColor.primary, size: 28, @@ -300,9 +300,9 @@ class SuccessAddItemOrderRightPanel extends StatelessWidget { return Container( width: double.infinity, padding: const EdgeInsets.all(24.0), - decoration: BoxDecoration( + decoration: const BoxDecoration( border: Border(bottom: BorderSide(color: AppColor.border)), - borderRadius: const BorderRadius.vertical(top: Radius.circular(24)), + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), ), child: Row( children: [ @@ -317,13 +317,13 @@ class SuccessAddItemOrderRightPanel extends StatelessWidget { ), borderRadius: BorderRadius.circular(16.0), ), - child: Icon( + child: const Icon( Icons.receipt_long_rounded, color: AppColor.primary, size: 28, ), ), - SpaceWidth(16), + const SpaceWidth(16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -332,7 +332,7 @@ class SuccessAddItemOrderRightPanel extends StatelessWidget { 'Detail Pesanan', style: AppStyle.xxl.copyWith(fontWeight: FontWeight.bold), ), - SpaceHeight(4), + const SpaceHeight(4), Text( 'Ringkasan item yang dipesan', style: AppStyle.md.copyWith(color: Colors.grey.shade600), diff --git a/lib/presentation/pages/order/pages/success_order/success_order_page.dart b/lib/presentation/pages/order/pages/success_order/success_order_page.dart index b6cc5eb..6f15efb 100644 --- a/lib/presentation/pages/order/pages/success_order/success_order_page.dart +++ b/lib/presentation/pages/order/pages/success_order/success_order_page.dart @@ -51,7 +51,7 @@ class SuccessOrderPage extends StatelessWidget implements AutoRouteWrapper { flex: 35, child: SuccessOrderLeftPanel(order: state.order), ), - SpaceWidth(16), + const SpaceWidth(16), Expanded( flex: 65, child: SuccessOrderRightPanel(order: state.order), diff --git a/lib/presentation/pages/order/pages/success_order/widgets/success_order_left_panel.dart b/lib/presentation/pages/order/pages/success_order/widgets/success_order_left_panel.dart index 7111e65..8b90376 100644 --- a/lib/presentation/pages/order/pages/success_order/widgets/success_order_left_panel.dart +++ b/lib/presentation/pages/order/pages/success_order/widgets/success_order_left_panel.dart @@ -71,7 +71,7 @@ class SuccessOrderLeftPanel extends StatelessWidget { color: Colors.white, ), ), - SpaceHeight(16), + const SpaceHeight(16), Text( 'Pesanan Berhasil!', style: AppStyle.h4.copyWith( @@ -79,7 +79,7 @@ class SuccessOrderLeftPanel extends StatelessWidget { color: AppColor.primary, ), ), - SpaceHeight(12), + const SpaceHeight(12), Text( 'Pesanan telah diterima dan\nsedang diproses', style: AppStyle.md.copyWith( @@ -102,7 +102,7 @@ class SuccessOrderLeftPanel extends StatelessWidget { fontWeight: FontWeight.bold, ), ), - SpaceHeight(24), + const SpaceHeight(24), _buildInfoRow( icon: Icons.person, label: 'Pemesan', @@ -176,7 +176,7 @@ class SuccessOrderLeftPanel extends StatelessWidget { ); }, label: 'Cetak Struk', - icon: Icon(Icons.print_rounded, color: AppColor.white), + icon: const Icon(Icons.print_rounded, color: AppColor.white), ), ), ], diff --git a/lib/presentation/pages/order/pages/success_order/widgets/success_order_right_panel.dart b/lib/presentation/pages/order/pages/success_order/widgets/success_order_right_panel.dart index 75ba8cb..1044535 100644 --- a/lib/presentation/pages/order/pages/success_order/widgets/success_order_right_panel.dart +++ b/lib/presentation/pages/order/pages/success_order/widgets/success_order_right_panel.dart @@ -70,7 +70,7 @@ class SuccessOrderRightPanel extends StatelessWidget { children: [ Row( children: [ - Icon( + const Icon( Icons.shopping_cart_outlined, size: 16, color: AppColor.textSecondary, @@ -123,13 +123,13 @@ class SuccessOrderRightPanel extends StatelessWidget { color: AppColor.primary.withOpacity(0.2), borderRadius: BorderRadius.circular(8), ), - child: Icon( + child: const Icon( Icons.payments_rounded, size: 16, color: AppColor.primary, ), ), - SpaceWidth(12), + const SpaceWidth(12), Text( 'Total Pembayaran', style: AppStyle.lg.copyWith(fontWeight: FontWeight.bold), @@ -192,7 +192,7 @@ class SuccessOrderRightPanel extends StatelessWidget { color: AppColor.primaryWithOpacity(0.1), borderRadius: BorderRadius.circular(16.0), ), - child: Icon( + child: const Icon( Icons.restaurant_rounded, color: AppColor.primary, size: 28, @@ -281,9 +281,9 @@ class SuccessOrderRightPanel extends StatelessWidget { return Container( width: double.infinity, padding: const EdgeInsets.all(24.0), - decoration: BoxDecoration( + decoration: const BoxDecoration( border: Border(bottom: BorderSide(color: AppColor.border)), - borderRadius: const BorderRadius.vertical(top: Radius.circular(24)), + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), ), child: Row( children: [ @@ -298,13 +298,13 @@ class SuccessOrderRightPanel extends StatelessWidget { ), borderRadius: BorderRadius.circular(16.0), ), - child: Icon( + child: const Icon( Icons.receipt_long_rounded, color: AppColor.primary, size: 28, ), ), - SpaceWidth(16), + const SpaceWidth(16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -313,7 +313,7 @@ class SuccessOrderRightPanel extends StatelessWidget { 'Detail Pesanan', style: AppStyle.xxl.copyWith(fontWeight: FontWeight.bold), ), - SpaceHeight(4), + const SpaceHeight(4), Text( 'Ringkasan item yang dipesan', style: AppStyle.md.copyWith(color: Colors.grey.shade600), diff --git a/lib/presentation/pages/order/widgets/order_information.dart b/lib/presentation/pages/order/widgets/order_information.dart index 34ee492..4c74297 100644 --- a/lib/presentation/pages/order/widgets/order_information.dart +++ b/lib/presentation/pages/order/widgets/order_information.dart @@ -86,7 +86,7 @@ class OrderInformation extends StatelessWidget { ), child: Text( (order?.status ?? "").toUpperCase(), - style: TextStyle( + style: const TextStyle( color: Colors.white, fontSize: 12, fontWeight: FontWeight.bold, @@ -102,7 +102,7 @@ class OrderInformation extends StatelessWidget { ), child: Text( (order?.status ?? "").toUpperCase(), - style: TextStyle( + style: const TextStyle( color: Colors.white, fontSize: 12, fontWeight: FontWeight.bold, @@ -118,7 +118,7 @@ class OrderInformation extends StatelessWidget { ), child: Text( (order?.status ?? "").toUpperCase(), - style: TextStyle( + style: const TextStyle( color: Colors.white, fontSize: 12, fontWeight: FontWeight.bold, diff --git a/lib/presentation/pages/order/widgets/order_left_panel.dart b/lib/presentation/pages/order/widgets/order_left_panel.dart index 92c5840..6e3e44f 100644 --- a/lib/presentation/pages/order/widgets/order_left_panel.dart +++ b/lib/presentation/pages/order/widgets/order_left_panel.dart @@ -59,7 +59,7 @@ class _OrderLeftPanelState extends State { child: widget.state.failureOption.fold( () { if (widget.state.isFetching) { - return Center(child: LoaderWithText()); + return const Center(child: LoaderWithText()); } if (widget.state.orders.isEmpty) { diff --git a/lib/presentation/pages/order/widgets/order_list.dart b/lib/presentation/pages/order/widgets/order_list.dart index e4936e5..f513c3f 100644 --- a/lib/presentation/pages/order/widgets/order_list.dart +++ b/lib/presentation/pages/order/widgets/order_list.dart @@ -87,7 +87,7 @@ class OrderList extends StatelessWidget { child: Row( mainAxisSize: MainAxisSize.min, children: [ - Icon( + const Icon( Icons.shopping_cart_outlined, size: 16, color: AppColor.primary, @@ -248,7 +248,7 @@ class OrderList extends StatelessWidget { ], ), if (order?.splitType == 'ITEM' && order?.status == 'pending') ...[ - SpaceHeight(6), + const SpaceHeight(6), Align( alignment: Alignment.centerRight, child: Container( diff --git a/lib/presentation/pages/order/widgets/order_list_payment.dart b/lib/presentation/pages/order/widgets/order_list_payment.dart index 423b1c4..15c1e9b 100644 --- a/lib/presentation/pages/order/widgets/order_list_payment.dart +++ b/lib/presentation/pages/order/widgets/order_list_payment.dart @@ -55,7 +55,7 @@ class OrderListPayment extends StatelessWidget { ), Text( (order?.totalPaid ?? 0).currencyFormatRpV2, - style: TextStyle(fontWeight: FontWeight.w500), + style: const TextStyle(fontWeight: FontWeight.w500), ), ], ), diff --git a/lib/presentation/pages/order/widgets/order_right_panel.dart b/lib/presentation/pages/order/widgets/order_right_panel.dart index 7104989..094418a 100644 --- a/lib/presentation/pages/order/widgets/order_right_panel.dart +++ b/lib/presentation/pages/order/widgets/order_right_panel.dart @@ -53,8 +53,8 @@ class OrderRightPanel extends StatelessWidget { ), ), Container( - padding: EdgeInsets.all(16), - decoration: BoxDecoration(color: AppColor.white), + padding: const EdgeInsets.all(16), + decoration: const BoxDecoration(color: AppColor.white), child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ @@ -71,9 +71,9 @@ class OrderRightPanel extends StatelessWidget { } }, label: 'Print Bill', - icon: Icon(Icons.print), + icon: const Icon(Icons.print), ), - SpaceWidth(8), + const SpaceWidth(8), if (state.selectedOrder?.status == 'completed') if (state.selectedOrder?.isRefund == false) AppElevatedButton.outlined( @@ -83,7 +83,7 @@ class OrderRightPanel extends StatelessWidget { ); }, label: 'Refund', - icon: Icon(Icons.autorenew), + icon: const Icon(Icons.autorenew), ), if (state.selectedOrder?.status == 'pending') ...[ AppElevatedButton.outlined( @@ -91,9 +91,9 @@ class OrderRightPanel extends StatelessWidget { VoidRoute(order: state.selectedOrder!), ), label: 'Void', - icon: Icon(Icons.undo), + icon: const Icon(Icons.undo), ), - SpaceWidth(8), + const SpaceWidth(8), AppElevatedButton.outlined( onPressed: () { context.router.push( @@ -101,10 +101,10 @@ class OrderRightPanel extends StatelessWidget { ); }, label: 'Split Bill', - icon: Icon(Icons.calculate_outlined), + icon: const Icon(Icons.calculate_outlined), ), - SpaceWidth(8), + const SpaceWidth(8), if (state.selectedOrder?.paymentStatus != 'partial') AppElevatedButton.filled( width: 120, @@ -114,7 +114,7 @@ class OrderRightPanel extends StatelessWidget { ); }, label: 'Bayar', - icon: Icon(Icons.payment, color: Colors.white), + icon: const Icon(Icons.payment, color: Colors.white), ), ], ], diff --git a/lib/presentation/pages/order/widgets/order_title.dart b/lib/presentation/pages/order/widgets/order_title.dart index 5a0a6ae..4f1e04a 100644 --- a/lib/presentation/pages/order/widgets/order_title.dart +++ b/lib/presentation/pages/order/widgets/order_title.dart @@ -30,7 +30,7 @@ class OrderTitle extends StatelessWidget { title: title, bottom: Container( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0), - decoration: BoxDecoration( + decoration: const BoxDecoration( color: AppColor.white, border: Border( bottom: BorderSide(color: AppColor.border, width: 1.0), @@ -53,7 +53,7 @@ class OrderTitle extends StatelessWidget { ), ], ), - SpaceHeight(16), + const SpaceHeight(16), Row( children: [ Expanded( @@ -63,7 +63,7 @@ class OrderTitle extends StatelessWidget { showLabel: false, ), ), - SpaceWidth(12), + const SpaceWidth(12), GestureDetector( onTap: () => DateRangePickerModal.show( context: context, @@ -78,7 +78,7 @@ class OrderTitle extends StatelessWidget { color: AppColor.primary, borderRadius: BorderRadius.circular(12), ), - child: Icon( + child: const Icon( Icons.filter_list_outlined, color: AppColor.white, size: 24, diff --git a/lib/presentation/pages/payment/pages/payment_success/widgets/payment_success_left_panel.dart b/lib/presentation/pages/payment/pages/payment_success/widgets/payment_success_left_panel.dart index 32de37e..d5e8dd7 100644 --- a/lib/presentation/pages/payment/pages/payment_success/widgets/payment_success_left_panel.dart +++ b/lib/presentation/pages/payment/pages/payment_success/widgets/payment_success_left_panel.dart @@ -71,7 +71,7 @@ class PaymentSuccessLeftPanel extends StatelessWidget { color: Colors.white, ), ), - SpaceHeight(16), + const SpaceHeight(16), Text( 'Pembayaran Berhasil!', style: AppStyle.h4.copyWith( @@ -93,7 +93,7 @@ class PaymentSuccessLeftPanel extends StatelessWidget { fontWeight: FontWeight.bold, ), ), - SpaceHeight(24), + const SpaceHeight(24), _buildInfoRow( icon: Icons.person, label: 'Pemesan', @@ -167,7 +167,7 @@ class PaymentSuccessLeftPanel extends StatelessWidget { ); }, label: 'Cetak Struk', - icon: Icon(Icons.print_rounded, color: AppColor.white), + icon: const Icon(Icons.print_rounded, color: AppColor.white), ), ), ], diff --git a/lib/presentation/pages/payment/pages/payment_success/widgets/payment_success_right_panel.dart b/lib/presentation/pages/payment/pages/payment_success/widgets/payment_success_right_panel.dart index 8e92f1d..4fe6b5f 100644 --- a/lib/presentation/pages/payment/pages/payment_success/widgets/payment_success_right_panel.dart +++ b/lib/presentation/pages/payment/pages/payment_success/widgets/payment_success_right_panel.dart @@ -70,7 +70,7 @@ class PaymentSuccessRightPanel extends StatelessWidget { children: [ Row( children: [ - Icon( + const Icon( Icons.shopping_cart_outlined, size: 16, color: AppColor.textSecondary, @@ -123,13 +123,13 @@ class PaymentSuccessRightPanel extends StatelessWidget { color: AppColor.primary.withOpacity(0.2), borderRadius: BorderRadius.circular(8), ), - child: Icon( + child: const Icon( Icons.payments_rounded, size: 16, color: AppColor.primary, ), ), - SpaceWidth(12), + const SpaceWidth(12), Text( 'Total Pembayaran', style: AppStyle.lg.copyWith(fontWeight: FontWeight.bold), @@ -192,7 +192,7 @@ class PaymentSuccessRightPanel extends StatelessWidget { color: AppColor.primaryWithOpacity(0.1), borderRadius: BorderRadius.circular(16.0), ), - child: Icon( + child: const Icon( Icons.restaurant_rounded, color: AppColor.primary, size: 28, @@ -281,9 +281,9 @@ class PaymentSuccessRightPanel extends StatelessWidget { return Container( width: double.infinity, padding: const EdgeInsets.all(24.0), - decoration: BoxDecoration( + decoration: const BoxDecoration( border: Border(bottom: BorderSide(color: AppColor.border)), - borderRadius: const BorderRadius.vertical(top: Radius.circular(24)), + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), ), child: Row( children: [ @@ -298,13 +298,13 @@ class PaymentSuccessRightPanel extends StatelessWidget { ), borderRadius: BorderRadius.circular(16.0), ), - child: Icon( + child: const Icon( Icons.receipt_long_rounded, color: AppColor.primary, size: 28, ), ), - SpaceWidth(16), + const SpaceWidth(16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -313,7 +313,7 @@ class PaymentSuccessRightPanel extends StatelessWidget { 'Detail Pesanan', style: AppStyle.xxl.copyWith(fontWeight: FontWeight.bold), ), - SpaceHeight(4), + const SpaceHeight(4), Text( 'Ringkasan item yang dipesan', style: AppStyle.md.copyWith(color: Colors.grey.shade600), diff --git a/lib/presentation/pages/payment/pages/payment_success_split_bill/widgets/payment_success_split_bill_left_panel.dart b/lib/presentation/pages/payment/pages/payment_success_split_bill/widgets/payment_success_split_bill_left_panel.dart index b0acd19..e1c847b 100644 --- a/lib/presentation/pages/payment/pages/payment_success_split_bill/widgets/payment_success_split_bill_left_panel.dart +++ b/lib/presentation/pages/payment/pages/payment_success_split_bill/widgets/payment_success_split_bill_left_panel.dart @@ -71,7 +71,7 @@ class PaymentSuccessSplitBillLeftPanel extends StatelessWidget { color: Colors.white, ), ), - SpaceHeight(8), + const SpaceHeight(8), Text( 'Pembayaran Berhasil!', style: AppStyle.h4.copyWith( @@ -93,7 +93,7 @@ class PaymentSuccessSplitBillLeftPanel extends StatelessWidget { fontWeight: FontWeight.bold, ), ), - SpaceHeight(24), + const SpaceHeight(24), _buildInfoRow( icon: Icons.person, label: 'Pemesan', @@ -173,7 +173,7 @@ class PaymentSuccessSplitBillLeftPanel extends StatelessWidget { ); }, label: 'Cetak Struk', - icon: Icon(Icons.print_rounded, color: AppColor.white), + icon: const Icon(Icons.print_rounded, color: AppColor.white), ), ), ], diff --git a/lib/presentation/pages/payment/pages/payment_success_split_bill/widgets/payment_success_split_bill_right_panel.dart b/lib/presentation/pages/payment/pages/payment_success_split_bill/widgets/payment_success_split_bill_right_panel.dart index 43a7104..0763c1a 100644 --- a/lib/presentation/pages/payment/pages/payment_success_split_bill/widgets/payment_success_split_bill_right_panel.dart +++ b/lib/presentation/pages/payment/pages/payment_success_split_bill/widgets/payment_success_split_bill_right_panel.dart @@ -104,7 +104,7 @@ class PaymentSuccessSplitBillRightPanel extends StatelessWidget { ), const SpaceHeight(8), - DashedDivider(color: AppColor.border), + const DashedDivider(color: AppColor.border), const SpaceHeight(8), Row( @@ -158,13 +158,13 @@ class PaymentSuccessSplitBillRightPanel extends StatelessWidget { color: AppColor.primary.withOpacity(0.2), borderRadius: BorderRadius.circular(8), ), - child: Icon( + child: const Icon( Icons.payments_rounded, size: 16, color: AppColor.primary, ), ), - SpaceWidth(12), + const SpaceWidth(12), Text( 'Total Pembayaran', style: AppStyle.lg.copyWith(fontWeight: FontWeight.bold), @@ -224,7 +224,7 @@ class PaymentSuccessSplitBillRightPanel extends StatelessWidget { color: AppColor.primary.withOpacity(0.1), borderRadius: BorderRadius.circular(4), ), - child: Icon(Icons.payments, color: AppColor.primary, size: 16), + child: const Icon(Icons.payments, color: AppColor.primary, size: 16), ), const SizedBox(width: 12), Expanded( @@ -258,9 +258,9 @@ class PaymentSuccessSplitBillRightPanel extends StatelessWidget { return Container( width: double.infinity, padding: const EdgeInsets.all(24.0), - decoration: BoxDecoration( + decoration: const BoxDecoration( border: Border(bottom: BorderSide(color: AppColor.border)), - borderRadius: const BorderRadius.vertical(top: Radius.circular(24)), + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), ), child: Row( children: [ @@ -275,13 +275,13 @@ class PaymentSuccessSplitBillRightPanel extends StatelessWidget { ), borderRadius: BorderRadius.circular(16.0), ), - child: Icon( + child: const Icon( Icons.receipt_long_rounded, color: AppColor.primary, size: 28, ), ), - SpaceWidth(16), + const SpaceWidth(16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -290,7 +290,7 @@ class PaymentSuccessSplitBillRightPanel extends StatelessWidget { 'Daftar Split Bill', style: AppStyle.xxl.copyWith(fontWeight: FontWeight.bold), ), - SpaceHeight(4), + const SpaceHeight(4), Text( 'Ringkasan split bill', style: AppStyle.md.copyWith(color: Colors.grey.shade600), diff --git a/lib/presentation/pages/payment/payment_page.dart b/lib/presentation/pages/payment/payment_page.dart index 9d8386f..9729911 100644 --- a/lib/presentation/pages/payment/payment_page.dart +++ b/lib/presentation/pages/payment/payment_page.dart @@ -83,13 +83,13 @@ class PaymentPage extends StatelessWidget implements AutoRouteWrapper { ), leading: IconButton( onPressed: () => context.router.maybePop(), - icon: Icon(Icons.arrow_back, color: AppColor.primary), + icon: const Icon(Icons.arrow_back, color: AppColor.primary), ), actions: [ if (isSplit) Container( - padding: EdgeInsets.all(4), - margin: EdgeInsets.only(right: 8), + padding: const EdgeInsets.all(4), + margin: const EdgeInsets.only(right: 8), decoration: BoxDecoration( border: Border.all(color: AppColor.primary), borderRadius: BorderRadius.circular(8), @@ -167,7 +167,7 @@ class PaymentPage extends StatelessWidget implements AutoRouteWrapper { BlocProvider( create: (context) => getIt() - ..add(PaymentMethodLoaderEvent.fetched(isRefresh: true)), + ..add(const PaymentMethodLoaderEvent.fetched(isRefresh: true)), ), ], child: this, diff --git a/lib/presentation/pages/payment/widgets/payment_left_panel.dart b/lib/presentation/pages/payment/widgets/payment_left_panel.dart index ce712e1..450965f 100644 --- a/lib/presentation/pages/payment/widgets/payment_left_panel.dart +++ b/lib/presentation/pages/payment/widgets/payment_left_panel.dart @@ -42,9 +42,9 @@ class PaymentLeftPanel extends StatelessWidget { ), ], ), - SpaceHeight(8), - Divider(color: AppColor.border), - SpaceHeight(8), + const SpaceHeight(8), + const Divider(color: AppColor.border), + const SpaceHeight(8), Expanded( child: state.pendingItems.isEmpty ? const Center(child: Text('Tidak ada item')) @@ -52,7 +52,7 @@ class PaymentLeftPanel extends StatelessWidget { shrinkWrap: true, itemCount: state.pendingItems.length, separatorBuilder: (_, __) => - Divider(color: AppColor.border), + const Divider(color: AppColor.border), itemBuilder: (context, index) { final item = state.pendingItems[index]; return ListTile( @@ -79,13 +79,13 @@ class PaymentLeftPanel extends StatelessWidget { }, ), ), - Divider(color: AppColor.border), + const Divider(color: AppColor.border), _buildSummaryRow('Subtotal', state.order.subtotal), _buildSummaryRow('Pajak', state.order.taxAmount), _buildSummaryRow('Diskon', state.order.discountAmount), - SpaceHeight(8), - DashedDivider(color: AppColor.border), - SpaceHeight(8), + const SpaceHeight(8), + const DashedDivider(color: AppColor.border), + const SpaceHeight(8), _buildSummaryRow( 'Total', state.order.totalAmount, diff --git a/lib/presentation/pages/payment/widgets/payment_right_panel.dart b/lib/presentation/pages/payment/widgets/payment_right_panel.dart index 490a05c..7a80582 100644 --- a/lib/presentation/pages/payment/widgets/payment_right_panel.dart +++ b/lib/presentation/pages/payment/widgets/payment_right_panel.dart @@ -65,7 +65,7 @@ class _PaymentRightPanelState extends State { color: AppColor.white, borderRadius: BorderRadius.circular(12), ), - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -81,19 +81,19 @@ class _PaymentRightPanelState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SpaceHeight(24), + const SpaceHeight(24), Text( 'Metode Pembayaran', style: AppStyle.md.copyWith(fontWeight: FontWeight.w600), ), - SpaceHeight(12), + const SpaceHeight(12), BlocBuilder< PaymentMethodLoaderBloc, PaymentMethodLoaderState >( builder: (context, pmState) { if (pmState.isFetching) { - return Center(child: LoaderWithText()); + return const Center(child: LoaderWithText()); } return pmState.failureOption.fold( () => Wrap( @@ -129,7 +129,7 @@ class _PaymentRightPanelState extends State { ); }, ), - SpaceHeight(24), + const SpaceHeight(24), if (widget.state.paymentMethod != null && widget.state.paymentMethod!.type == 'cash') Column( @@ -233,7 +233,7 @@ class _PaymentRightPanelState extends State { ); } else { context.read().add( - PaymentFormEvent.submitted(), + const PaymentFormEvent.submitted(), ); } } diff --git a/lib/presentation/pages/refund/pages/refund_success/widgets/refund_success_left_panel.dart b/lib/presentation/pages/refund/pages/refund_success/widgets/refund_success_left_panel.dart index 57c687a..5da04a8 100644 --- a/lib/presentation/pages/refund/pages/refund_success/widgets/refund_success_left_panel.dart +++ b/lib/presentation/pages/refund/pages/refund_success/widgets/refund_success_left_panel.dart @@ -69,7 +69,7 @@ class RefundSuccessLeftPanel extends StatelessWidget { color: Colors.white, ), ), - SpaceHeight(16), + const SpaceHeight(16), Text( 'Refund Berhasil!', style: AppStyle.h4.copyWith( @@ -91,7 +91,7 @@ class RefundSuccessLeftPanel extends StatelessWidget { fontWeight: FontWeight.bold, ), ), - SpaceHeight(24), + const SpaceHeight(24), _buildInfoRow( icon: Icons.person, label: 'Pemesan', @@ -205,7 +205,7 @@ class RefundSuccessLeftPanel extends StatelessWidget { // ); }, label: 'Cetak Struk', - icon: Icon(Icons.print_rounded, color: AppColor.white), + icon: const Icon(Icons.print_rounded, color: AppColor.white), ), ), ], diff --git a/lib/presentation/pages/refund/pages/refund_success/widgets/refund_success_right_panel.dart b/lib/presentation/pages/refund/pages/refund_success/widgets/refund_success_right_panel.dart index 4ffaa67..6227e48 100644 --- a/lib/presentation/pages/refund/pages/refund_success/widgets/refund_success_right_panel.dart +++ b/lib/presentation/pages/refund/pages/refund_success/widgets/refund_success_right_panel.dart @@ -70,7 +70,7 @@ class RefundSuccessRightPanel extends StatelessWidget { children: [ Row( children: [ - Icon( + const Icon( Icons.shopping_cart_outlined, size: 16, color: AppColor.textSecondary, @@ -123,13 +123,13 @@ class RefundSuccessRightPanel extends StatelessWidget { color: AppColor.primary.withOpacity(0.2), borderRadius: BorderRadius.circular(8), ), - child: Icon( + child: const Icon( Icons.payments_rounded, size: 16, color: AppColor.primary, ), ), - SpaceWidth(12), + const SpaceWidth(12), Text( 'Total Refund', style: AppStyle.lg.copyWith(fontWeight: FontWeight.bold), @@ -192,7 +192,7 @@ class RefundSuccessRightPanel extends StatelessWidget { color: AppColor.primaryWithOpacity(0.1), borderRadius: BorderRadius.circular(16.0), ), - child: Icon( + child: const Icon( Icons.restaurant_rounded, color: AppColor.primary, size: 28, @@ -281,9 +281,9 @@ class RefundSuccessRightPanel extends StatelessWidget { return Container( width: double.infinity, padding: const EdgeInsets.all(24.0), - decoration: BoxDecoration( + decoration: const BoxDecoration( border: Border(bottom: BorderSide(color: AppColor.border)), - borderRadius: const BorderRadius.vertical(top: Radius.circular(24)), + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), ), child: Row( children: [ @@ -298,13 +298,13 @@ class RefundSuccessRightPanel extends StatelessWidget { ), borderRadius: BorderRadius.circular(16.0), ), - child: Icon( + child: const Icon( Icons.receipt_long_rounded, color: AppColor.primary, size: 28, ), ), - SpaceWidth(16), + const SpaceWidth(16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -313,7 +313,7 @@ class RefundSuccessRightPanel extends StatelessWidget { 'Detail Pesanan', style: AppStyle.xxl.copyWith(fontWeight: FontWeight.bold), ), - SpaceHeight(4), + const SpaceHeight(4), Text( 'Ringkasan item yang dipesan', style: AppStyle.md.copyWith(color: Colors.grey.shade600), diff --git a/lib/presentation/pages/refund/widgets/refund_left_panel.dart b/lib/presentation/pages/refund/widgets/refund_left_panel.dart index 4f08e04..0f558ca 100644 --- a/lib/presentation/pages/refund/widgets/refund_left_panel.dart +++ b/lib/presentation/pages/refund/widgets/refund_left_panel.dart @@ -15,14 +15,14 @@ class RefundLeftPanel extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - decoration: BoxDecoration(color: AppColor.white), + decoration: const BoxDecoration(color: AppColor.white), child: Column( children: [ PageTitle(title: 'Refund Pesanan', subtitle: state.order.orderNumber), _buildInfo(), Expanded( child: ListView.builder( - padding: EdgeInsets.symmetric(horizontal: 16), + padding: const EdgeInsets.symmetric(horizontal: 16), itemCount: state.order.orderItems.length, itemBuilder: (context, index) { return _buildOrderItem(state.order.orderItems[index]); @@ -37,7 +37,7 @@ class RefundLeftPanel extends StatelessWidget { Widget _buildOrderItem(OrderItem item) { return Container( - padding: EdgeInsets.symmetric(vertical: 12), + padding: const EdgeInsets.symmetric(vertical: 12), child: Column( children: [ Row( @@ -80,7 +80,7 @@ class RefundLeftPanel extends StatelessWidget { ], ), if ((item.paidQuantity) > 1) ...[ - SpaceHeight(6), + const SpaceHeight(6), Align( alignment: Alignment.centerRight, child: Container( @@ -132,7 +132,7 @@ class RefundLeftPanel extends StatelessWidget { Container _buildInfo() { return Container( padding: const EdgeInsets.all(16.0), - decoration: BoxDecoration( + decoration: const BoxDecoration( border: Border(bottom: BorderSide(color: AppColor.border)), ), child: Column( @@ -177,8 +177,8 @@ class RefundLeftPanel extends StatelessWidget { Container _buildFooterSummary() { return Container( - padding: EdgeInsets.all(16), - decoration: BoxDecoration( + padding: const EdgeInsets.all(16), + decoration: const BoxDecoration( border: Border(top: BorderSide(color: AppColor.border)), ), child: Column( @@ -187,19 +187,19 @@ class RefundLeftPanel extends StatelessWidget { title: 'Subtotal', value: state.order.subtotal.currencyFormatRpV2, ), - SpaceHeight(4), + const SpaceHeight(4), _buildSummaryItem( title: 'Pajak', value: state.order.taxAmount.currencyFormatRpV2, ), - SpaceHeight(4), + const SpaceHeight(4), _buildSummaryItem( title: 'Diskon', value: state.order.discountAmount.currencyFormatRpV2, ), - SpaceHeight(8), - DashedDivider(color: AppColor.border), - SpaceHeight(8), + const SpaceHeight(8), + const DashedDivider(color: AppColor.border), + const SpaceHeight(8), _buildSummaryItem( title: 'Total Dibayar', value: state.order.totalAmount.currencyFormatRpV2, diff --git a/lib/presentation/pages/refund/widgets/refund_reasong_tile.dart b/lib/presentation/pages/refund/widgets/refund_reasong_tile.dart index 5fac429..888ebe7 100644 --- a/lib/presentation/pages/refund/widgets/refund_reasong_tile.dart +++ b/lib/presentation/pages/refund/widgets/refund_reasong_tile.dart @@ -19,7 +19,7 @@ class RefundReasonTile extends StatelessWidget { return GestureDetector( onTap: onTap, child: AnimatedContainer( - duration: Duration(milliseconds: 300), + duration: const Duration(milliseconds: 300), decoration: BoxDecoration( color: isSelected ? reason.color.withOpacity(0.2) : Colors.grey[100], borderRadius: BorderRadius.circular(16), @@ -36,7 +36,7 @@ class RefundReasonTile extends StatelessWidget { color: isSelected ? reason.color : Colors.grey[600], size: 20, ), - SpaceHeight(4), + const SpaceHeight(4), Text( reason.value, style: TextStyle( diff --git a/lib/presentation/pages/refund/widgets/refund_right_panel.dart b/lib/presentation/pages/refund/widgets/refund_right_panel.dart index 4af9c1f..329d990 100644 --- a/lib/presentation/pages/refund/widgets/refund_right_panel.dart +++ b/lib/presentation/pages/refund/widgets/refund_right_panel.dart @@ -41,7 +41,7 @@ class _RefundRightPanelState extends State { children: [ Expanded( child: SingleChildScrollView( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -52,10 +52,10 @@ class _RefundRightPanelState extends State { color: AppColor.textPrimary, ), ), - SpaceHeight(16), + const SpaceHeight(16), Container( width: context.deviceWidth, - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: AppColor.white, borderRadius: BorderRadius.circular(16), @@ -70,16 +70,17 @@ class _RefundRightPanelState extends State { color: AppColor.primary, ), ), - SpaceHeight(8), + const SpaceHeight(8), GridView.builder( shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 3, - crossAxisSpacing: 12, - mainAxisSpacing: 12, - childAspectRatio: 2.5, - ), + physics: const NeverScrollableScrollPhysics(), + gridDelegate: + const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, + crossAxisSpacing: 12, + mainAxisSpacing: 12, + childAspectRatio: 2.5, + ), itemCount: refundReasons.length, itemBuilder: (context, index) { final reason = refundReasons[index]; @@ -99,7 +100,7 @@ class _RefundRightPanelState extends State { ), if (widget.state.refundReason != null && widget.state.refundReason!.value == 'Lainnya') ...[ - SpaceHeight(8), + const SpaceHeight(8), AppTextFormField( label: 'Masukkan Alasan', controller: reasonController, @@ -122,7 +123,7 @@ class _RefundRightPanelState extends State { Widget _buildBottom() { return Container( padding: const EdgeInsets.all(16), - decoration: BoxDecoration(color: AppColor.white), + decoration: const BoxDecoration(color: AppColor.white), child: Column( mainAxisSize: MainAxisSize.min, children: [ @@ -145,9 +146,9 @@ class _RefundRightPanelState extends State { ), ], ), - SpaceHeight(8), - DashedDivider(color: AppColor.border), - SpaceHeight(16), + const SpaceHeight(8), + const DashedDivider(color: AppColor.border), + const SpaceHeight(16), Row( children: [ Expanded( @@ -156,7 +157,7 @@ class _RefundRightPanelState extends State { label: 'Batal', ), ), - SpaceWidth(16), + const SpaceWidth(16), Expanded( child: AppElevatedButton.filled( onPressed: () { diff --git a/lib/presentation/pages/split_bill/widgets/split_bill_left_panel.dart b/lib/presentation/pages/split_bill/widgets/split_bill_left_panel.dart index 0616498..5e5e5da 100644 --- a/lib/presentation/pages/split_bill/widgets/split_bill_left_panel.dart +++ b/lib/presentation/pages/split_bill/widgets/split_bill_left_panel.dart @@ -16,24 +16,24 @@ class SplitBillLeftPanel extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - decoration: BoxDecoration(color: AppColor.white), + decoration: const BoxDecoration(color: AppColor.white), child: Column( children: [ PageTitle( title: 'Ringkasan Pesanan', subtitle: state.order.orderNumber, ), - SpaceHeight(16), + const SpaceHeight(16), Expanded( child: ListView.builder( - padding: EdgeInsets.symmetric(horizontal: 16), + padding: const EdgeInsets.symmetric(horizontal: 16), itemCount: state.pendingItems.length, itemBuilder: (context, index) { return _buildOrderItem(state.pendingItems[index]); }, ), ), - DashedDivider(color: AppColor.border), + const DashedDivider(color: AppColor.border), Padding( padding: const EdgeInsets.all(16.0), @@ -54,7 +54,7 @@ class SplitBillLeftPanel extends StatelessWidget { title: 'Diskon', value: state.order.discountAmount.currencyFormatRpV2, ), - SpaceHeight(8), + const SpaceHeight(8), ], Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -75,7 +75,7 @@ class SplitBillLeftPanel extends StatelessWidget { ), ], ), - SpaceHeight(4), + const SpaceHeight(4), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -95,7 +95,7 @@ class SplitBillLeftPanel extends StatelessWidget { ), ], ), - SpaceHeight(6), + const SpaceHeight(6), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -135,7 +135,7 @@ class SplitBillLeftPanel extends StatelessWidget { Widget _buildOrderItem(OrderItem item) { return Container( - padding: EdgeInsets.symmetric(vertical: 12), + padding: const EdgeInsets.symmetric(vertical: 12), child: Column( children: [ Row( @@ -178,7 +178,7 @@ class SplitBillLeftPanel extends StatelessWidget { ], ), if ((item.paidQuantity) > 1) ...[ - SpaceHeight(6), + const SpaceHeight(6), Align( alignment: Alignment.centerRight, child: Container( diff --git a/lib/presentation/pages/split_bill/widgets/split_bill_right_panel.dart b/lib/presentation/pages/split_bill/widgets/split_bill_right_panel.dart index d093371..06c4368 100644 --- a/lib/presentation/pages/split_bill/widgets/split_bill_right_panel.dart +++ b/lib/presentation/pages/split_bill/widgets/split_bill_right_panel.dart @@ -47,7 +47,7 @@ class _SplitBillRightPanelState extends State { children: [ Expanded( child: SingleChildScrollView( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -58,17 +58,17 @@ class _SplitBillRightPanelState extends State { color: AppColor.textPrimary, ), ), - SpaceHeight(16), + const SpaceHeight(16), _buildCustomer(context), - SpaceHeight(16), + const SpaceHeight(16), _buildRowButtonSplit(), - SpaceHeight(16), + const SpaceHeight(16), Container( child: widget.state.splitType.isItem ? _buildPerProductSplit() : _buildPerAmountSplit(), ), - SpaceHeight(16), + const SpaceHeight(16), ], ), ), @@ -81,7 +81,7 @@ class _SplitBillRightPanelState extends State { Widget _buildBottom() { return Container( padding: const EdgeInsets.all(16), - decoration: BoxDecoration(color: AppColor.white), + decoration: const BoxDecoration(color: AppColor.white), child: Row( children: [ Expanded( @@ -90,7 +90,7 @@ class _SplitBillRightPanelState extends State { label: 'Batal', ), ), - SpaceWidth(16), + const SpaceWidth(16), Expanded( child: AppElevatedButton.filled( onPressed: () => _confirmSplit(), @@ -113,11 +113,11 @@ class _SplitBillRightPanelState extends State { color: AppColor.textPrimary, ), ), - SizedBox(height: 16), + const SizedBox(height: 16), Column( children: [ Container( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: AppColor.white, border: Border.all(color: AppColor.border), @@ -133,12 +133,12 @@ class _SplitBillRightPanelState extends State { color: AppColor.primary, ), ), - SizedBox(height: 16), + const SizedBox(height: 16), Text( 'Jumlah yang akan dibayar:', style: AppStyle.md.copyWith(color: AppColor.textSecondary), ), - SizedBox(height: 8), + const SizedBox(height: 8), Container( decoration: BoxDecoration( border: Border.all(color: AppColor.border), @@ -169,11 +169,11 @@ class _SplitBillRightPanelState extends State { color: AppColor.textPrimary, ), border: InputBorder.none, - contentPadding: EdgeInsets.all(16), + contentPadding: const EdgeInsets.all(16), ), ), ), - SizedBox(height: 16), + const SizedBox(height: 16), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -193,7 +193,7 @@ class _SplitBillRightPanelState extends State { ), ], ), - SizedBox(height: 8), + const SizedBox(height: 8), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -233,9 +233,9 @@ class _SplitBillRightPanelState extends State { color: AppColor.textPrimary, ), ), - SizedBox(height: 16), + const SizedBox(height: 16), Container( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: AppColor.white, border: Border.all(color: AppColor.border), @@ -251,11 +251,11 @@ class _SplitBillRightPanelState extends State { color: AppColor.primary, ), ), - SizedBox(height: 16), + const SizedBox(height: 16), ListView.builder( itemCount: widget.state.pendingItems.length, shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), + physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { return _buildProductSplitItem( widget.state.pendingItems[index], @@ -266,7 +266,7 @@ class _SplitBillRightPanelState extends State { width: double.infinity, height: 1, color: AppColor.border, - margin: EdgeInsets.symmetric(vertical: 12), + margin: const EdgeInsets.symmetric(vertical: 12), ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -299,8 +299,8 @@ class _SplitBillRightPanelState extends State { int maxQty = (item.quantity) - (item.paidQuantity); return Container( - margin: EdgeInsets.only(bottom: 12), - padding: EdgeInsets.all(12), + margin: const EdgeInsets.only(bottom: 12), + padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: selectedQty > 0 ? AppColor.primary.withOpacity(0.1) @@ -372,7 +372,7 @@ class _SplitBillRightPanelState extends State { Container( width: 40, height: 32, - margin: EdgeInsets.symmetric(horizontal: 8), + margin: const EdgeInsets.symmetric(horizontal: 8), decoration: BoxDecoration( border: Border.all(color: AppColor.border), borderRadius: BorderRadius.circular(4), @@ -431,7 +431,7 @@ class _SplitBillRightPanelState extends State { return Row( children: [ _buildSplitTypeButton('Per Produk', SplitType.item), - SizedBox(width: 16), + const SizedBox(width: 16), _buildSplitTypeButton('Per Jumlah', SplitType.amount), ], ); @@ -448,7 +448,7 @@ class _SplitBillRightPanelState extends State { ); }, child: Container( - padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), + padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12), decoration: BoxDecoration( color: isSelected ? AppColor.primary : Colors.transparent, border: Border.all( @@ -470,7 +470,7 @@ class _SplitBillRightPanelState extends State { Widget _buildCustomer(BuildContext context) { return Container( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: AppColor.white, borderRadius: BorderRadius.circular(12), diff --git a/lib/presentation/pages/sync/sync_page.dart b/lib/presentation/pages/sync/sync_page.dart index 98121f7..2c62155 100644 --- a/lib/presentation/pages/sync/sync_page.dart +++ b/lib/presentation/pages/sync/sync_page.dart @@ -22,7 +22,7 @@ class SyncPage extends StatefulWidget implements AutoRouteWrapper { @override Widget wrappedRoute(BuildContext context) => BlocProvider( - create: (context) => getIt()..add(SyncEvent.startSync()), + create: (context) => getIt()..add(const SyncEvent.startSync()), child: this, ); } @@ -35,7 +35,7 @@ class _SyncPageState extends State with TickerProviderStateMixin { void initState() { super.initState(); _animationController = AnimationController( - duration: Duration(milliseconds: 500), + duration: const Duration(milliseconds: 500), vsync: this, ); _progressAnimation = Tween(begin: 0.0, end: 1.0).animate( @@ -66,7 +66,7 @@ class _SyncPageState extends State with TickerProviderStateMixin { // Tunggu sebentar lalu pindah ke dashboard Future.delayed(const Duration(seconds: 2), () { - context.router.replace(MainRoute()); + context.router.replace(const MainRoute()); }); } // Kalau error @@ -76,7 +76,7 @@ class _SyncPageState extends State with TickerProviderStateMixin { }, builder: (context, state) { return Padding( - padding: EdgeInsets.symmetric(horizontal: 32, vertical: 16), + padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16), child: Row( children: [ Expanded( @@ -85,13 +85,13 @@ class _SyncPageState extends State with TickerProviderStateMixin { mainAxisAlignment: MainAxisAlignment.center, children: [ _buildHeader(), - SizedBox(height: 20), + const SizedBox(height: 20), _buildActions(state), ], ), ), - SpaceWidth(40), - SizedBox(width: 40), + const SpaceWidth(40), + const SizedBox(width: 40), Expanded( flex: 3, child: SizedBox( @@ -119,7 +119,7 @@ class _SyncPageState extends State with TickerProviderStateMixin { } // Kondisi default: initial - return SyncInitialWidget(); + return const SyncInitialWidget(); }, ), ), @@ -138,7 +138,7 @@ class _SyncPageState extends State with TickerProviderStateMixin { mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.error_outline, size: 48, color: Colors.red.shade400), - SizedBox(height: 12), + const SizedBox(height: 12), Text( 'Sinkronisasi Gagal', style: TextStyle( @@ -147,9 +147,9 @@ class _SyncPageState extends State with TickerProviderStateMixin { color: Colors.red.shade600, ), ), - SizedBox(height: 8), + const SizedBox(height: 8), Container( - padding: EdgeInsets.all(12), + padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: Colors.red.shade50, borderRadius: BorderRadius.circular(8), @@ -160,7 +160,7 @@ class _SyncPageState extends State with TickerProviderStateMixin { textAlign: TextAlign.center, ), ), - SizedBox(height: 12), + const SizedBox(height: 12), Text( 'Periksa koneksi internet dan coba lagi', style: TextStyle(fontSize: 12, color: Colors.grey.shade600), @@ -180,9 +180,9 @@ class _SyncPageState extends State with TickerProviderStateMixin { color: AppColor.primary.withOpacity(0.1), borderRadius: BorderRadius.circular(15), ), - child: Icon(Icons.sync, size: 30, color: AppColor.primary), + child: const Icon(Icons.sync, size: 30, color: AppColor.primary), ), - SizedBox(height: 12), + const SizedBox(height: 12), Text( 'Sinkronisasi Data', style: TextStyle( @@ -191,7 +191,7 @@ class _SyncPageState extends State with TickerProviderStateMixin { color: Colors.grey.shade800, ), ), - SizedBox(height: 8), + const SizedBox(height: 8), Text( 'Mengunduh kategori dan produk terbaru', style: TextStyle(fontSize: 16, color: Colors.grey.shade600), @@ -215,7 +215,7 @@ class _SyncPageState extends State with TickerProviderStateMixin { if (state.stats != null && state.errorMessage == null) { return AppElevatedButton.filled( onPressed: () { - context.router.replace(MainRoute()); + context.router.replace(const MainRoute()); }, label: 'Lanjutkan ke Aplikasi', ); @@ -228,7 +228,7 @@ class _SyncPageState extends State with TickerProviderStateMixin { Expanded( child: AppElevatedButton.outlined( onPressed: () { - context.router.replace(MainRoute()); + context.router.replace(const MainRoute()); }, label: 'Lewati', ), diff --git a/lib/presentation/pages/sync/widgets/sync_completed.dart b/lib/presentation/pages/sync/widgets/sync_completed.dart index b6eb5ef..9291257 100644 --- a/lib/presentation/pages/sync/widgets/sync_completed.dart +++ b/lib/presentation/pages/sync/widgets/sync_completed.dart @@ -27,7 +27,7 @@ class SyncCompletedWidget extends StatelessWidget { ), ), - SizedBox(height: 20), + const SizedBox(height: 20), Text( 'Sinkronisasi Berhasil!', @@ -38,18 +38,18 @@ class SyncCompletedWidget extends StatelessWidget { ), ), - SizedBox(height: 8), + const SizedBox(height: 8), Text( 'Data berhasil diunduh ke perangkat', style: TextStyle(fontSize: 14, color: Colors.grey.shade600), ), - SizedBox(height: 20), + const SizedBox(height: 20), // Stats cards Container( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), @@ -65,7 +65,7 @@ class SyncCompletedWidget extends StatelessWidget { color: Colors.grey.shade700, ), ), - SizedBox(height: 12), + const SizedBox(height: 12), Column( children: [ _buildStatItem( @@ -74,14 +74,14 @@ class SyncCompletedWidget extends StatelessWidget { Icons.category, Colors.blue, ), - SizedBox(height: 8), + const SizedBox(height: 8), _buildStatItem( 'Produk', '${stats.totalProducts}', Icons.inventory_2, Colors.green, ), - SizedBox(height: 8), + const SizedBox(height: 8), _buildStatItem( 'Variant', '${stats.totalVariants}', @@ -94,10 +94,10 @@ class SyncCompletedWidget extends StatelessWidget { ), ), - SizedBox(height: 12), + const SizedBox(height: 12), Container( - padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), decoration: BoxDecoration( color: Colors.grey.shade100, borderRadius: BorderRadius.circular(6), @@ -119,7 +119,7 @@ class SyncCompletedWidget extends StatelessWidget { Color color, ) { return Container( - padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: BoxDecoration( color: color.withOpacity(0.1), borderRadius: BorderRadius.circular(8), @@ -128,7 +128,7 @@ class SyncCompletedWidget extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ Icon(icon, size: 20, color: color), - SizedBox(width: 8), + const SizedBox(width: 8), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/lib/presentation/pages/sync/widgets/sync_initial.dart b/lib/presentation/pages/sync/widgets/sync_initial.dart index 24070b5..7543d32 100644 --- a/lib/presentation/pages/sync/widgets/sync_initial.dart +++ b/lib/presentation/pages/sync/widgets/sync_initial.dart @@ -11,12 +11,12 @@ class SyncInitialWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.download_rounded, size: 48, color: Colors.grey.shade400), - SizedBox(height: 12), + const SizedBox(height: 12), Text( 'Siap untuk sinkronisasi', style: AppStyle.lg.copyWith(fontWeight: FontWeight.w500), ), - SizedBox(height: 4), + const SizedBox(height: 4), Text( 'Tekan tombol mulai untuk mengunduh data', style: AppStyle.sm.copyWith(color: Colors.grey.shade600), diff --git a/lib/presentation/pages/sync/widgets/sync_state.dart b/lib/presentation/pages/sync/widgets/sync_state.dart index 7dd5f1e..de8537c 100644 --- a/lib/presentation/pages/sync/widgets/sync_state.dart +++ b/lib/presentation/pages/sync/widgets/sync_state.dart @@ -36,7 +36,7 @@ class SyncStateWidget extends StatelessWidget { value: progressAnimation.value, strokeWidth: 6, backgroundColor: Colors.grey.shade200, - valueColor: AlwaysStoppedAnimation( + valueColor: const AlwaysStoppedAnimation( AppColor.primary, ), ); @@ -46,13 +46,13 @@ class SyncStateWidget extends StatelessWidget { Column( children: [ Icon(_getSyncIcon(step), size: 24, color: AppColor.primary), - SizedBox(height: 2), + const SizedBox(height: 2), AnimatedBuilder( animation: progressAnimation, builder: (context, child) { return Text( '${(progressAnimation.value * 100).toInt()}%', - style: TextStyle( + style: const TextStyle( fontSize: 14, fontWeight: FontWeight.bold, color: AppColor.primary, @@ -65,16 +65,16 @@ class SyncStateWidget extends StatelessWidget { ], ), - SizedBox(height: 20), + const SizedBox(height: 20), // Step indicator _buildStepIndicator(step), - SizedBox(height: 12), + const SizedBox(height: 12), // Current message Container( - padding: EdgeInsets.symmetric(horizontal: 16, vertical: 12), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), decoration: BoxDecoration( color: Colors.blue.shade50, borderRadius: BorderRadius.circular(8), @@ -90,7 +90,7 @@ class SyncStateWidget extends StatelessWidget { ), ), - SizedBox(height: 12), + const SizedBox(height: 12), // Sync details _buildSyncDetails(step, progress), @@ -101,7 +101,7 @@ class SyncStateWidget extends StatelessWidget { Widget _buildSyncDetails(SyncStep step, double progress) { return Container( - padding: EdgeInsets.all(12), + padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8), @@ -122,7 +122,7 @@ class SyncStateWidget extends StatelessWidget { ), Text( _getStepLabel(step), - style: TextStyle( + style: const TextStyle( fontSize: 12, fontWeight: FontWeight.w600, color: AppColor.primary, @@ -130,7 +130,7 @@ class SyncStateWidget extends StatelessWidget { ), ], ), - SizedBox(height: 6), + const SizedBox(height: 6), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -144,7 +144,7 @@ class SyncStateWidget extends StatelessWidget { ), Text( '${(progress * 100).toInt()}%', - style: TextStyle( + style: const TextStyle( fontSize: 12, fontWeight: FontWeight.w600, color: AppColor.primary, @@ -172,8 +172,8 @@ class SyncStateWidget extends StatelessWidget { final isCompleted = step.index < currentStep.index; return Container( - margin: EdgeInsets.symmetric(vertical: 2), - padding: EdgeInsets.symmetric(horizontal: 8, vertical: 4), + margin: const EdgeInsets.symmetric(vertical: 2), + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), decoration: BoxDecoration( color: isActive ? AppColor.primary.withOpacity(0.1) @@ -194,7 +194,7 @@ class SyncStateWidget extends StatelessWidget { ? Colors.green.shade600 : Colors.grey.shade500, ), - SizedBox(width: 4), + const SizedBox(width: 4), Text( label, style: TextStyle( diff --git a/lib/presentation/pages/void/pages/void_success/void_success_page.dart b/lib/presentation/pages/void/pages/void_success/void_success_page.dart index c30e8cd..d760e24 100644 --- a/lib/presentation/pages/void/pages/void_success/void_success_page.dart +++ b/lib/presentation/pages/void/pages/void_success/void_success_page.dart @@ -43,7 +43,7 @@ class VoidSuccessPage extends StatelessWidget { flex: 35, child: VoidSuccessLeftPanel(state: state), ), - SpaceWidth(16), + const SpaceWidth(16), Expanded( flex: 65, child: VoidSuccessRightPanel(state: state), diff --git a/lib/presentation/pages/void/pages/void_success/widgets/void_success_left_panel.dart b/lib/presentation/pages/void/pages/void_success/widgets/void_success_left_panel.dart index 3239008..3f23cc1 100644 --- a/lib/presentation/pages/void/pages/void_success/widgets/void_success_left_panel.dart +++ b/lib/presentation/pages/void/pages/void_success/widgets/void_success_left_panel.dart @@ -22,14 +22,14 @@ class VoidSuccessLeftPanel extends StatelessWidget { color: Colors.white, borderRadius: BorderRadius.circular(24), ), - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), child: Column( children: [ Container( width: 120, height: 120, decoration: BoxDecoration( - gradient: LinearGradient( + gradient: const LinearGradient( colors: [AppColor.secondaryLight, AppColor.secondaryDark], begin: Alignment.topLeft, end: Alignment.bottomRight, @@ -39,14 +39,18 @@ class VoidSuccessLeftPanel extends StatelessWidget { BoxShadow( color: AppColor.secondaryDark.withOpacity(0.2), blurRadius: 20, - offset: Offset(0, 10), + offset: const Offset(0, 10), ), ], ), - child: Icon(Icons.check_rounded, color: Colors.white, size: 60), + child: const Icon( + Icons.check_rounded, + color: Colors.white, + size: 60, + ), ), - SpaceHeight(16), + const SpaceHeight(16), Text( 'Void Berhasil!', style: AppStyle.h1.copyWith( @@ -55,7 +59,7 @@ class VoidSuccessLeftPanel extends StatelessWidget { ), textAlign: TextAlign.center, ), - SpaceHeight(8), + const SpaceHeight(8), Text( state.voidType.isAll ? 'Seluruh pesanan telah dibatalkan dengan sukses' @@ -66,7 +70,7 @@ class VoidSuccessLeftPanel extends StatelessWidget { ), textAlign: TextAlign.center, ), - SpaceHeight(16), + const SpaceHeight(16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -75,7 +79,7 @@ class VoidSuccessLeftPanel extends StatelessWidget { 'Informasi Pesanan', style: AppStyle.lg.copyWith(fontWeight: FontWeight.bold), ), - SpaceHeight(24), + const SpaceHeight(24), _buildInfoRow( icon: Icons.receipt_long, label: 'Order ID', @@ -139,7 +143,7 @@ class VoidSuccessLeftPanel extends StatelessWidget { child: AppElevatedButton.outlined( onPressed: () { context.read().add( - VoidFormEvent.clearState(), + const VoidFormEvent.clearState(), ); context.router.replaceAll([const MainRoute()]); }, @@ -167,7 +171,7 @@ class VoidSuccessLeftPanel extends StatelessWidget { ); }, label: 'Cetak Struk', - icon: Icon(Icons.print_rounded, color: AppColor.white), + icon: const Icon(Icons.print_rounded, color: AppColor.white), ), ), ], diff --git a/lib/presentation/pages/void/pages/void_success/widgets/void_success_right_panel.dart b/lib/presentation/pages/void/pages/void_success/widgets/void_success_right_panel.dart index 7f1d384..6a80437 100644 --- a/lib/presentation/pages/void/pages/void_success/widgets/void_success_right_panel.dart +++ b/lib/presentation/pages/void/pages/void_success/widgets/void_success_right_panel.dart @@ -79,7 +79,7 @@ class VoidSuccessRightPanel extends StatelessWidget { ), ], ), - SpaceWidth(6), + const SpaceWidth(6), Expanded( child: Text( state.voidReason ?? '', @@ -121,13 +121,13 @@ class VoidSuccessRightPanel extends StatelessWidget { color: AppColor.primary.withOpacity(0.2), borderRadius: BorderRadius.circular(8), ), - child: Icon( + child: const Icon( Icons.payments_rounded, size: 16, color: AppColor.primary, ), ), - SpaceWidth(12), + const SpaceWidth(12), Text( 'Total Void', style: AppStyle.lg.copyWith(fontWeight: FontWeight.bold), @@ -192,7 +192,7 @@ class VoidSuccessRightPanel extends StatelessWidget { color: AppColor.primaryWithOpacity(0.1), borderRadius: BorderRadius.circular(16.0), ), - child: Icon( + child: const Icon( Icons.restaurant_rounded, color: AppColor.primary, size: 28, @@ -281,9 +281,9 @@ class VoidSuccessRightPanel extends StatelessWidget { return Container( width: double.infinity, padding: const EdgeInsets.all(16.0), - decoration: BoxDecoration( + decoration: const BoxDecoration( border: Border(bottom: BorderSide(color: AppColor.border)), - borderRadius: const BorderRadius.vertical(top: Radius.circular(24)), + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), ), child: Row( children: [ @@ -298,13 +298,13 @@ class VoidSuccessRightPanel extends StatelessWidget { ), borderRadius: BorderRadius.circular(16.0), ), - child: Icon( + child: const Icon( Icons.info_outline_rounded, color: AppColor.primary, size: 28, ), ), - SpaceWidth(16), + const SpaceWidth(16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -313,7 +313,7 @@ class VoidSuccessRightPanel extends StatelessWidget { 'Detail Void', style: AppStyle.xxl.copyWith(fontWeight: FontWeight.bold), ), - SpaceHeight(4), + const SpaceHeight(4), Text( 'Ringkasan item yang divoid', style: AppStyle.md.copyWith(color: AppColor.textSecondary), diff --git a/lib/presentation/pages/void/void_page.dart b/lib/presentation/pages/void/void_page.dart index aa8d34e..0049236 100644 --- a/lib/presentation/pages/void/void_page.dart +++ b/lib/presentation/pages/void/void_page.dart @@ -28,7 +28,7 @@ class VoidPage extends StatelessWidget implements AutoRouteWrapper { (f) => AppFlushbar.showOrderFailureToast(context, f), (success) { if (context.mounted) { - context.router.replace(VoidSuccessRoute()); + context.router.replace(const VoidSuccessRoute()); } }, ), @@ -40,12 +40,12 @@ class VoidPage extends StatelessWidget implements AutoRouteWrapper { child: BlocBuilder( builder: (context, state) { return Container( - padding: EdgeInsets.all(24), + padding: const EdgeInsets.all(24), child: Row( children: [ // Left Panel - Order Details & Items Expanded(flex: 3, child: VoidLeftPanel(state: state)), - SpaceWidth(24), + const SpaceWidth(24), // Right Panel - Void Configuration Expanded(flex: 2, child: VoidRightPanel(state: state)), ], diff --git a/lib/presentation/pages/void/widgets/void_left_panel.dart b/lib/presentation/pages/void/widgets/void_left_panel.dart index c235b61..114e7f2 100644 --- a/lib/presentation/pages/void/widgets/void_left_panel.dart +++ b/lib/presentation/pages/void/widgets/void_left_panel.dart @@ -36,8 +36,8 @@ class _VoidLeftPanelState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - padding: EdgeInsets.all(16), - decoration: BoxDecoration( + padding: const EdgeInsets.all(16), + decoration: const BoxDecoration( border: Border( bottom: BorderSide(width: 1, color: AppColor.border), ), @@ -48,8 +48,12 @@ class _VoidLeftPanelState extends State { ), child: Row( children: [ - Icon(Icons.receipt_long, color: AppColor.primary, size: 24), - SpaceWidth(12), + const Icon( + Icons.receipt_long, + color: AppColor.primary, + size: 24, + ), + const SpaceWidth(12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -71,7 +75,10 @@ class _VoidLeftPanelState extends State { ), ), Container( - padding: EdgeInsets.symmetric(horizontal: 12, vertical: 6), + padding: const EdgeInsets.symmetric( + horizontal: 12, + vertical: 6, + ), decoration: BoxDecoration( color: _getStatusColor( widget.state.order.status, @@ -95,18 +102,18 @@ class _VoidLeftPanelState extends State { thumbVisibility: true, child: SingleChildScrollView( controller: _scrollController, - padding: EdgeInsets.all(20), + padding: const EdgeInsets.all(20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ - Icon( + const Icon( Icons.shopping_cart, color: AppColor.primary, size: 20, ), - SpaceWidth(8), + const SpaceWidth(8), Text( 'Produk Pesanan (${widget.state.pendingItems.length})', style: AppStyle.lg.copyWith( @@ -116,7 +123,7 @@ class _VoidLeftPanelState extends State { ), ], ), - SpaceHeight(16), + const SpaceHeight(16), ...List.generate(widget.state.pendingItems.length, (index) { final item = widget.state.pendingItems[index]; @@ -158,7 +165,7 @@ class _VoidLeftPanelState extends State { ), ), Container( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), child: Column( children: [ _buildSummaryRow( @@ -173,7 +180,7 @@ class _VoidLeftPanelState extends State { // 'Diskon:', // '- ${(widget.state.order.discountAmount).currencyFormatRpV2}', // ), - Divider(thickness: 1), + const Divider(thickness: 1), _buildSummaryRow( 'Total:', (widget.state.order.totalAmount).currencyFormatRpV2, @@ -203,7 +210,7 @@ class _VoidLeftPanelState extends State { bool isVoid = false, }) { return Padding( - padding: EdgeInsets.symmetric(vertical: 4), + padding: const EdgeInsets.symmetric(vertical: 4), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ diff --git a/lib/presentation/pages/void/widgets/void_product_card.dart b/lib/presentation/pages/void/widgets/void_product_card.dart index cc61bd4..972b54b 100644 --- a/lib/presentation/pages/void/widgets/void_product_card.dart +++ b/lib/presentation/pages/void/widgets/void_product_card.dart @@ -25,7 +25,7 @@ class VoidProductCard extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - margin: EdgeInsets.only(bottom: 12), + margin: const EdgeInsets.only(bottom: 12), decoration: BoxDecoration( color: isSelected ? AppColor.primary.withOpacity(0.1) : Colors.white, border: Border.all( @@ -35,7 +35,7 @@ class VoidProductCard extends StatelessWidget { borderRadius: BorderRadius.circular(8), ), child: Padding( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), child: Column( children: [ Row( @@ -58,11 +58,11 @@ class VoidProductCard extends StatelessWidget { color: AppColor.textSecondary, ), ), - SpaceHeight(4), + const SpaceHeight(4), Row( children: [ Container( - padding: EdgeInsets.symmetric( + padding: const EdgeInsets.symmetric( horizontal: 8, vertical: 2, ), @@ -78,7 +78,7 @@ class VoidProductCard extends StatelessWidget { ), ), ), - SpaceWidth(8), + const SpaceWidth(8), Text( (item.unitPrice).currencyFormatRpV2, style: AppStyle.sm.copyWith( @@ -89,9 +89,9 @@ class VoidProductCard extends StatelessWidget { ), if (item.notes.isNotEmpty) Padding( - padding: EdgeInsets.only(top: 4), + padding: const EdgeInsets.only(top: 4), child: Container( - padding: EdgeInsets.symmetric( + padding: const EdgeInsets.symmetric( horizontal: 8, vertical: 2, ), @@ -124,7 +124,7 @@ class VoidProductCard extends StatelessWidget { InkWell( onTap: onTapDecrease, child: Container( - padding: EdgeInsets.all(8), + padding: const EdgeInsets.all(8), child: Icon( Icons.remove, size: 16, @@ -137,11 +137,11 @@ class VoidProductCard extends StatelessWidget { // Quantity Display Container( - padding: EdgeInsets.symmetric( + padding: const EdgeInsets.symmetric( horizontal: 16, vertical: 8, ), - decoration: BoxDecoration( + decoration: const BoxDecoration( border: Border.symmetric( vertical: BorderSide(color: AppColor.border), ), @@ -158,7 +158,7 @@ class VoidProductCard extends StatelessWidget { InkWell( onTap: onTapIncrease, child: Container( - padding: EdgeInsets.all(8), + padding: const EdgeInsets.all(8), child: Icon( Icons.add, size: 16, @@ -171,7 +171,7 @@ class VoidProductCard extends StatelessWidget { ], ), ), - SpaceWidth(20), + const SpaceWidth(20), ], // Price Column( @@ -186,7 +186,7 @@ class VoidProductCard extends StatelessWidget { ), if (isSelected) Container( - padding: EdgeInsets.symmetric( + padding: const EdgeInsets.symmetric( horizontal: 6, vertical: 2, ), diff --git a/lib/presentation/pages/void/widgets/void_right_panel.dart b/lib/presentation/pages/void/widgets/void_right_panel.dart index d3b92cf..3b83110 100644 --- a/lib/presentation/pages/void/widgets/void_right_panel.dart +++ b/lib/presentation/pages/void/widgets/void_right_panel.dart @@ -40,8 +40,8 @@ class _VoidRightPanelState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - padding: EdgeInsets.all(20), - decoration: BoxDecoration( + padding: const EdgeInsets.all(20), + decoration: const BoxDecoration( border: Border( bottom: BorderSide(width: 1, color: AppColor.border), ), @@ -68,7 +68,7 @@ class _VoidRightPanelState extends State { thumbVisibility: true, child: SingleChildScrollView( controller: _scrollController, - padding: EdgeInsets.all(20), + padding: const EdgeInsets.all(20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -79,7 +79,7 @@ class _VoidRightPanelState extends State { color: AppColor.primary, ), ), - SpaceHeight(12), + const SpaceHeight(12), VoidRadio( voidType: widget.state.voidType, value: VoidType.all, @@ -87,14 +87,14 @@ class _VoidRightPanelState extends State { subtitle: "Batalkan pesanan lengkap dan semua item", onChanged: (VoidType? value) { context.read().add( - VoidFormEvent.clearSelectedItem(), + const VoidFormEvent.clearSelectedItem(), ); context.read().add( VoidFormEvent.voidTypeChanged(value!), ); }, ), - SpaceHeight(12), + const SpaceHeight(12), VoidRadio( voidType: widget.state.voidType, value: VoidType.item, @@ -107,12 +107,12 @@ class _VoidRightPanelState extends State { ); }, ), - SpaceHeight(24), + const SpaceHeight(24), // Selected Items Summary (only show for item void) if (widget.state.voidType.isItem) ...[ Container( - padding: EdgeInsets.all(16), + padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: widget.state.selectedItemQuantities.isEmpty ? AppColor.warning.withOpacity(0.1) @@ -142,7 +142,7 @@ class _VoidRightPanelState extends State { : AppColor.success, size: 20, ), - SpaceWidth(8), + const SpaceWidth(8), Expanded( child: Text( widget.state.selectedItemQuantities.isEmpty @@ -166,9 +166,11 @@ class _VoidRightPanelState extends State { .state .selectedItemQuantities .isNotEmpty) ...[ - SpaceHeight(12), + const SpaceHeight(12), Container( - constraints: BoxConstraints(maxHeight: 150), + constraints: const BoxConstraints( + maxHeight: 150, + ), child: Scrollbar( child: SingleChildScrollView( child: Column( @@ -188,10 +190,10 @@ class _VoidRightPanelState extends State { item.id == entry.key, ); return Container( - margin: EdgeInsets.only( + margin: const EdgeInsets.only( bottom: 8, ), - padding: EdgeInsets.all(8), + padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.white, borderRadius: @@ -247,9 +249,9 @@ class _VoidRightPanelState extends State { ), ), ), - Divider(height: 16, thickness: 1), + const Divider(height: 16, thickness: 1), Container( - padding: EdgeInsets.all(8), + padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: AppColor.error, borderRadius: BorderRadius.circular(6), @@ -282,7 +284,7 @@ class _VoidRightPanelState extends State { ], ), ), - SpaceHeight(24), + const SpaceHeight(24), ], Text( @@ -292,7 +294,7 @@ class _VoidRightPanelState extends State { color: AppColor.primary, ), ), - SpaceHeight(8), + const SpaceHeight(8), AppTextFormField( label: 'Harap berikan alasan untuk membatalkan...', showLabel: false, @@ -303,7 +305,7 @@ class _VoidRightPanelState extends State { ); }, ), - SpaceHeight(32), + const SpaceHeight(32), ], ), ), @@ -312,7 +314,7 @@ class _VoidRightPanelState extends State { // Action Buttons Padding( - padding: EdgeInsets.all(20), + padding: const EdgeInsets.all(20), child: Row( children: [ Expanded( @@ -321,7 +323,7 @@ class _VoidRightPanelState extends State { label: 'Batal', ), ), - SpaceWidth(12), + const SpaceWidth(12), Expanded( child: AppElevatedButton.filled( onPressed: _canProcessVoid() ? _processVoid : null,