You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

614 lines
29KB

  1. import 'package:farm_tpf/custom_model/Device.dart';
  2. import 'package:farm_tpf/custom_model/SuppliesUsing.dart';
  3. import 'package:farm_tpf/custom_model/Supply.dart';
  4. import 'package:farm_tpf/presentation/custom_widgets/WidgetErrorTextField.dart';
  5. import 'package:farm_tpf/presentation/custom_widgets/widget_text_form_field.dart';
  6. import 'package:farm_tpf/presentation/custom_widgets/widget_utils.dart';
  7. import 'package:farm_tpf/presentation/screens/actions/controller/ChangeDevice.dart';
  8. import 'package:farm_tpf/presentation/screens/actions/controller/ChangeFieldInForm.dart';
  9. import 'package:farm_tpf/presentation/screens/actions/controller/ChangeFormButton.dart';
  10. import 'package:farm_tpf/presentation/screens/actions/controller/ChangeSupplyUsing.dart';
  11. import 'package:farm_tpf/presentation/screens/actions/controller/ChangeUnit.dart';
  12. import 'package:farm_tpf/presentation/screens/actions/resource_device_activity/sc_device_activity.dart';
  13. import 'package:farm_tpf/presentation/screens/actions/state_management_helper/change_supply.dart';
  14. import 'package:farm_tpf/presentation/screens/resources/sc_resource_helper.dart';
  15. import 'package:farm_tpf/utils/const_common.dart';
  16. import 'package:farm_tpf/utils/const_string.dart';
  17. import 'package:farm_tpf/utils/const_style.dart';
  18. import 'package:farm_tpf/utils/validators.dart';
  19. import 'package:flutter/material.dart';
  20. import 'package:get/get.dart';
  21. import 'package:farm_tpf/utils/formatter.dart';
  22. import '../util_action.dart';
  23. class WidgetSprayingSupply extends StatefulWidget {
  24. final List<SuppliesUsing>? currentItems;
  25. final Function(List<SuppliesUsing> supplyChanges) onChangeSupplies;
  26. WidgetSprayingSupply({this.currentItems, required this.onChangeSupplies});
  27. @override
  28. _WidgetSprayingSupplyState createState() => _WidgetSprayingSupplyState();
  29. }
  30. class _WidgetSprayingSupplyState extends State<WidgetSprayingSupply> {
  31. final _dosageController = TextEditingController();
  32. final _quantityController = TextEditingController();
  33. final _howToUseController = TextEditingController();
  34. final changeSelectedSupply = Get.put(ChangeSupply());
  35. final changeSupplyUsing = Get.put(ChangeSupplyUsing());
  36. final changeUnit = Get.put(ChangeUnit());
  37. final changeButton = Get.put(ChangeButtonInForm());
  38. final changeSelectedDevice = Get.put(ChangeDevice());
  39. final changeFormField = Get.put(ChangeFieldFormSupply());
  40. GlobalKey<FormState> _formSupplyKey = GlobalKey();
  41. @override
  42. void initState() {
  43. super.initState();
  44. changeSelectedSupply.initValue();
  45. changeSelectedDevice.initValue();
  46. changeSupplyUsing.init(widget.currentItems ?? []);
  47. changeUnit.initValue();
  48. changeButton.resetValue();
  49. changeFormField.init();
  50. }
  51. Widget _buildListSupply() {
  52. return GetBuilder<ChangeSupplyUsing>(
  53. init: changeSupplyUsing,
  54. builder: (value) {
  55. widget.onChangeSupplies(value.currentItems ?? []);
  56. if ((value.currentItems ?? []).isEmpty) {
  57. return Container();
  58. } else {
  59. return Container(
  60. height: 120,
  61. child: ListView.builder(
  62. physics: ClampingScrollPhysics(),
  63. scrollDirection: Axis.horizontal,
  64. shrinkWrap: true,
  65. itemCount: value.currentItems?.length,
  66. itemBuilder: (context, index) {
  67. return GestureDetector(
  68. onTap: () {
  69. print("edit");
  70. changeSupplyUsing.changeIndexEdit(index);
  71. changeButton.updateToEdit(true);
  72. var editedSupplyUsing = value.currentItems?[index];
  73. var editedSupply = Supply()
  74. ..id = editedSupplyUsing?.tbSuppliesInWarehouseId ?? -1
  75. ..tbSuppliesName = editedSupplyUsing?.supplyName ?? ''
  76. ..unit = editedSupplyUsing?.supplyUnit ?? '';
  77. changeSelectedSupply.change(editedSupply);
  78. var editedDevice = Device()
  79. ..id = editedSupplyUsing?.tbEquipmentOfCustomerId
  80. ..name = editedSupplyUsing?.equipmentName;
  81. changeSelectedDevice.change(editedDevice);
  82. changeUnit.updateListByUnitName(editedSupplyUsing?.supplyUnit ?? '');
  83. changeUnit.updateSelected(editedSupplyUsing?.supplyUnit ?? '');
  84. _dosageController.text = editedSupplyUsing?.dosage ?? '';
  85. _howToUseController.text = editedSupplyUsing?.howToUse ?? '';
  86. _quantityController.text = editedSupplyUsing?.quantity?.formatNumtoStringDecimal() ?? '';
  87. },
  88. child: Card(
  89. child: Stack(
  90. alignment: Alignment.bottomCenter,
  91. children: <Widget>[
  92. Positioned(
  93. child: ClipRRect(
  94. borderRadius: BorderRadius.circular(8),
  95. child: Container(
  96. padding: EdgeInsets.all(4),
  97. width: 150,
  98. child: Column(
  99. mainAxisAlignment: MainAxisAlignment.center,
  100. children: [
  101. SizedBox(
  102. height: 12.0,
  103. ),
  104. Flexible(
  105. child: Text(value.currentItems?[index].supplyName ?? "", overflow: TextOverflow.ellipsis, maxLines: 1),
  106. ),
  107. Validators.stringNotNullOrEmpty(value.currentItems?[index].dosage ?? '')
  108. ? Flexible(child: Text("${value.currentItems?[index].dosage ?? ""}"))
  109. : SizedBox(),
  110. Validators.stringNotNullOrEmpty(
  111. value.currentItems?[index].quantity?.formatNumtoStringDecimal() ?? '',
  112. )
  113. ? Flexible(
  114. child: Text(
  115. "${value.currentItems?[index].quantity?.formatNumtoStringDecimal() ?? ""} ${value.currentItems?[index].supplyUnit ?? ""}"))
  116. : SizedBox(),
  117. Validators.stringNotNullOrEmpty(value.currentItems?[index].equipmentName ?? '')
  118. ? Flexible(child: Text("${value.currentItems?[index].equipmentName ?? ""}"))
  119. : SizedBox(),
  120. Validators.stringNotNullOrEmpty(value.currentItems?[index].howToUse ?? '')
  121. ? Flexible(child: Text("${value.currentItems?[index].howToUse ?? ""}"))
  122. : SizedBox(),
  123. ],
  124. ),
  125. ),
  126. )),
  127. Positioned(
  128. top: -10,
  129. right: -10,
  130. child: IconButton(
  131. icon: Icon(
  132. Icons.cancel,
  133. color: Colors.redAccent,
  134. ),
  135. onPressed: () {
  136. changeSupplyUsing.deleteSupply(index);
  137. }),
  138. )
  139. ],
  140. )));
  141. }));
  142. }
  143. });
  144. }
  145. Widget _btnSelectSubstrates() {
  146. return GetBuilder<ChangeSupply>(
  147. init: changeSelectedSupply,
  148. builder: (data) {
  149. return TextButton(
  150. onPressed: () {
  151. var currentIndexEdit = changeSupplyUsing.currentIndex;
  152. Navigator.of(context)
  153. .push(MaterialPageRoute(
  154. builder: (_) => ResourceHelperScreen(
  155. titleName: "Thuốc BVTV",
  156. type: ConstCommon.supplyTypeProtectPlant,
  157. selectedId: changeSelectedSupply.selectedSupplyId ?? -1,
  158. currentItems: changeSupplyUsing.currentItems ?? [],
  159. currentEditId: ((currentIndexEdit ?? -1) >= 0)
  160. ? (changeSupplyUsing.currentItems ?? [])[(currentIndexEdit ?? 0)].tbSuppliesInWarehouseId ?? -1
  161. : -1,
  162. ),
  163. fullscreenDialog: false))
  164. .then((value) {
  165. if (value != null) {
  166. var result = value as Supply;
  167. changeSelectedSupply.change(result);
  168. changeUnit.updateListByUnitName(result.unit ?? '');
  169. changeFormField.change(true);
  170. }
  171. });
  172. },
  173. child: GetBuilder<ChangeSupply>(
  174. init: changeSelectedSupply,
  175. builder: (_) {
  176. var isValid = changeSelectedSupply.isValid;
  177. return Column(
  178. crossAxisAlignment: CrossAxisAlignment.start,
  179. children: [
  180. Container(
  181. padding: EdgeInsets.only(top: 0.0, right: 0.0, bottom: 10.5, left: 0.0),
  182. decoration: BoxDecoration(
  183. border: Border(
  184. bottom: BorderSide(
  185. width: 1,
  186. color: (isValid ?? false) ? Colors.grey : Colors.red,
  187. ),
  188. ),
  189. ),
  190. child: Column(
  191. crossAxisAlignment: CrossAxisAlignment.start,
  192. children: [
  193. Validators.stringNotNullOrEmpty(changeSelectedSupply.selectedSupplyName ?? '')
  194. ? Text(
  195. 'Tên thương mại *',
  196. style: TextStyle(
  197. fontSize: 13,
  198. fontWeight: FontWeight.normal,
  199. color: (isValid ?? false) ? Colors.black54 : Colors.red[600]),
  200. )
  201. : Text(
  202. '',
  203. style: TextStyle(
  204. fontSize: 13,
  205. fontWeight: FontWeight.normal,
  206. color: (isValid ?? false) ? Colors.black54 : Colors.red,
  207. ),
  208. ),
  209. Row(
  210. children: [
  211. Expanded(
  212. child: Validators.stringNotNullOrEmpty(changeSelectedSupply.selectedSupplyName ?? '')
  213. ? Text(
  214. changeSelectedSupply.selectedSupplyName ?? '',
  215. style: TextStyle(
  216. fontSize: 14.0,
  217. color: Colors.black87,
  218. ),
  219. )
  220. : Text("Tên thương mại *", style: TextStyle(fontSize: 14.0, color: Colors.black54)),
  221. ),
  222. Icon(
  223. Icons.arrow_drop_down,
  224. color: Colors.grey,
  225. ),
  226. ],
  227. ),
  228. ],
  229. )),
  230. (isValid ?? false) ? SizedBox() : WidgetErrorTextField()
  231. ],
  232. );
  233. }));
  234. });
  235. }
  236. Widget _btnSelectDevice() {
  237. return GetBuilder<ChangeDevice>(
  238. init: changeSelectedDevice,
  239. builder: (data) {
  240. return TextButton(
  241. onPressed: () {
  242. Navigator.of(context)
  243. .push(
  244. MaterialPageRoute(
  245. builder: (_) => ListDeviceActivity(
  246. selectedId: changeSelectedDevice.selectedDeviceId ?? -1,
  247. ),
  248. fullscreenDialog: false,
  249. ),
  250. )
  251. .then((value) {
  252. if (value != null) {
  253. var result = value as Device;
  254. changeSelectedDevice.change(result);
  255. changeFormField.change(true);
  256. }
  257. });
  258. },
  259. child: Container(
  260. padding: EdgeInsets.only(top: 0.0, right: 0.0, bottom: 10.5, left: 0.0),
  261. decoration: BoxDecoration(
  262. border: kBorderTextField,
  263. ),
  264. child: Column(
  265. crossAxisAlignment: CrossAxisAlignment.start,
  266. children: [
  267. Validators.stringNotNullOrEmpty(changeSelectedDevice.selectedDeviceName ?? '')
  268. ? Text(
  269. 'Thiết bị',
  270. style: TextStyle(fontSize: 13, fontWeight: FontWeight.normal, color: Colors.black45),
  271. )
  272. : Text(
  273. '',
  274. style: TextStyle(fontSize: 13, fontWeight: FontWeight.normal, color: Colors.black54),
  275. ),
  276. Row(
  277. children: [
  278. GetBuilder<ChangeSupply>(
  279. init: changeSelectedSupply,
  280. builder: (_) => Expanded(
  281. child: Validators.stringNotNullOrEmpty(changeSelectedDevice.selectedDeviceName ?? '')
  282. ? Text(changeSelectedDevice.selectedDeviceName ?? '', style: TextStyle(fontSize: 14.0, color: Colors.black87))
  283. : Text("Thiết bị", style: TextStyle(fontSize: 14.0, color: Colors.black54)),
  284. )),
  285. Icon(
  286. Icons.arrow_drop_down,
  287. color: Colors.grey,
  288. ),
  289. ],
  290. ),
  291. ],
  292. )));
  293. });
  294. }
  295. Widget _dropdownUnitTypes() {
  296. return GetBuilder<ChangeUnit>(
  297. init: changeUnit,
  298. builder: (data) {
  299. return DropdownButtonFormField<String>(
  300. itemHeight: 100,
  301. value: (data.selectedUnit ?? '').isEmpty ? null : data.selectedUnit,
  302. items: (data.currentUnits ?? [])
  303. .map((label) => DropdownMenuItem(
  304. child: Text(label),
  305. value: label,
  306. ))
  307. .toList(),
  308. onChanged: (value) {
  309. var currentQuantity = _quantityController.text;
  310. num assignValue = currentQuantity.parseDoubleThousand();
  311. if (assignValue != null) {
  312. var oldSelected = data.selectedUnit;
  313. if (oldSelected == value) {
  314. } else {
  315. assignValue = UtilAction.convertUnit(
  316. inputValue: assignValue,
  317. oldUnit: oldSelected ?? '',
  318. newUnit: value ?? '',
  319. );
  320. }
  321. _quantityController.text = assignValue.formatNumtoStringDecimal();
  322. }
  323. changeUnit.updateSelected(value ?? '');
  324. },
  325. );
  326. });
  327. }
  328. _quantityField() {
  329. return WidgetTextFormFieldNumber(
  330. hintValue: "Tổng lượng sử dụng *",
  331. labelText: "Tổng lượng sử dụng *",
  332. textController: _quantityController,
  333. validator: (String? value) {
  334. return Validators.validateNotNullOrEmpty(value ?? '', label_validate_input_empty);
  335. },
  336. onChanged: (value) {
  337. if (!Validators.stringNotNullOrEmpty(value ?? '') &&
  338. !Validators.stringNotNullOrEmpty(_howToUseController.text) &&
  339. !Validators.stringNotNullOrEmpty(_dosageController.text) &&
  340. (Get.find<ChangeSupply>().selectedSupplyId ?? -1) <= 0 &&
  341. (changeSelectedDevice.selectedDeviceId ?? -1) <= 0) {
  342. changeFormField.change(false);
  343. } else {
  344. changeFormField.change(true);
  345. }
  346. },
  347. );
  348. }
  349. _buttonInForm() {
  350. return GetBuilder<ChangeButtonInForm>(
  351. init: changeButton,
  352. builder: (_) {
  353. return Row(
  354. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  355. children: [
  356. _.isEdit ?? false
  357. ? TextButton(
  358. child: Text("Huỷ"),
  359. onPressed: () {
  360. changeButton.resetValue();
  361. _resetForm();
  362. _hidenKeyboard(context);
  363. })
  364. : SizedBox(),
  365. _.isEdit ?? false
  366. ? Expanded(
  367. child: TextButton(
  368. onPressed: () {
  369. if (_formSupplyKey.currentState!.validate()) {
  370. _formSupplyKey.currentState!.save();
  371. if ((changeSelectedSupply.selectedSupplyId ?? -1) <= 0) {
  372. changeSelectedSupply.changeValid(false);
  373. } else {
  374. changeSelectedSupply.changeValid(true);
  375. }
  376. var currentSupply = changeSelectedSupply.currentSupply;
  377. var currentDevice = changeSelectedDevice.currentDevice;
  378. var currentQuantity = _quantityController.text.parseDoubleThousand();
  379. if (currentSupply?.id != null && (currentQuantity ?? 0) > 0) {
  380. var quantityWithCurrentSupplyUnit = UtilAction.convertUnit(
  381. inputValue: currentQuantity,
  382. oldUnit: changeUnit.selectedUnit ?? '',
  383. newUnit: changeSelectedSupply.currentSupply?.unit ?? '',
  384. );
  385. SuppliesUsing newSup = SuppliesUsing()
  386. ..dosage = _dosageController.text
  387. ..howToUse = _howToUseController.text
  388. ..quantity = quantityWithCurrentSupplyUnit
  389. ..tbSuppliesInWarehouseId = currentSupply?.id
  390. ..suppliesInWarehouseId = currentSupply?.id
  391. ..supplyName = currentSupply?.tbSuppliesName
  392. ..tbEquipmentOfCustomerId = currentDevice?.id ?? -1
  393. ..equipmentOfCustomerId = currentDevice?.id ?? -1
  394. ..equipmentName = currentDevice?.name ?? ''
  395. ..supplyUnit = currentSupply?.unit
  396. ..unit = currentSupply?.unit;
  397. changeSupplyUsing.editSupply(changeSupplyUsing.currentIndex ?? -1, newSup);
  398. _resetForm();
  399. _hidenKeyboard(context);
  400. } else if (currentSupply?.id == null || ((currentQuantity ?? 0) <= 0)) {
  401. Utils.showSnackBarWarning(message: "Vui lòng nhập vật tư và số lượng");
  402. }
  403. } else {
  404. Utils.showSnackBarWarning(message: "Vui lòng nhập vật tư và số lượng");
  405. if ((changeSelectedSupply.selectedSupplyId ?? -1) <= 0) {
  406. changeSelectedSupply.changeValid(false);
  407. } else {
  408. changeSelectedSupply.changeValid(true);
  409. }
  410. }
  411. },
  412. child: Text(
  413. "Sửa thuốc BVTV",
  414. style: TextStyle(color: Colors.blue),
  415. )),
  416. )
  417. : Expanded(
  418. child: TextButton(
  419. onPressed: () {
  420. if (_formSupplyKey.currentState!.validate()) {
  421. _formSupplyKey.currentState!.save();
  422. if ((changeSelectedSupply.selectedSupplyId ?? -1) <= 0) {
  423. changeSelectedSupply.changeValid(false);
  424. } else {
  425. changeSelectedSupply.changeValid(true);
  426. }
  427. var currentSupply = changeSelectedSupply.currentSupply;
  428. var currentDevice = changeSelectedDevice.currentDevice;
  429. var currentQuantity = _quantityController.text.parseDoubleThousand();
  430. if (currentSupply?.id != null && (currentQuantity ?? 0) > 0) {
  431. var quantityWithCurrentSupplyUnit = UtilAction.convertUnit(
  432. inputValue: currentQuantity,
  433. oldUnit: changeUnit.selectedUnit ?? '',
  434. newUnit: changeSelectedSupply.currentSupply?.unit ?? '',
  435. );
  436. SuppliesUsing newSup = SuppliesUsing()
  437. ..dosage = _dosageController.text
  438. ..howToUse = _howToUseController.text
  439. ..quantity = quantityWithCurrentSupplyUnit
  440. ..tbSuppliesInWarehouseId = currentSupply?.id
  441. ..suppliesInWarehouseId = currentSupply?.id
  442. ..supplyName = currentSupply?.tbSuppliesName
  443. ..supplyUnit = currentSupply?.unit
  444. ..tbEquipmentOfCustomerId = currentDevice?.id ?? -1
  445. ..equipmentOfCustomerId = currentDevice?.id ?? -1
  446. ..equipmentName = currentDevice?.name ?? ''
  447. ..unit = currentSupply?.unit;
  448. changeSupplyUsing.addSupply(newSup);
  449. _resetForm();
  450. _hidenKeyboard(context);
  451. } else if (currentSupply?.id == null || ((currentQuantity ?? 0) <= 0)) {
  452. Utils.showSnackBarWarning(message: "Vui lòng nhập vật tư và số lượng");
  453. }
  454. } else {
  455. Utils.showSnackBarWarning(message: "Vui lòng nhập vật tư và số lượng");
  456. if ((changeSelectedSupply.selectedSupplyId ?? -1) <= 0) {
  457. changeSelectedSupply.changeValid(false);
  458. } else {
  459. changeSelectedSupply.changeValid(true);
  460. }
  461. }
  462. },
  463. child: Text(
  464. "+ Thêm thuốc BVTV",
  465. style: TextStyle(color: Colors.blue),
  466. )),
  467. )
  468. ],
  469. );
  470. });
  471. }
  472. Widget _formEdit() {
  473. return Form(
  474. key: _formSupplyKey,
  475. child: Column(
  476. children: [
  477. Container(
  478. padding: EdgeInsets.all(8.0),
  479. margin: EdgeInsets.all(8.0),
  480. decoration: BoxDecoration(
  481. shape: BoxShape.rectangle,
  482. borderRadius: BorderRadius.circular(10),
  483. color: Colors.white,
  484. border: Border.all(
  485. color: Colors.grey,
  486. ),
  487. ),
  488. child: Column(
  489. children: [
  490. _btnSelectSubstrates(),
  491. TextFormField(
  492. keyboardType: TextInputType.text,
  493. controller: _dosageController,
  494. decoration: InputDecoration(labelText: "Liều lượng sử dụng"),
  495. onSaved: (newValue) {},
  496. onChanged: (value) {
  497. if (!Validators.stringNotNullOrEmpty(_quantityController.text) &&
  498. !Validators.stringNotNullOrEmpty(_howToUseController.text) &&
  499. !Validators.stringNotNullOrEmpty(value) &&
  500. (Get.find<ChangeSupply>().selectedSupplyId ?? -1) <= 0 &&
  501. (changeSelectedDevice.selectedDeviceId ?? -1) <= 0) {
  502. changeFormField.change(false);
  503. } else {
  504. changeFormField.change(true);
  505. }
  506. },
  507. ),
  508. Row(
  509. mainAxisSize: MainAxisSize.min,
  510. mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  511. crossAxisAlignment: CrossAxisAlignment.center,
  512. children: [
  513. Expanded(
  514. flex: 2,
  515. child: Container(
  516. height: 82,
  517. child: _quantityField(),
  518. ),
  519. ),
  520. SizedBox(
  521. width: 16.0,
  522. ),
  523. Expanded(
  524. flex: 1,
  525. child: Align(
  526. alignment: Alignment.bottomCenter,
  527. child: _dropdownUnitTypes(),
  528. )),
  529. ]),
  530. _btnSelectDevice(),
  531. TextFormField(
  532. keyboardType: TextInputType.text,
  533. controller: _howToUseController,
  534. decoration: InputDecoration(labelText: "Phương pháp sử dụng"),
  535. onSaved: (newValue) {},
  536. onChanged: (value) {
  537. if (!Validators.stringNotNullOrEmpty(_quantityController.text) &&
  538. !Validators.stringNotNullOrEmpty(value) &&
  539. !Validators.stringNotNullOrEmpty(_dosageController.text) &&
  540. (Get.find<ChangeSupply>().selectedSupplyId ?? -1) <= 0 &&
  541. (changeSelectedDevice.selectedDeviceId ?? -1) <= 0) {
  542. changeFormField.change(false);
  543. } else {
  544. changeFormField.change(true);
  545. }
  546. },
  547. ),
  548. ],
  549. ),
  550. ),
  551. _buttonInForm()
  552. ],
  553. ),
  554. );
  555. }
  556. _resetForm() {
  557. changeSupplyUsing.changeIndexEdit(-1);
  558. changeButton.resetValue();
  559. _dosageController.text = "";
  560. _howToUseController.text = "";
  561. _quantityController.text = "";
  562. changeUnit.initValue();
  563. changeSelectedSupply.initValue();
  564. changeSelectedDevice.initValue();
  565. changeFormField.change(false);
  566. }
  567. _hidenKeyboard(BuildContext context) {
  568. FocusScopeNode currentFocus = FocusScope.of(context);
  569. if (!currentFocus.hasPrimaryFocus) {
  570. currentFocus.unfocus();
  571. }
  572. }
  573. @override
  574. Widget build(BuildContext context) {
  575. return Column(
  576. crossAxisAlignment: CrossAxisAlignment.start,
  577. children: [
  578. Padding(
  579. padding: const EdgeInsets.all(8.0),
  580. child: Align(
  581. alignment: Alignment.centerLeft,
  582. child: Text(
  583. 'Thuốc BVTV',
  584. style: TextStyle(color: Colors.black54, fontSize: 14),
  585. ),
  586. ),
  587. ),
  588. _buildListSupply(),
  589. SizedBox(
  590. height: 8.0,
  591. ),
  592. _formEdit()
  593. ],
  594. );
  595. }
  596. }