maint_job_select.dart 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. import 'package:deus_app/common/event/RefreshMaintEdit.dart';
  2. import 'package:deus_app/common/style/TitleBar.dart';
  3. import 'package:deus_app/common/style/gsy_style.dart';
  4. import 'package:deus_app/common/utils/ConstantString.dart';
  5. import 'package:deus_app/common/utils/DioUtil.dart';
  6. import 'package:deus_app/common/utils/ToastUtils.dart';
  7. import 'package:deus_app/generated/json/maint_items_list_response_entity_helper.dart';
  8. import 'package:deus_app/main.dart';
  9. import 'package:deus_app/model/maint_items_list_response_entity.dart';
  10. import 'package:flutter/cupertino.dart';
  11. import 'package:flutter/material.dart';
  12. import 'package:pull_to_refresh/pull_to_refresh.dart';
  13. class MaintJobSelect extends StatefulWidget {
  14. var id;
  15. @override
  16. State createState() {
  17. return _MaintlJobSelect(id);
  18. }
  19. MaintJobSelect({super.key, required this.id});
  20. }
  21. class _MaintlJobSelect extends State<MaintJobSelect> {
  22. var id;
  23. _MaintlJobSelect(this.id);
  24. final RefreshController _refreshController =
  25. RefreshController(initialRefresh: false);
  26. int index = 1;
  27. List<MaintItemsListResponseDataList> patrolItemModelVOS = [];
  28. MaintItemsListResponseEntity jobEdit = MaintItemsListResponseEntity();
  29. @override
  30. void initState() {
  31. super.initState();
  32. patrolItemModel();
  33. }
  34. patrolItemModel() async {
  35. var result = await DioUtil().request('maintItems/app-list',
  36. method: DioMethod.post, data: {'index': index, 'size': 20});
  37. _refreshController.loadComplete();
  38. _refreshController.refreshCompleted();
  39. if (0 == result['code']) {
  40. setState(() {
  41. jobEdit = maintItemsListResponseEntityFromJson(
  42. MaintItemsListResponseEntity(), result);
  43. patrolItemModelVOS.clear();
  44. patrolItemModelVOS.addAll(jobEdit.data.xList);
  45. });
  46. } else {
  47. if (index > 1) {
  48. index--;
  49. }
  50. showToast(result['msg']);
  51. }
  52. }
  53. @override
  54. Widget build(BuildContext context) {
  55. return Scaffold(
  56. appBar: TitleBar().backAppbar("选择巡检项目"),
  57. backgroundColor: const Color(0xfff2f2f2),
  58. body: Stack(
  59. children: [
  60. Container(
  61. child: SmartRefresher(
  62. enablePullDown: true,
  63. enablePullUp: true,
  64. header: WaterDropHeader(),
  65. footer: CustomFooter(
  66. builder: (BuildContext context, LoadStatus? mode) {
  67. Widget body;
  68. if (mode == LoadStatus.idle) {
  69. body = Text("上拉加载");
  70. } else if (mode == LoadStatus.loading) {
  71. body = CupertinoActivityIndicator();
  72. } else if (mode == LoadStatus.failed) {
  73. body = Text("加载失败!点击重试!");
  74. } else if (mode == LoadStatus.canLoading) {
  75. body = Text("松手,加载更多!");
  76. } else {
  77. body = Text("没有更多数据了!");
  78. }
  79. return Container(
  80. height: 55.0,
  81. child: Center(child: body),
  82. );
  83. },
  84. ),
  85. controller: _refreshController,
  86. onRefresh: _onRefresh,
  87. onLoading: _onLoading,
  88. child: ListView.builder(
  89. itemCount: patrolItemModelVOS.length,
  90. itemBuilder: (context, index) {
  91. return _patrol_job_list(index);
  92. },
  93. ),
  94. )),
  95. Positioned(
  96. left: 0,
  97. right: 0,
  98. bottom:0,
  99. // flex: 7,
  100. child:SizedBox(
  101. height: 50,
  102. width: double.infinity,
  103. child: TextButton(
  104. onPressed: () {
  105. addItems();
  106. },
  107. style: ButtonStyle(
  108. backgroundColor: MaterialStateProperty.all<Color>(
  109. Color(0xFF4875EC)),
  110. shape: MaterialStateProperty.all(
  111. BeveledRectangleBorder(
  112. borderRadius: BorderRadius.circular(0))),
  113. foregroundColor:
  114. MaterialStateProperty.all<Color>(Colors.white),
  115. // padding: MaterialStateProperty.all(EdgeInsets.zero)
  116. ),
  117. child: const Text(ConstantString.save),
  118. ),
  119. ),
  120. )
  121. ],
  122. ));
  123. }
  124. void _onRefresh() async {
  125. if (mounted) {
  126. setState(() {
  127. index = 1;
  128. patrolItemModel();
  129. });
  130. }
  131. }
  132. void _onLoading() async {
  133. if (mounted) {
  134. setState(() {
  135. if (jobEdit.data.total > patrolItemModelVOS.length) {
  136. index++;
  137. patrolItemModel();
  138. } else {
  139. _refreshController.loadNoData();
  140. }
  141. });
  142. }
  143. }
  144. Widget _patrol_job_list(int index) {
  145. return Container(
  146. margin: EdgeInsets.only(top: 12, left: 10, right: 10),
  147. padding: EdgeInsets.only(top: 12, bottom: 10),
  148. color: Colors.white,
  149. child: ListTile(
  150. title: Column(
  151. children: [
  152. Container(
  153. child: Row(
  154. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  155. children: [
  156. Text(patrolItemModelVOS[index].name,
  157. style: TextStyle(
  158. fontSize: GSYConstant.middleTextWhiteSize,
  159. fontWeight: FontWeight.bold)),
  160. Checkbox(
  161. value: patrolItemModelVOS[index].isCheck,
  162. activeColor: Colors.blue,
  163. onChanged: (bool? value) {
  164. setState(() {
  165. patrolItemModelVOS[index].isCheck=value!;
  166. });
  167. },
  168. ),
  169. ],
  170. ),
  171. ),
  172. Container(
  173. margin: const EdgeInsets.fromLTRB(0, 10.0, 0, 0),
  174. alignment: Alignment.centerLeft,
  175. child: Text(
  176. patrolItemModelVOS[index].requirements,
  177. style: GSYConstant.smallTextLight,
  178. ),
  179. ),
  180. const SizedBox(
  181. height: 5,
  182. ),
  183. ],
  184. ),
  185. onTap: () {
  186. // Navigator.push(
  187. // context,
  188. // MaterialPageRoute(
  189. // builder: (context) =>
  190. // PatrolJobAdd(responseData: patrolItemModelVOS[index], id: id,)));
  191. },
  192. ));
  193. }
  194. addItems() async {
  195. List<int>mList=[];
  196. for (var value in patrolItemModelVOS) {
  197. if(value.isCheck){
  198. mList.add(value.id);
  199. }
  200. }
  201. if(mList.isEmpty){
  202. showToast("请选择维保项目");
  203. return;
  204. }
  205. var result = await DioUtil().request('maintJob/addItems',
  206. method: DioMethod.post, data: {'jobId': id,'maintItemsIds':mList});
  207. if (result['code'] == 0) {
  208. setState(() {
  209. eventBus.fire(RefreshMaintEdit());
  210. Navigator.pop(context);
  211. });
  212. } else {
  213. showToast(result['msg']);
  214. }
  215. }
  216. }