Files
kulakpos_app/lib/Screens/warehouse/add_new_warehouse.dart
2026-02-07 15:57:09 +07:00

166 lines
5.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mobile_pos/Screens/warehouse/warehouse_model/warehouse_list_model.dart';
import 'package:mobile_pos/Screens/warehouse/warehouse_provider/warehouse_provider.dart';
import 'package:mobile_pos/Screens/warehouse/warehouse_repo/warehouse_repo.dart';
import 'package:mobile_pos/constant.dart';
class AddNewWarehouse extends ConsumerStatefulWidget {
const AddNewWarehouse({super.key, this.editData});
final WarehouseData? editData;
@override
ConsumerState<AddNewWarehouse> createState() => _AddNewWarehouseState();
}
class _AddNewWarehouseState extends ConsumerState<AddNewWarehouse> {
final warehouseNameController = TextEditingController();
final emailController = TextEditingController();
final phoneNumberController = TextEditingController();
final addressController = TextEditingController();
String? selectedValue;
GlobalKey<FormState> key = GlobalKey();
@override
void dispose() {
warehouseNameController.dispose();
emailController.dispose();
phoneNumberController.dispose();
addressController.dispose();
super.dispose();
}
@override
void initState() {
super.initState();
if (widget.editData != null) {
warehouseNameController.text = widget.editData?.name.toString() ?? '';
emailController.text = widget.editData?.email?.toString() ?? '';
phoneNumberController.text = widget.editData?.phone ?? '';
addressController.text = widget.editData?.address ?? '';
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: kWhite,
appBar: AppBar(
centerTitle: true,
title: Text(
widget.editData != null ? 'Edit Warehouse' : 'Add New Warehouse',
),
bottom: PreferredSize(
preferredSize: Size.fromHeight(1),
child: Divider(
height: 2,
color: kBackgroundColor,
),
),
),
body: SingleChildScrollView(
padding: EdgeInsets.all(16),
child: Form(
key: key,
child: Column(
children: [
TextFormField(
controller: warehouseNameController,
decoration: InputDecoration(
labelText: 'Warehouse Name',
hintText: 'Enter warehouse name',
),
validator: (value) => value!.isEmpty ? 'Enter warehouse name' : null,
),
SizedBox(height: 20),
TextFormField(
keyboardType: TextInputType.number,
controller: phoneNumberController,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
decoration: InputDecoration(
labelText: 'Phone',
hintText: 'Enter phone number',
),
),
SizedBox(height: 20),
TextFormField(
controller: emailController,
keyboardType: TextInputType.emailAddress,
autofillHints: [AutofillHints.email],
decoration: InputDecoration(
labelText: 'Email',
hintText: 'Enter your email address (optional)',
),
validator: (value) {
if (value != null && value.isNotEmpty) {
final emailRegex = RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$');
if (!emailRegex.hasMatch(value)) {
return 'Enter a valid email address';
}
}
return null; // Valid (either empty or valid email)
},
),
SizedBox(height: 20),
TextFormField(
controller: addressController,
decoration: InputDecoration(
labelText: 'Address',
hintText: 'Enter your address',
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
if ((key.currentState?.validate() ?? false)) {
WarehouseRepo warehouse = WarehouseRepo();
bool success;
CreateWareHouseModel data = CreateWareHouseModel(
address: addressController.text,
email: emailController.text,
name: warehouseNameController.text,
phone: phoneNumberController.text,
warehouseId: widget.editData?.id.toString());
if (widget.editData != null) {
print('update');
success = await warehouse.updateWareHouse(data: data);
} else {
print('create');
success = await warehouse.createWareHouse(data: data);
}
if (success) {
EasyLoading.showSuccess(widget.editData != null ? 'Warehouse Updated Successfully!' : 'Warehouse created successfully!');
ref.refresh(fetchWarehouseListProvider);
Navigator.pop(context);
} else {
EasyLoading.showError('Please Try Again!');
}
}
},
child: Text(widget.editData != null ? 'Update' : 'Save'),
),
],
),
),
),
);
}
}
class CreateWareHouseModel {
CreateWareHouseModel({
this.warehouseId,
this.name,
this.phone,
this.email,
this.address,
});
String? warehouseId;
String? name;
String? phone;
String? email;
String? address;
}