|
- import 'package:farm_tpf/custom_model/Device.dart';
- import 'package:farm_tpf/custom_model/SuppliesUsing.dart';
- import 'package:farm_tpf/custom_model/Supply.dart';
- import 'package:farm_tpf/presentation/custom_widgets/WidgetErrorTextField.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_text_form_field.dart';
- import 'package:farm_tpf/presentation/custom_widgets/widget_utils.dart';
- import 'package:farm_tpf/presentation/screens/actions/controller/ChangeDevice.dart';
- import 'package:farm_tpf/presentation/screens/actions/controller/ChangeFieldInForm.dart';
- import 'package:farm_tpf/presentation/screens/actions/controller/ChangeFormButton.dart';
- import 'package:farm_tpf/presentation/screens/actions/controller/ChangeSupplyUsing.dart';
- import 'package:farm_tpf/presentation/screens/actions/controller/ChangeUnit.dart';
- import 'package:farm_tpf/presentation/screens/actions/resource_device_activity/sc_device_activity.dart';
- import 'package:farm_tpf/presentation/screens/actions/state_management_helper/change_supply.dart';
- import 'package:farm_tpf/presentation/screens/resources/sc_resource_helper.dart';
- import 'package:farm_tpf/utils/const_common.dart';
- import 'package:farm_tpf/utils/const_string.dart';
- import 'package:farm_tpf/utils/const_style.dart';
- import 'package:farm_tpf/utils/validators.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
-
- import 'package:farm_tpf/utils/formatter.dart';
-
- import '../util_action.dart';
-
- class WidgetSprayingSupply extends StatefulWidget {
- final List<SuppliesUsing>? currentItems;
- final Function(List<SuppliesUsing> supplyChanges) onChangeSupplies;
- WidgetSprayingSupply({this.currentItems, required this.onChangeSupplies});
- @override
- _WidgetSprayingSupplyState createState() => _WidgetSprayingSupplyState();
- }
-
- class _WidgetSprayingSupplyState extends State<WidgetSprayingSupply> {
- final _dosageController = TextEditingController();
- final _quantityController = TextEditingController();
- final _howToUseController = TextEditingController();
- final changeSelectedSupply = Get.put(ChangeSupply());
- final changeSupplyUsing = Get.put(ChangeSupplyUsing());
- final changeUnit = Get.put(ChangeUnit());
- final changeButton = Get.put(ChangeButtonInForm());
- final changeSelectedDevice = Get.put(ChangeDevice());
- final changeFormField = Get.put(ChangeFieldFormSupply());
- GlobalKey<FormState> _formSupplyKey = GlobalKey();
-
- @override
- void initState() {
- super.initState();
- changeSelectedSupply.initValue();
- changeSelectedDevice.initValue();
- changeSupplyUsing.init(widget.currentItems ?? []);
- changeUnit.initValue();
- changeButton.resetValue();
- changeFormField.init();
- }
-
- Widget _buildListSupply() {
- return GetBuilder<ChangeSupplyUsing>(builder: (value) {
- widget.onChangeSupplies(value.currentItems ?? []);
- if ((value.currentItems ?? []).isEmpty) {
- return Container();
- } else {
- return Container(
- height: 120,
- child: ListView.builder(
- physics: ClampingScrollPhysics(),
- scrollDirection: Axis.horizontal,
- shrinkWrap: true,
- itemCount: value.currentItems?.length,
- itemBuilder: (context, index) {
- return GestureDetector(
- onTap: () {
- print("edit");
- changeSupplyUsing.changeIndexEdit(index);
- changeButton.updateToEdit(true);
- var editedSupplyUsing = value.currentItems?[index];
- var editedSupply = Supply()
- ..id = editedSupplyUsing?.tbSuppliesInWarehouseId ?? -1
- ..tbSuppliesName = editedSupplyUsing?.supplyName ?? ''
- ..unit = editedSupplyUsing?.supplyUnit ?? '';
- changeSelectedSupply.change(editedSupply);
-
- var editedDevice = Device()
- ..id = editedSupplyUsing?.tbEquipmentOfCustomerId
- ..name = editedSupplyUsing?.equipmentName;
- changeSelectedDevice.change(editedDevice);
-
- changeUnit.updateListByUnitName(editedSupplyUsing?.supplyUnit ?? '');
- changeUnit.updateSelected(editedSupplyUsing?.supplyUnit ?? '');
- _dosageController.text = editedSupplyUsing?.dosage ?? '';
- _howToUseController.text = editedSupplyUsing?.howToUse ?? '';
- _quantityController.text = editedSupplyUsing?.quantity?.formatNumtoStringDecimal() ?? '';
- },
- child: Card(
- child: Stack(
- alignment: Alignment.bottomCenter,
- children: <Widget>[
- Positioned(
- child: ClipRRect(
- borderRadius: BorderRadius.circular(8),
- child: Container(
- padding: EdgeInsets.all(4),
- width: 150,
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- SizedBox(
- height: 12.0,
- ),
- Flexible(
- child: Text(value.currentItems?[index].supplyName ?? "", overflow: TextOverflow.ellipsis, maxLines: 1),
- ),
- Validators.stringNotNullOrEmpty(value.currentItems?[index].dosage ?? '')
- ? Flexible(child: Text("${value.currentItems?[index].dosage ?? ""}"))
- : SizedBox(),
- Validators.stringNotNullOrEmpty(
- value.currentItems?[index].quantity?.formatNumtoStringDecimal() ?? '',
- )
- ? Flexible(
- child: Text(
- "${value.currentItems?[index].quantity?.formatNumtoStringDecimal() ?? ""} ${value.currentItems?[index].supplyUnit ?? ""}"))
- : SizedBox(),
- Validators.stringNotNullOrEmpty(value.currentItems?[index].equipmentName ?? '')
- ? Flexible(child: Text("${value.currentItems?[index].equipmentName ?? ""}"))
- : SizedBox(),
- Validators.stringNotNullOrEmpty(value.currentItems?[index].howToUse ?? '')
- ? Flexible(child: Text("${value.currentItems?[index].howToUse ?? ""}"))
- : SizedBox(),
- ],
- ),
- ),
- )),
- Positioned(
- top: -10,
- right: -10,
- child: IconButton(
- icon: Icon(
- Icons.cancel,
- color: Colors.redAccent,
- ),
- onPressed: () {
- changeSupplyUsing.deleteSupply(index);
- }),
- )
- ],
- )));
- }));
- }
- });
- }
-
- Widget _btnSelectSubstrates() {
- return GetBuilder<ChangeSupply>(builder: (data) {
- return TextButton(onPressed: () {
- var currentIndexEdit = changeSupplyUsing.currentIndex;
- Navigator.of(context)
- .push(MaterialPageRoute(
- builder: (_) => ResourceHelperScreen(
- titleName: "Thuốc BVTV",
- type: ConstCommon.supplyTypeProtectPlant,
- selectedId: changeSelectedSupply.selectedSupplyId ?? -1,
- currentItems: changeSupplyUsing.currentItems ?? [],
- currentEditId: ((currentIndexEdit ?? -1) >= 0)
- ? (changeSupplyUsing.currentItems ?? [])[(currentIndexEdit ?? 0)].tbSuppliesInWarehouseId ?? -1
- : -1,
- ),
- fullscreenDialog: false))
- .then((value) {
- if (value != null) {
- var result = value as Supply;
- changeSelectedSupply.change(result);
- changeUnit.updateListByUnitName(result.unit ?? '');
- changeFormField.change(true);
- }
- });
- }, child: GetBuilder<ChangeSupply>(builder: (_) {
- var isValid = changeSelectedSupply.isValid;
- return Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Container(
- padding: EdgeInsets.only(top: 0.0, right: 0.0, bottom: 10.5, left: 0.0),
- decoration: BoxDecoration(
- border: Border(
- bottom: BorderSide(
- width: 1,
- color: (isValid ?? false) ? Colors.grey : Colors.red,
- ),
- ),
- ),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Validators.stringNotNullOrEmpty(changeSelectedSupply.selectedSupplyName ?? '')
- ? Text(
- 'Tên thương mại *',
- style:
- TextStyle(fontSize: 13, fontWeight: FontWeight.normal, color: (isValid ?? false) ? Colors.black54 : Colors.red[600]),
- )
- : Text(
- '',
- style: TextStyle(
- fontSize: 13,
- fontWeight: FontWeight.normal,
- color: (isValid ?? false) ? Colors.black54 : Colors.red,
- ),
- ),
- Row(
- children: [
- Expanded(
- child: Validators.stringNotNullOrEmpty(changeSelectedSupply.selectedSupplyName ?? '')
- ? Text(
- changeSelectedSupply.selectedSupplyName ?? '',
- style: TextStyle(
- fontSize: 14.0,
- color: Colors.black87,
- ),
- )
- : Text("Tên thương mại *", style: TextStyle(fontSize: 14.0, color: Colors.black54)),
- ),
- Icon(
- Icons.arrow_drop_down,
- color: Colors.grey,
- ),
- ],
- ),
- ],
- )),
- (isValid ?? false) ? SizedBox() : WidgetErrorTextField()
- ],
- );
- }));
- });
- }
-
- Widget _btnSelectDevice() {
- return GetBuilder<ChangeDevice>(builder: (data) {
- return TextButton(
- onPressed: () {
- Navigator.of(context)
- .push(
- MaterialPageRoute(
- builder: (_) => ListDeviceActivity(
- selectedId: changeSelectedDevice.selectedDeviceId ?? -1,
- ),
- fullscreenDialog: false,
- ),
- )
- .then((value) {
- if (value != null) {
- var result = value as Device;
- changeSelectedDevice.change(result);
- changeFormField.change(true);
- }
- });
- },
- child: Container(
- padding: EdgeInsets.only(top: 0.0, right: 0.0, bottom: 10.5, left: 0.0),
- decoration: BoxDecoration(
- border: kBorderTextField,
- ),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Validators.stringNotNullOrEmpty(changeSelectedDevice.selectedDeviceName ?? '')
- ? Text(
- 'Thiết bị',
- style: TextStyle(fontSize: 13, fontWeight: FontWeight.normal, color: Colors.black45),
- )
- : Text(
- '',
- style: TextStyle(fontSize: 13, fontWeight: FontWeight.normal, color: Colors.black54),
- ),
- Row(
- children: [
- GetBuilder<ChangeSupply>(
- builder: (_) => Expanded(
- child: Validators.stringNotNullOrEmpty(changeSelectedDevice.selectedDeviceName ?? '')
- ? Text(changeSelectedDevice.selectedDeviceName ?? '', style: TextStyle(fontSize: 14.0, color: Colors.black87))
- : Text("Thiết bị", style: TextStyle(fontSize: 14.0, color: Colors.black54)),
- )),
- Icon(
- Icons.arrow_drop_down,
- color: Colors.grey,
- ),
- ],
- ),
- ],
- )));
- });
- }
-
- Widget _dropdownUnitTypes() {
- return GetBuilder<ChangeUnit>(builder: (data) {
- return DropdownButtonFormField<String>(
- itemHeight: 100,
- value: (data.selectedUnit ?? '').isEmpty ? null : data.selectedUnit,
- items: (data.currentUnits ?? [])
- .map((label) => DropdownMenuItem(
- child: Text(label),
- value: label,
- ))
- .toList(),
- onChanged: (value) {
- var currentQuantity = _quantityController.text;
- num assignValue = currentQuantity.parseDoubleThousand();
- if (assignValue != null) {
- var oldSelected = data.selectedUnit;
- if (oldSelected == value) {
- } else {
- assignValue = UtilAction.convertUnit(
- inputValue: assignValue,
- oldUnit: oldSelected ?? '',
- newUnit: value ?? '',
- );
- }
- _quantityController.text = assignValue.formatNumtoStringDecimal();
- }
- changeUnit.updateSelected(value ?? '');
- },
- );
- });
- }
-
- _quantityField() {
- return WidgetTextFormFieldNumber(
- hintValue: "Tổng lượng sử dụng *",
- labelText: "Tổng lượng sử dụng *",
- textController: _quantityController,
- validator: (String? value) {
- return Validators.validateNotNullOrEmpty(value ?? '', label_validate_input_empty);
- },
- onChanged: (value) {
- if (!Validators.stringNotNullOrEmpty(value ?? '') &&
- !Validators.stringNotNullOrEmpty(_howToUseController.text) &&
- !Validators.stringNotNullOrEmpty(_dosageController.text) &&
- (Get.find<ChangeSupply>().selectedSupplyId ?? -1) <= 0 &&
- (changeSelectedDevice.selectedDeviceId ?? -1) <= 0) {
- changeFormField.change(false);
- } else {
- changeFormField.change(true);
- }
- },
- );
- }
-
- _buttonInForm() {
- return GetBuilder<ChangeButtonInForm>(builder: (_) {
- return Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- _.isEdit ?? false
- ? TextButton(
- child: Text("Huỷ"),
- onPressed: () {
- changeButton.resetValue();
- _resetForm();
- _hidenKeyboard(context);
- })
- : SizedBox(),
- _.isEdit ?? false
- ? Expanded(
- child: TextButton(
- onPressed: () {
- if (_formSupplyKey.currentState!.validate()) {
- _formSupplyKey.currentState!.save();
- if ((changeSelectedSupply.selectedSupplyId ?? -1) <= 0) {
- changeSelectedSupply.changeValid(false);
- } else {
- changeSelectedSupply.changeValid(true);
- }
- var currentSupply = changeSelectedSupply.currentSupply;
- var currentDevice = changeSelectedDevice.currentDevice;
- var currentQuantity = _quantityController.text.parseDoubleThousand();
- if (currentSupply?.id != null && (currentQuantity ?? 0) > 0) {
- var quantityWithCurrentSupplyUnit = UtilAction.convertUnit(
- inputValue: currentQuantity,
- oldUnit: changeUnit.selectedUnit ?? '',
- newUnit: changeSelectedSupply.currentSupply?.unit ?? '',
- );
- SuppliesUsing newSup = SuppliesUsing()
- ..dosage = _dosageController.text
- ..howToUse = _howToUseController.text
- ..quantity = quantityWithCurrentSupplyUnit
- ..tbSuppliesInWarehouseId = currentSupply?.id
- ..suppliesInWarehouseId = currentSupply?.id
- ..supplyName = currentSupply?.tbSuppliesName
- ..tbEquipmentOfCustomerId = currentDevice?.id ?? -1
- ..equipmentOfCustomerId = currentDevice?.id ?? -1
- ..equipmentName = currentDevice?.name ?? ''
- ..supplyUnit = currentSupply?.unit
- ..unit = currentSupply?.unit;
- changeSupplyUsing.editSupply(changeSupplyUsing.currentIndex ?? -1, newSup);
- _resetForm();
- _hidenKeyboard(context);
- } else if (currentSupply?.id == null || ((currentQuantity ?? 0) <= 0)) {
- Utils.showSnackBarWarning(message: "Vui lòng nhập vật tư và số lượng");
- }
- } else {
- Utils.showSnackBarWarning(message: "Vui lòng nhập vật tư và số lượng");
- if ((changeSelectedSupply.selectedSupplyId ?? -1) <= 0) {
- changeSelectedSupply.changeValid(false);
- } else {
- changeSelectedSupply.changeValid(true);
- }
- }
- },
- child: Text(
- "Sửa thuốc BVTV",
- style: TextStyle(color: Colors.blue),
- )),
- )
- : Expanded(
- child: TextButton(
- onPressed: () {
- if (_formSupplyKey.currentState!.validate()) {
- _formSupplyKey.currentState!.save();
- if ((changeSelectedSupply.selectedSupplyId ?? -1) <= 0) {
- changeSelectedSupply.changeValid(false);
- } else {
- changeSelectedSupply.changeValid(true);
- }
- var currentSupply = changeSelectedSupply.currentSupply;
- var currentDevice = changeSelectedDevice.currentDevice;
- var currentQuantity = _quantityController.text.parseDoubleThousand();
- if (currentSupply?.id != null && (currentQuantity ?? 0) > 0) {
- var quantityWithCurrentSupplyUnit = UtilAction.convertUnit(
- inputValue: currentQuantity,
- oldUnit: changeUnit.selectedUnit ?? '',
- newUnit: changeSelectedSupply.currentSupply?.unit ?? '',
- );
- SuppliesUsing newSup = SuppliesUsing()
- ..dosage = _dosageController.text
- ..howToUse = _howToUseController.text
- ..quantity = quantityWithCurrentSupplyUnit
- ..tbSuppliesInWarehouseId = currentSupply?.id
- ..suppliesInWarehouseId = currentSupply?.id
- ..supplyName = currentSupply?.tbSuppliesName
- ..supplyUnit = currentSupply?.unit
- ..tbEquipmentOfCustomerId = currentDevice?.id ?? -1
- ..equipmentOfCustomerId = currentDevice?.id ?? -1
- ..equipmentName = currentDevice?.name ?? ''
- ..unit = currentSupply?.unit;
- changeSupplyUsing.addSupply(newSup);
- _resetForm();
- _hidenKeyboard(context);
- } else if (currentSupply?.id == null || ((currentQuantity ?? 0) <= 0)) {
- Utils.showSnackBarWarning(message: "Vui lòng nhập vật tư và số lượng");
- }
- } else {
- Utils.showSnackBarWarning(message: "Vui lòng nhập vật tư và số lượng");
- if ((changeSelectedSupply.selectedSupplyId ?? -1) <= 0) {
- changeSelectedSupply.changeValid(false);
- } else {
- changeSelectedSupply.changeValid(true);
- }
- }
- },
- child: Text(
- "+ Thêm thuốc BVTV",
- style: TextStyle(color: Colors.blue),
- )),
- )
- ],
- );
- });
- }
-
- Widget _formEdit() {
- return Form(
- key: _formSupplyKey,
- child: Column(
- children: [
- Container(
- padding: EdgeInsets.all(8.0),
- margin: EdgeInsets.all(8.0),
- decoration: BoxDecoration(
- shape: BoxShape.rectangle,
- borderRadius: BorderRadius.circular(10),
- color: Colors.white,
- border: Border.all(
- color: Colors.grey,
- ),
- ),
- child: Column(
- children: [
- _btnSelectSubstrates(),
- TextFormField(
- keyboardType: TextInputType.text,
- controller: _dosageController,
- decoration: InputDecoration(labelText: "Liều lượng sử dụng"),
- onSaved: (newValue) {},
- onChanged: (value) {
- if (!Validators.stringNotNullOrEmpty(_quantityController.text) &&
- !Validators.stringNotNullOrEmpty(_howToUseController.text) &&
- !Validators.stringNotNullOrEmpty(value) &&
- (Get.find<ChangeSupply>().selectedSupplyId ?? -1) <= 0 &&
- (changeSelectedDevice.selectedDeviceId ?? -1) <= 0) {
- changeFormField.change(false);
- } else {
- changeFormField.change(true);
- }
- },
- ),
- Row(
- mainAxisSize: MainAxisSize.min,
- mainAxisAlignment: MainAxisAlignment.spaceEvenly,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Expanded(
- flex: 2,
- child: Container(
- height: 82,
- child: _quantityField(),
- ),
- ),
- SizedBox(
- width: 16.0,
- ),
- Expanded(
- flex: 1,
- child: Align(
- alignment: Alignment.bottomCenter,
- child: _dropdownUnitTypes(),
- )),
- ]),
- _btnSelectDevice(),
- TextFormField(
- keyboardType: TextInputType.text,
- controller: _howToUseController,
- decoration: InputDecoration(labelText: "Phương pháp sử dụng"),
- onSaved: (newValue) {},
- onChanged: (value) {
- if (!Validators.stringNotNullOrEmpty(_quantityController.text) &&
- !Validators.stringNotNullOrEmpty(value) &&
- !Validators.stringNotNullOrEmpty(_dosageController.text) &&
- (Get.find<ChangeSupply>().selectedSupplyId ?? -1) <= 0 &&
- (changeSelectedDevice.selectedDeviceId ?? -1) <= 0) {
- changeFormField.change(false);
- } else {
- changeFormField.change(true);
- }
- },
- ),
- ],
- ),
- ),
- _buttonInForm()
- ],
- ),
- );
- }
-
- _resetForm() {
- changeSupplyUsing.changeIndexEdit(-1);
- changeButton.resetValue();
- _dosageController.text = "";
- _howToUseController.text = "";
- _quantityController.text = "";
- changeUnit.initValue();
- changeSelectedSupply.initValue();
- changeSelectedDevice.initValue();
- changeFormField.change(false);
- }
-
- _hidenKeyboard(BuildContext context) {
- FocusScopeNode currentFocus = FocusScope.of(context);
- if (!currentFocus.hasPrimaryFocus) {
- currentFocus.unfocus();
- }
- }
-
- @override
- Widget build(BuildContext context) {
- return Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Padding(
- padding: const EdgeInsets.all(8.0),
- child: Align(
- alignment: Alignment.centerLeft,
- child: Text(
- 'Thuốc BVTV',
- style: TextStyle(color: Colors.black54, fontSize: 14),
- ),
- ),
- ),
- _buildListSupply(),
- SizedBox(
- height: 8.0,
- ),
- _formEdit()
- ],
- );
- }
- }
|