|
- 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_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 SupplyWidget extends StatefulWidget {
- final List<SuppliesUsing> currentItems;
- final Function(List<SuppliesUsing> supplyChanges) onChangeSupplies;
- final String urlSupply;
- final String supplyGroup;
-
- SupplyWidget({
- required this.currentItems,
- required this.onChangeSupplies,
- required this.urlSupply,
- required this.supplyGroup,
- });
-
- @override
- _SupplyWidgetState createState() => _SupplyWidgetState();
- }
-
- class _SupplyWidgetState extends State<SupplyWidget> {
- 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>(
- init: 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] ?? SuppliesUsing();
- var editedSupply = Supply()
- ..id = editedSupplyUsing.tbSuppliesInWarehouseId
- ..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() ??
- '0';
- },
- 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(
- crossAxisAlignment:
- CrossAxisAlignment.center,
- 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() ??
- '0')
- ? 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>(
- init: changeSelectedSupply,
- builder: (data) {
- return TextButton(
- onPressed: () {
- var currentIndexEdit = changeSupplyUsing.currentIndex;
- Navigator.of(context)
- .push(MaterialPageRoute(
- builder: (_) => ResourceHelperScreen(
- titleName: widget.supplyGroup,
- urlSupply: widget.urlSupply,
- selectedId:
- changeSelectedSupply.selectedSupplyId ?? -1,
- currentItems:
- changeSupplyUsing.currentItems ?? [],
- currentEditId: ((currentIndexEdit ?? 0) >= 0)
- ? changeSupplyUsing
- .currentItems![currentIndexEdit!]
- .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>(
- init: changeSelectedSupply,
- 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[600]),
- ),
- 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>(
- init: changeSelectedDevice,
- 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.black54),
- )
- : Text(
- '',
- style: TextStyle(
- fontSize: 13,
- fontWeight: FontWeight.normal,
- color: Colors.black54),
- ),
- Row(
- children: [
- GetBuilder<ChangeSupply>(
- init: changeSelectedSupply,
- 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>(
- init: changeUnit,
- builder: (data) {
- return DropdownButtonFormField<String>(
- itemHeight: 50,
- value: !Validators.stringNotNullOrEmpty(data.selectedUnit ?? '')
- ? 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>(
- init: changeButton,
- 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 ${widget.supplyGroup}",
- 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 ${widget.supplyGroup}",
- 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: 70,
- 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(
- children: [
- Padding(
- padding: const EdgeInsets.all(8.0),
- child: Align(
- alignment: Alignment.centerLeft,
- child: Text(
- widget.supplyGroup,
- style: TextStyle(color: Colors.black54, fontSize: 14),
- ),
- ),
- ),
- _buildListSupply(),
- SizedBox(
- height: 8.0,
- ),
- _formEdit(),
- SizedBox(
- height: 8.0,
- ),
- ],
- );
- }
- }
|