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.

193 lines
7.5KB

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