|
- import 'package:farm_tpf/custom_model/SuppliesUsing.dart';
- import 'package:farm_tpf/custom_model/Supply.dart';
- import 'package:farm_tpf/presentation/screens/actions/state_management_helper/change_supply.dart';
- import 'package:farm_tpf/presentation/screens/actions/util_action.dart';
- import 'package:farm_tpf/presentation/screens/resources/sc_resource_helper.dart';
- import 'package:farm_tpf/utils/const_color.dart';
- import 'package:farm_tpf/utils/const_common.dart';
- import 'package:farm_tpf/utils/const_style.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:farm_tpf/utils/formatter.dart';
- import 'package:intl/intl.dart';
- import 'package:pattern_formatter/pattern_formatter.dart';
-
- class WidgetPlantSupply extends StatefulWidget {
- final List<SuppliesUsing> currentItems;
- final Function(List<SuppliesUsing> supplyChanges) onChangeSupplies;
- WidgetPlantSupply({this.currentItems, @required this.onChangeSupplies});
- @override
- _WidgetPlantSupplyState createState() => _WidgetPlantSupplyState();
- }
-
- class _WidgetPlantSupplyState extends State<WidgetPlantSupply> {
- final _dosageController = TextEditingController();
- final _quantityController = TextEditingController();
- final changeSelectedSupply = Get.put(ChangeSupply());
- final changeSupplyUsing = Get.put(ChangeSupplyUsing());
- final changeUnit = Get.put(ChangeUnit());
- final changeQuantity = Get.put(ChangeValueQuantity());
- final changeButton = Get.put(ChangeButtonInForm());
-
- @override
- void initState() {
- super.initState();
- changeSelectedSupply.initValue();
- changeSupplyUsing.init(widget.currentItems);
- changeUnit.initValue();
- changeQuantity.changeQuantity("");
- changeButton.resetValue();
- }
-
- Widget _buildListSupply() {
- return GetBuilder<ChangeSupplyUsing>(builder: (value) {
- widget.onChangeSupplies(value.currentItems);
- if (value.currentItems.isEmpty) {
- return Container();
- } else {
- return Container(
- height: 80,
- 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
- ..tbSuppliesName = editedSupplyUsing.supplyName
- ..unit = editedSupplyUsing.supplyUnit;
- changeSelectedSupply.change(editedSupply);
- changeQuantity.changeQuantity(editedSupplyUsing.quantity
- .formatNumtoStringDecimal());
- changeUnit
- .updateListByUnitName(editedSupplyUsing.supplyUnit);
- changeUnit.updateSelected(editedSupplyUsing.supplyUnit);
- _dosageController.text = editedSupplyUsing.dosage;
- },
- child: Card(
- child: Stack(
- alignment: Alignment.bottomCenter,
- overflow: Overflow.visible,
- children: <Widget>[
- Positioned(
- child: ClipRRect(
- borderRadius: BorderRadius.circular(8),
- child: Container(
- padding: EdgeInsets.all(4),
- width: 150,
- child: Column(
- children: [
- SizedBox(
- height: 12.0,
- ),
- Flexible(
- child: Text(
- value.currentItems[index].supplyName ??
- "",
- overflow: TextOverflow.ellipsis,
- maxLines: 1),
- ),
- Flexible(
- child: Text(
- "${value.currentItems[index].dosage ?? ""}")),
- Flexible(
- child: Text(
- "${value.currentItems[index].quantity.formatNumtoStringDecimal() ?? ""} ${value.currentItems[index].supplyUnit ?? ""}")),
- ],
- ),
- ),
- )),
- Positioned(
- top: -10,
- right: -10,
- child: IconButton(
- icon: Icon(
- Icons.cancel,
- color: Colors.redAccent,
- ),
- onPressed: () {
- print("Delete");
- changeSupplyUsing.deleteSupply(index);
- }),
- )
- ],
- )));
- }));
- }
- });
- }
-
- Widget _btnSelectSubstrates() {
- return GetBuilder<ChangeSupply>(builder: (data) {
- return FlatButton(
- padding:
- EdgeInsets.only(top: 0.0, right: 0.0, bottom: 0.0, left: 0.0),
- onPressed: () {
- Navigator.of(context)
- .push(MaterialPageRoute(
- builder: (_) => ResourceHelperScreen(
- titleName: "Hoá chất xử lý",
- type: ConstCommon.supplyTypeAll,
- selectedId: changeSelectedSupply.selectedSupplyId),
- fullscreenDialog: false))
- .then((value) {
- if (value != null) {
- var result = value as Supply;
- changeSelectedSupply.change(result);
- changeUnit.updateListByUnitName(result.unit);
- }
- });
- },
- child: Container(
- padding: EdgeInsets.only(
- top: 0.0, right: 0.0, bottom: 10.5, left: 0.0),
- decoration: BoxDecoration(
- border: kBorderTextField,
- ),
- child: Row(
- children: [
- GetBuilder<ChangeSupply>(
- builder: (_) => Expanded(
- child: Text(
- changeSelectedSupply.selectedSupplyName ??
- "Hoá chất xử lý",
- style: TextStyle(
- fontSize: 14.0, color: Colors.black87)))),
- 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;
- changeQuantity.changeQuantity(currentQuantity);
- num assignValue = changeQuantity.quantity.parseDoubleThousand();
- if (assignValue != null) {
- var oldSelected = data.selectedUnit;
- if (oldSelected == value) {
- } else {
- assignValue = UtilAction.convertUnit(
- inputValue: assignValue,
- oldUnit: oldSelected,
- newUnit: value);
- }
- changeQuantity
- .changeQuantity(assignValue.formatNumtoStringDecimal());
- }
- changeUnit.updateSelected(value);
- },
- );
- });
- }
-
- _quantityField() {
- return GetBuilder<ChangeValueQuantity>(builder: (_) {
- WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
- var quantityValue = changeQuantity.quantity;
- _quantityController.text = quantityValue;
- });
-
- return TextFormField(
- keyboardType: TextInputType.numberWithOptions(decimal: true),
- inputFormatters: [
- ThousandsFormatter(
- formatter: NumberFormat("#,###.##", "es"), allowFraction: true)
- ],
- decoration: InputDecoration(labelText: "Tổng lượng sử dụng"),
- controller: _quantityController,
- );
- });
- }
-
- _buttonInForm() {
- return GetBuilder<ChangeButtonInForm>(builder: (_) {
- return Align(
- alignment: Alignment.centerRight,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- _.isEdit
- ? OutlineButton(
- shape: RoundedRectangleBorder(
- borderRadius: new BorderRadius.circular(8.0)),
- child: Text("Huỷ"),
- onPressed: () {
- changeButton.resetValue();
- _resetForm();
- _hidenKeyboard(context);
- })
- : SizedBox(),
- _.isEdit
- ? FlatButton(
- color: COLOR_CONST.DEFAULT,
- shape: RoundedRectangleBorder(
- borderRadius: new BorderRadius.circular(8.0)),
- onPressed: () {
- var currentSupply = changeSelectedSupply.currentSupply;
- changeQuantity.changeQuantity(_quantityController.text);
- var quantityWithCurrentSupplyUnit =
- UtilAction.convertUnit(
- inputValue:
- changeQuantity.quantity.parseDoubleThousand(),
- oldUnit: changeUnit.selectedUnit,
- newUnit: changeSelectedSupply.currentSupply.unit);
- if (currentSupply.id != null) {
- SuppliesUsing newSup = SuppliesUsing()
- ..dosage = _dosageController.text
- ..quantity = quantityWithCurrentSupplyUnit
- ..tbSuppliesInWarehouseId = currentSupply.id
- ..suppliesInWarehouseId = currentSupply.id
- ..supplyName = currentSupply.tbSuppliesName
- ..supplyUnit = currentSupply.unit
- ..unit = currentSupply.unit;
- changeSupplyUsing.editSupply(
- changeSupplyUsing.currentIndex, newSup);
- _resetForm();
- _hidenKeyboard(context);
- }
- },
- child: Text(
- "Sửa",
- style: TextStyle(color: Colors.white),
- ))
- : FlatButton(
- color: COLOR_CONST.DEFAULT,
- shape: RoundedRectangleBorder(
- borderRadius: new BorderRadius.circular(8.0)),
- onPressed: () {
- var currentSupply = changeSelectedSupply.currentSupply;
- if (currentSupply.id != null) {
- changeQuantity.changeQuantity(_quantityController.text);
- var quantityWithCurrentSupplyUnit =
- UtilAction.convertUnit(
- inputValue: changeQuantity.quantity
- .parseDoubleThousand(),
- oldUnit: changeUnit.selectedUnit,
- newUnit:
- changeSelectedSupply.currentSupply.unit);
- SuppliesUsing newSup = SuppliesUsing()
- ..dosage = _dosageController.text
- ..quantity = quantityWithCurrentSupplyUnit
- ..tbSuppliesInWarehouseId = currentSupply.id
- ..suppliesInWarehouseId = currentSupply.id
- ..supplyName = currentSupply.tbSuppliesName
- ..supplyUnit = currentSupply.unit
- ..unit = currentSupply.unit;
- changeSupplyUsing.addSupply(newSup);
- _resetForm();
- _hidenKeyboard(context);
- }
- },
- child: Text(
- "Thêm",
- style: TextStyle(color: Colors.white),
- ))
- ],
- ),
- );
- });
- }
-
- Widget _formEdit() {
- return Container(
- padding: EdgeInsets.all(8.0),
- decoration: BoxDecoration(
- shape: BoxShape.rectangle,
- borderRadius: BorderRadius.circular(10),
- color: Colors.white,
- border: Border.all(color: COLOR_CONST.DEFAULT)),
- child: Column(
- children: [
- Container(
- width: double.infinity,
- child: Text(
- "Hoá chất xử lý",
- style: TextStyle(color: Colors.black54, fontSize: 13.0),
- ),
- ),
- _btnSelectSubstrates(),
- TextFormField(
- keyboardType: TextInputType.text,
- controller: _dosageController,
- decoration: InputDecoration(labelText: "Liều lượng"),
- onSaved: (newValue) {},
- ),
- 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(),
- )),
- ]),
- _buttonInForm()
- ],
- ));
- }
-
- _resetForm() {
- changeSupplyUsing.changeIndexEdit(-1);
- changeButton.resetValue();
- _dosageController.text = "";
- _quantityController.text = "";
- changeUnit.initValue();
- changeSelectedSupply.initValue();
- changeQuantity.changeQuantity("");
- }
-
- _hidenKeyboard(BuildContext context) {
- FocusScopeNode currentFocus = FocusScope.of(context);
- if (!currentFocus.hasPrimaryFocus) {
- currentFocus.unfocus();
- }
- }
-
- @override
- Widget build(BuildContext context) {
- return Column(
- children: [_formEdit(), _buildListSupply()],
- );
- }
- }
-
- class ChangeUnit extends GetxController {
- List<String> currentUnits;
- String selectedUnit;
-
- initValue() {
- currentUnits = [];
- selectedUnit = "";
- update();
- }
-
- updateListByUnitName(String unitName) {
- if (unitName == "kg" || unitName == "g") {
- currentUnits = ["kg", "g"];
- selectedUnit = unitName;
- } else if (unitName == "l" || unitName == "m") {
- currentUnits = ["l", "ml"];
- selectedUnit = unitName;
- } else if (unitName == "m" || unitName == "cm" || unitName == "mm") {
- currentUnits = ["m", "cm", "mm"];
- selectedUnit = unitName;
- } else {
- currentUnits = [];
- }
- update();
- }
-
- updateSelected(String selected) {
- selectedUnit = selected;
- update();
- }
- }
-
- class ChangeValueQuantity extends GetxController {
- String quantity = "";
- void changeQuantity(String newQuantity) {
- quantity = newQuantity;
- update();
- }
- }
-
- class ChangeButtonInForm extends GetxController {
- bool isEdit;
- void resetValue() {
- isEdit = false;
- update();
- }
-
- void updateToEdit(bool isChangeEdit) {
- isEdit = isChangeEdit;
- update();
- }
- }
-
- class ChangeSupplyUsing extends GetxController {
- List<SuppliesUsing> currentItems;
- SuppliesUsing currentSupplyUsing;
- int currentIndex;
- void init(List<SuppliesUsing> initItems) {
- currentItems = initItems;
- currentSupplyUsing = SuppliesUsing();
- currentIndex = -1;
- update();
- }
-
- void changeIndexEdit(int index) {
- currentIndex = index;
- update();
- }
-
- void changeInitList(List<SuppliesUsing> sups) {
- currentItems = sups;
- update();
- }
-
- void addSupply(SuppliesUsing supplyUsing) {
- currentItems.insert(0, supplyUsing);
- currentSupplyUsing = SuppliesUsing();
- update();
- }
-
- void deleteSupply(int index) {
- currentItems.removeAt(index);
- currentSupplyUsing = SuppliesUsing();
- update();
- }
-
- void editSupply(int index, SuppliesUsing supplyUsing) {
- currentItems[index] = supplyUsing;
- currentSupplyUsing = SuppliesUsing();
- update();
- }
- }
|