Files
kulakpos_app/lib/Screens/hrm/designation/add_new_designation.dart
2026-02-07 15:57:09 +07:00

154 lines
5.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mobile_pos/Screens/hrm/designation/Model/designation_list_model.dart';
import 'package:mobile_pos/Screens/hrm/designation/repo/designation_repo.dart';
import 'package:mobile_pos/Screens/hrm/widgets/label_style.dart';
import 'package:mobile_pos/generated/l10n.dart' as lang;
import 'package:mobile_pos/constant.dart';
class AddEditDesignation extends ConsumerStatefulWidget {
final bool isEdit;
final DesignationData? designation;
const AddEditDesignation({super.key, this.isEdit = false, this.designation});
@override
ConsumerState<AddEditDesignation> createState() => _AddEditDesignationState();
}
class _AddEditDesignationState extends ConsumerState<AddEditDesignation> {
final nameController = TextEditingController();
final descriptionController = TextEditingController();
String? selectedValue = 'Active';
final key = GlobalKey<FormState>();
@override
void initState() {
super.initState();
if (widget.isEdit && widget.designation != null) {
nameController.text = widget.designation?.name ?? '';
descriptionController.text = widget.designation?.description ?? '';
selectedValue = widget.designation?.status.toString() == '1' ? 'Active' : 'InActive';
}
}
Future<void> _submit() async {
if (!key.currentState!.validate()) return;
final repo = DesignationRepo();
EasyLoading.show(status: '${lang.S.of(context).saving}...');
if (widget.isEdit) {
await repo.updateDesignation(
ref: ref,
context: context,
id: widget.designation!.id.toString(),
name: nameController.text,
status: selectedValue ?? lang.S.of(context).active,
description: descriptionController.text,
);
} else {
await repo.createDesignation(
ref: ref,
context: context,
name: nameController.text,
status: selectedValue ?? lang.S.of(context).active,
description: descriptionController.text,
);
}
}
@override
void dispose() {
nameController.dispose();
descriptionController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final _lang = lang.S.of(context);
return Scaffold(
backgroundColor: kWhite,
appBar: AppBar(
centerTitle: true,
title: Text(
widget.isEdit ? _lang.editDesignation : _lang.addDesignation,
),
bottom: PreferredSize(
preferredSize: const Size.fromHeight(1),
child: Divider(height: 2, color: kBackgroundColor),
),
),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Form(
key: key,
child: Column(
children: [
TextFormField(
controller: nameController,
decoration: InputDecoration(
label: labelSpan(title: _lang.designationName, context: context),
hintText: _lang.enterDesignationName,
),
validator: (value) => value!.isEmpty ? _lang.pleaseEnterDesignationName : null,
),
const SizedBox(height: 20),
DropdownButtonFormField(
value: selectedValue,
icon: Icon(Icons.keyboard_arrow_down, color: kNeutral800),
decoration: InputDecoration(
labelText: _lang.status,
hintText: _lang.select,
),
items:
['Active', 'InActive'].map((value) => DropdownMenuItem(value: value, child: Text(value))).toList(),
onChanged: (String? newValue) {
setState(() {
selectedValue = newValue;
});
},
validator: (value) => value == null ? _lang.pleaseSelectAStatus : null,
),
const SizedBox(height: 20),
TextFormField(
controller: descriptionController,
decoration: InputDecoration(
labelText: _lang.description,
hintText: '${_lang.enterDescription}...',
),
),
const SizedBox(height: 20),
Row(
children: [
Expanded(
child: OutlinedButton(
onPressed: () {
key.currentState?.reset();
nameController.clear();
descriptionController.clear();
selectedValue = null;
setState(() {});
},
child: Text(_lang.resets),
),
),
const SizedBox(width: 16),
Expanded(
child: ElevatedButton(
onPressed: _submit,
child: Text(widget.isEdit ? _lang.update : _lang.save),
),
),
],
),
],
),
),
),
);
}
}