maint_job_list.dart 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import 'package:deus_app/common/style/TitleBar.dart';
  2. import 'package:deus_app/common/style/gsy_style.dart';
  3. import 'package:deus_app/common/utils/ConstantString.dart';
  4. import 'package:deus_app/common/utils/DioUtil.dart';
  5. import 'package:deus_app/common/utils/ToastUtils.dart';
  6. import 'package:deus_app/model/patrol_job_detail_response_entity.dart';
  7. import 'package:deus_app/page/patrol/patrol_job_edit.dart';
  8. import 'package:flutter/material.dart';
  9. class MaintlJobList extends StatefulWidget {
  10. final PatrolJobDetailResponseData responseData;
  11. const MaintlJobList({super.key, required this.responseData});
  12. @override
  13. State createState() {
  14. return _MaintlJobList(responseData);
  15. }
  16. }
  17. class _MaintlJobList extends State<MaintlJobList> {
  18. PatrolJobDetailResponseData responseData;
  19. _MaintlJobList(this.responseData);
  20. @override
  21. Widget build(BuildContext context) {
  22. return Scaffold(
  23. appBar: TitleBar().backAppbar("巡检设备详情"),
  24. backgroundColor: const Color(0xfff2f2f2),
  25. body: Stack(
  26. children: [
  27. Column(
  28. children: [
  29. SizedBox(
  30. height: 10,
  31. ),
  32. Row(
  33. mainAxisAlignment: MainAxisAlignment.start,
  34. children: [
  35. SizedBox(
  36. width: 15,
  37. ),
  38. Text(ConstantString.patrolJobTitle,
  39. style: GSYConstant.smallActionLightText),
  40. ],
  41. ),
  42. Expanded(
  43. child: Container(
  44. margin: EdgeInsets.only(bottom: 60),
  45. child: ListView.builder(
  46. itemCount: responseData.equipmentVOS.length,
  47. itemBuilder: (context, index) {
  48. return Container(
  49. margin: EdgeInsets.only(top: 12, left: 10, right: 10),
  50. padding: EdgeInsets.only(top: 12, bottom: 10),
  51. color: Colors.white,
  52. child: ListTile(
  53. title: Column(
  54. children: [
  55. Container(
  56. // padding: const EdgeInsets.fromLTRB(30.0, 0.0, 0.0, 0.0),
  57. alignment: Alignment.centerLeft,
  58. child: Row(
  59. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  60. children: [
  61. Text(responseData.equipmentVOS[index].showName,
  62. style: GSYConstant.smallTextBold),
  63. Text(
  64. responseData
  65. .equipmentVOS[index].isComplete==0?'未完成':'已完成',
  66. style: TextStyle(
  67. fontSize: GSYConstant.smallTextSize,
  68. color: responseData.equipmentVOS[index].isComplete==0?Colors.red:Colors.blue),
  69. ),
  70. ]),
  71. ),
  72. Container(
  73. margin: const EdgeInsets.only(top: 10),
  74. // padding: const EdgeInsets.fromLTRB(30.0, 0.0, 0.0, 10.0),
  75. // alignment: Alignment.centerLeft,
  76. child: Row(
  77. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  78. children: [
  79. new Text(
  80. '完成时间:',
  81. style: GSYConstant.smallTextLight,
  82. ),
  83. Container(
  84. child: Text(
  85. responseData.equipmentVOS[index].itemCompleteTime,
  86. style: GSYConstant.smallTextLight,
  87. textAlign: TextAlign.right,
  88. ),
  89. ),
  90. ]),
  91. ),
  92. SizedBox(
  93. height: 5,
  94. ),
  95. ],
  96. ),
  97. onTap: () {
  98. completeEquipment(index);
  99. },
  100. ));
  101. },
  102. )
  103. ),
  104. )
  105. ],
  106. ),
  107. Positioned(
  108. left: 0,
  109. right: 0,
  110. bottom:0,
  111. // flex: 7,
  112. child:SizedBox(
  113. height: 50,
  114. width: double.infinity,
  115. child: TextButton(
  116. onPressed: () {
  117. if(next()){
  118. Navigator.push(
  119. context,
  120. MaterialPageRoute(
  121. builder: (context) =>
  122. PatrolJobEdit(id: responseData.id)));
  123. }
  124. },
  125. style: ButtonStyle(
  126. backgroundColor: MaterialStateProperty.all<Color>(
  127. Color(0xFF4875EC)),
  128. shape: MaterialStateProperty.all(
  129. BeveledRectangleBorder(
  130. borderRadius: BorderRadius.circular(0))),
  131. foregroundColor:
  132. MaterialStateProperty.all<Color>(Colors.white),
  133. // padding: MaterialStateProperty.all(EdgeInsets.zero)
  134. ),
  135. child: const Text(ConstantString.next),
  136. ),
  137. ),
  138. )
  139. ],
  140. ));
  141. }
  142. completeEquipment(int index) async {
  143. if (responseData.equipmentVOS[index].isComplete == 0) {
  144. var result = await DioUtil().request("patrolJob/completeEquipment",
  145. method: DioMethod.post,
  146. data: {'id': responseData.equipmentVOS[index].id});
  147. if (result['code'] == 0) {
  148. setState(() {
  149. responseData.equipmentVOS[index].isComplete = 1;
  150. });
  151. } else {
  152. showToast(result['msg']);
  153. }
  154. }
  155. }
  156. bool next(){
  157. bool isNext=true;
  158. for (var element in responseData.equipmentVOS) {
  159. if(element.isComplete==0){
  160. isNext=false;
  161. break;
  162. }
  163. }
  164. return isNext;
  165. }
  166. }