Aditya Siregar 73320561b0 first commit
2025-07-30 22:38:44 +07:00

150 lines
5.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
import '../../../core/components/buttons.dart';
import '../../../core/components/custom_dropdown.dart';
import '../../../core/components/custom_text_field.dart';
import '../../../core/components/spaces.dart';
import '../../../core/constants/colors.dart';
import '../models/printer_model.dart';
class FormPrinterDialog extends StatelessWidget {
final PrinterModel? data;
const FormPrinterDialog({super.key, this.data});
@override
Widget build(BuildContext context) {
final nameController = TextEditingController(text: data?.name ?? '');
final ipAddressController =
TextEditingController(text: data?.ipAddress ?? '');
final sizeController = ValueNotifier<String>(data?.size ?? '58mm');
final typeController =
ValueNotifier<PrinterType>(data?.type ?? PrinterType.wifi);
final isCutReceipt = ValueNotifier<bool>(false);
final isOpenLychee = ValueNotifier<bool>(false);
return AlertDialog(
title: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton(
onPressed: () => context.pop(),
icon: const Icon(Icons.close),
),
Text(data == null ? 'Tambah Printer' : 'Edit Printer'),
const Spacer(),
],
),
content: SingleChildScrollView(
child: SizedBox(
width: context.deviceWidth / 3,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CustomTextField(
controller: nameController,
label: 'Nama Printer',
onChanged: (value) {},
),
const SpaceHeight(24.0),
CustomTextField(
controller: ipAddressController,
label: 'Alamat IP',
onChanged: (value) {},
),
const SpaceHeight(24.0),
ValueListenableBuilder(
valueListenable: sizeController,
builder: (context, value, child) => CustomDropdown(
value: value,
items: const ['58mm', '80mm'],
label: 'Ukuruan Struk',
onChanged: (value) => sizeController.value = value ?? '',
),
),
const SpaceHeight(24.0),
ValueListenableBuilder(
valueListenable: typeController,
builder: (context, value, child) => CustomDropdown(
value: value.value,
items: [
PrinterType.wifi.value,
PrinterType.bluetooth.value,
],
label: 'Type',
onChanged: (value) =>
typeController.value = PrinterType.fromValue(value ?? ''),
),
),
const SpaceHeight(24.0),
ValueListenableBuilder(
valueListenable: isCutReceipt,
builder: (context, value, child) => GestureDetector(
onTap: () => isCutReceipt.value = !value,
child: ListTile(
contentPadding: EdgeInsets.zero,
title: const Text(
'Potong struk setelah selesai cetak',
style: TextStyle(
fontSize: 12.0,
fontWeight: FontWeight.bold,
),
),
subtitle: const Text(
'hanya aktifkan jika printer kamu support',
style: TextStyle(fontSize: 12.0),
),
trailing: Checkbox(
value: value,
onChanged: (_) => isCutReceipt.value = !value,
),
textColor: AppColors.primary,
),
),
),
const SpaceHeight(24.0),
ValueListenableBuilder(
valueListenable: isOpenLychee,
builder: (context, value, child) => GestureDetector(
onTap: () => isOpenLychee.value = !value,
child: ListTile(
contentPadding: EdgeInsets.zero,
title: const Text(
'Buka laci setelah selesai cetak',
style: TextStyle(
fontSize: 12.0,
fontWeight: FontWeight.bold,
),
),
subtitle: const Text(
'hanya aktifkan jika printer kamu support',
style: TextStyle(fontSize: 12.0),
),
trailing: Checkbox(
value: value,
onChanged: (_) => isOpenLychee.value = !value,
),
textColor: AppColors.primary,
),
),
),
const SpaceHeight(24.0),
Button.filled(
onPressed: () {
if (data == null) {
// TODO: do add printer
} else {
// TODO: do edit printer
}
context.pop();
},
label: data == null ? 'Simpan' : 'Perbarui',
)
],
),
),
),
);
}
}