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.

198 lines
8.0KB

  1. import 'package:farm_tpf/custom_model/action_form/RequestActivity.dart';
  2. import 'package:farm_tpf/presentation/custom_widgets/widget_utils.dart';
  3. import 'package:farm_tpf/presentation/screens/actions/controller/ChangeFieldInForm.dart';
  4. import 'package:farm_tpf/presentation/screens/actions/controller/ChangeWorker.dart';
  5. import 'package:farm_tpf/utils/const_string.dart';
  6. import 'package:farm_tpf/utils/validators.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:get/get.dart';
  9. import 'package:get/get_state_manager/get_state_manager.dart';
  10. class WidgetWorker extends StatefulWidget {
  11. final Function(List<TbNurseryDetailsDTO>) onChangeWorkers;
  12. const WidgetWorker({required this.onChangeWorkers});
  13. @override
  14. _WidgetWorkerState createState() => _WidgetWorkerState();
  15. }
  16. class _WidgetWorkerState extends State<WidgetWorker> {
  17. GlobalKey<FormState> _formWorkerKey = GlobalKey();
  18. TextEditingController _workerNameController = TextEditingController();
  19. TextEditingController _trayNumberController = TextEditingController();
  20. ChangeWorker? controller;
  21. final changeFormField = Get.put(ChangeFieldFormSupply());
  22. @override
  23. void initState() {
  24. super.initState();
  25. controller = Get.put(ChangeWorker());
  26. controller?.init([]);
  27. changeFormField.init();
  28. }
  29. Widget _buildListWorker() {
  30. return GetBuilder<ChangeWorker>(builder: (data) {
  31. widget.onChangeWorkers(data.currentItems ?? []);
  32. if (data.currentItems?.length == 0 || data.currentItems == null) {
  33. return Container();
  34. } else {
  35. return Container(
  36. height: 70,
  37. child: ListView.builder(
  38. physics: ClampingScrollPhysics(),
  39. scrollDirection: Axis.horizontal,
  40. shrinkWrap: true,
  41. itemCount: data?.currentItems?.length ?? 0,
  42. itemBuilder: (context, index) {
  43. return GestureDetector(
  44. onTap: () {
  45. print("edit worker");
  46. },
  47. child: Card(
  48. child: Stack(
  49. alignment: Alignment.bottomCenter,
  50. children: <Widget>[
  51. Positioned(
  52. child: ClipRRect(
  53. borderRadius: BorderRadius.circular(8),
  54. child: Container(
  55. padding: EdgeInsets.all(4),
  56. width: 120,
  57. child: Column(
  58. mainAxisAlignment: MainAxisAlignment.center,
  59. children: [
  60. SizedBox(
  61. height: 12.0,
  62. ),
  63. Flexible(
  64. child: Text(data.currentItems?[index].workerName ?? '', overflow: TextOverflow.ellipsis, maxLines: 1),
  65. ),
  66. Validators.stringNotNullOrEmpty(data.currentItems?[index].trayNumber ?? '')
  67. ? Flexible(child: Text(data.currentItems?[index].trayNumber ?? ''))
  68. : SizedBox()
  69. ],
  70. ),
  71. ),
  72. )),
  73. Positioned(
  74. top: -10,
  75. right: -10,
  76. child: IconButton(
  77. icon: Icon(
  78. Icons.cancel,
  79. color: Colors.redAccent,
  80. ),
  81. onPressed: () {
  82. controller?.deleteNurseryDetail(index);
  83. print("Delete worker");
  84. }),
  85. )
  86. ],
  87. )));
  88. }));
  89. }
  90. });
  91. }
  92. @override
  93. Widget build(BuildContext context) {
  94. return GetBuilder<ChangeWorker>(builder: (data) {
  95. return Container(
  96. child: Form(
  97. key: _formWorkerKey,
  98. child: Column(
  99. children: [
  100. Container(
  101. width: double.infinity,
  102. height: 16,
  103. color: Colors.grey[200],
  104. ),
  105. SizedBox(
  106. height: 8.0,
  107. ),
  108. Padding(
  109. padding: const EdgeInsets.all(8.0),
  110. child: Align(
  111. alignment: Alignment.centerLeft,
  112. child: Text(
  113. 'Người thực hiện',
  114. style: TextStyle(color: Colors.black54, fontSize: 14),
  115. ),
  116. ),
  117. ),
  118. _buildListWorker(),
  119. Container(
  120. padding: EdgeInsets.all(8.0),
  121. margin: EdgeInsets.all(8),
  122. decoration: BoxDecoration(
  123. shape: BoxShape.rectangle, borderRadius: BorderRadius.circular(10), color: Colors.white, border: Border.all(color: Colors.grey)),
  124. child: Column(
  125. children: [
  126. TextFormField(
  127. keyboardType: TextInputType.text,
  128. controller: _workerNameController,
  129. decoration: InputDecoration(labelText: "Tên công nhân *"),
  130. validator: (value) {
  131. return Validators.validateNotNullOrEmpty(value ?? '', label_validate_input_empty);
  132. },
  133. onSaved: (newValue) {},
  134. onChanged: (value) {
  135. if (!Validators.stringNotNullOrEmpty(value)) {
  136. changeFormField.change(false);
  137. } else {
  138. changeFormField.change(true);
  139. }
  140. },
  141. ),
  142. TextFormField(
  143. keyboardType: TextInputType.text,
  144. controller: _trayNumberController,
  145. decoration: InputDecoration(labelText: "Ươm khây số"),
  146. onSaved: (newValue) {},
  147. onChanged: (value) {
  148. if (!Validators.stringNotNullOrEmpty(value)) {
  149. changeFormField.change(false);
  150. } else {
  151. changeFormField.change(true);
  152. }
  153. },
  154. ),
  155. ],
  156. ),
  157. ),
  158. Container(
  159. margin: EdgeInsets.all(8),
  160. child: TextButton(
  161. onPressed: () {
  162. if (_formWorkerKey.currentState!.validate()) {
  163. _formWorkerKey.currentState!.save();
  164. if (Validators.stringNotNullOrEmpty(_workerNameController.text)) {
  165. TbNurseryDetailsDTO _nurseryDetail = TbNurseryDetailsDTO()
  166. ..workerName = _workerNameController.text
  167. ..trayNumber = _trayNumberController.text;
  168. controller?.addNurseryDetail(_nurseryDetail);
  169. _workerNameController.clear();
  170. _trayNumberController.clear();
  171. changeFormField.change(false);
  172. } else {
  173. Utils.showSnackBarWarning(message: "Vui lòng nhập tên công nhân");
  174. }
  175. } else {
  176. //
  177. if (!Validators.stringNotNullOrEmpty(_workerNameController.text)) {
  178. Utils.showSnackBarWarning(message: "Vui lòng nhập tên công nhân");
  179. }
  180. }
  181. },
  182. child: Text(
  183. "+ Thêm người thực hiện",
  184. style: TextStyle(color: Colors.blue),
  185. )),
  186. ),
  187. ],
  188. ),
  189. ));
  190. });
  191. }
  192. }