From 98b152cbc23c5dcac615e8f00ca141df0e2bf50c Mon Sep 17 00:00:00 2001 From: efrilm Date: Tue, 4 Nov 2025 22:22:13 +0700 Subject: [PATCH] printer checker --- .../datasource/local_data_provider.dart | 4 +- .../printer/setting_printer_checker.dart | 103 ++++++++++++++++++ .../printer/setting_printer_receipt.dart | 70 +++++++----- .../sections/setting_printer_section.dart | 3 +- 4 files changed, 150 insertions(+), 30 deletions(-) create mode 100644 lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_checker.dart diff --git a/lib/infrastructure/printer/datasource/local_data_provider.dart b/lib/infrastructure/printer/datasource/local_data_provider.dart index 432acf6..2b6ab91 100644 --- a/lib/infrastructure/printer/datasource/local_data_provider.dart +++ b/lib/infrastructure/printer/datasource/local_data_provider.dart @@ -123,9 +123,7 @@ class PrinterLocalDataProvider { if (result.isEmpty) { log('Printer with code $code not found'); - return DC.error( - PrinterFailure.dynamicErrorMessage('Printer not found'), - ); + return DC.error(PrinterFailure.empty()); } final printer = PrinterDto.fromJson(result.first); 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 new file mode 100644 index 0000000..957ef08 --- /dev/null +++ b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_checker.dart @@ -0,0 +1,103 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../../../../../../../application/printer/printer_loader/printer_loader_bloc.dart'; +import '../../../../../../../common/theme/theme.dart'; +import '../../../../../../components/card/error_card.dart'; +import '../../../../../../components/loader/loader_with_text.dart'; +import '../../widgets/printer_card.dart'; +import 'setting_printer_form.dart'; + +class SettingPrinterChecker extends StatefulWidget { + const SettingPrinterChecker({super.key}); + + @override + State createState() => _SettingPrinterCheckerState(); +} + +class _SettingPrinterCheckerState extends State { + bool isEdit = false; + @override + initState() { + context.read().add( + const PrinterLoaderEvent.getByCode('checker'), + ); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Material( + color: AppColor.background, + child: SingleChildScrollView( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + BlocBuilder( + builder: (context, state) { + if (state.isFetching) { + return const Center(child: LoaderWithText()); + } + + if (state.printer.code == '') { + return SettingPrinterForm( + code: 'checker', + onSuccess: () { + context.read().add( + PrinterLoaderEvent.getByCode('checker'), + ); + }, + ); + } + + return state.failureOption.fold( + () => isEdit + ? SettingPrinterForm( + code: 'checker', + printer: state.printer, + onCancel: () { + setState(() { + isEdit = false; + }); + }, + onSuccess: () { + context.read().add( + PrinterLoaderEvent.getByCode('checker'), + ); + setState(() { + isEdit = false; + }); + }, + ) + : PrinterCard( + printer: state.printer, + onEdit: () { + setState(() { + isEdit = true; + }); + }, + ), + (f) => f.maybeMap( + orElse: () => ErrorCard( + title: 'Error', + message: 'Terjadi Kesalahan', + onTap: () {}, + ), + empty: (value) => SettingPrinterForm( + code: 'checker', + onSuccess: () { + context.read().add( + PrinterLoaderEvent.getByCode('checker'), + ); + }, + ), + ), + ); + }, + ), + ], + ), + ), + ); + } +} 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 9f46b34..9111fe9 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 @@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../../../../../application/printer/printer_loader/printer_loader_bloc.dart'; import '../../../../../../../common/theme/theme.dart'; +import '../../../../../../components/card/error_card.dart'; import '../../../../../../components/loader/loader_with_text.dart'; import '../../widgets/printer_card.dart'; import 'setting_printer_form.dart'; @@ -49,32 +50,49 @@ class _SettingPrinterReceiptState extends State { ); } - return isEdit - ? SettingPrinterForm( - code: 'receipt', - printer: state.printer, - onCancel: () { - setState(() { - isEdit = false; - }); - }, - onSuccess: () { - context.read().add( - PrinterLoaderEvent.getByCode('receipt'), - ); - setState(() { - isEdit = false; - }); - }, - ) - : PrinterCard( - printer: state.printer, - onEdit: () { - setState(() { - isEdit = true; - }); - }, - ); + return state.failureOption.fold( + () => isEdit + ? SettingPrinterForm( + code: 'receipt', + printer: state.printer, + onCancel: () { + setState(() { + isEdit = false; + }); + }, + onSuccess: () { + context.read().add( + PrinterLoaderEvent.getByCode('receipt'), + ); + setState(() { + isEdit = false; + }); + }, + ) + : PrinterCard( + printer: state.printer, + onEdit: () { + setState(() { + isEdit = true; + }); + }, + ), + (f) => f.maybeMap( + orElse: () => ErrorCard( + title: "Error", + message: "Terjadi kesalahan saat memuat printer", + onTap: () {}, + ), + empty: (value) => SettingPrinterForm( + code: 'receipt', + onSuccess: () { + context.read().add( + PrinterLoaderEvent.getByCode('receipt'), + ); + }, + ), + ), + ); }, ), ], 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 77341a2..597ad19 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 @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import '../../../../../components/page/page_title.dart'; import '../../../../../components/tab/custom_tabbar.dart'; +import 'printer/setting_printer_checker.dart'; import 'printer/setting_printer_receipt.dart'; class SettingPrinterSection extends StatelessWidget { @@ -27,7 +28,7 @@ class SettingPrinterSection extends StatelessWidget { ], tabViews: [ SettingPrinterReceipt(), - Text('Checker Printer'), + SettingPrinterChecker(), Text('Kitchen Printer'), Text('Bar Printer'), Text('Tiket Printer'),