error_detail.dart 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import 'package:liftmanager/internal/bbs/model/error_model.dart';
  4. import 'package:liftmanager/net/api_service.dart';
  5. import 'package:liftmanager/res/resources.dart';
  6. import 'package:liftmanager/utils/toast.dart';
  7. import 'package:liftmanager/utils/utils.dart';
  8. import 'package:liftmanager/widgets/app_bar.dart';
  9. import 'package:liftmanager/widgets/bbs_content.dart';
  10. import 'package:liftmanager/widgets/load_image.dart';
  11. import 'package:liftmanager/widgets/preview_images.dart';
  12. class ErrorDetail extends StatefulWidget {
  13. ErrorDetail(this.id);
  14. final String id;
  15. @override
  16. State<StatefulWidget> createState() {
  17. return ErrorDetailState();
  18. }
  19. }
  20. class ErrorDetailState extends State<ErrorDetail> {
  21. @override
  22. void initState() {
  23. super.initState();
  24. getFaultCodeDetail();
  25. }
  26. bool _hasData = false;
  27. ErrorDetailModel detailObj;
  28. List<String> listPreview = [];
  29. getFaultCodeDetail() {
  30. NewApiService().getFaultCodeDetail(widget.id, onSuccess: (res) {
  31. detailObj = res;
  32. listPreview = [];
  33. detailObj.imgs.split(",").forEach((element) {
  34. listPreview.add(Utils.getImagePath(element, isWater: true));
  35. });
  36. _hasData = true;
  37. setState(() {});
  38. }, onError: (code, msg) {
  39. toasts(msg);
  40. });
  41. }
  42. @override
  43. Widget build(BuildContext context) {
  44. double width = MediaQuery.of(context).size.width;
  45. return Scaffold(
  46. resizeToAvoidBottomPadding: false, //不让键盘弹上去
  47. appBar: MyAppBar(
  48. centerTitle: "故障码详情",
  49. ),
  50. body: _hasData
  51. ? Container(
  52. child: ListView(
  53. children: <Widget>[
  54. Column(
  55. mainAxisAlignment: MainAxisAlignment.start,
  56. crossAxisAlignment: CrossAxisAlignment.start,
  57. children: <Widget>[
  58. Container(
  59. child: Column(
  60. crossAxisAlignment: CrossAxisAlignment.start,
  61. mainAxisAlignment: MainAxisAlignment.start,
  62. children: <Widget>[
  63. SectionHeader(title: '故障码'),
  64. SizedBox(height: 10),
  65. Container(
  66. width: 55,
  67. height: 30,
  68. alignment: Alignment.center,
  69. margin: EdgeInsets.only(left: 10),
  70. decoration: BoxDecoration(
  71. borderRadius: BorderRadius.circular(4.0),
  72. color: Color(0xffEBF1FF),
  73. ),
  74. child: Text(
  75. detailObj.code ?? '',
  76. style: TextStyle(
  77. color: Color(0xff5589FF),
  78. fontSize: 12,
  79. ),
  80. textAlign: TextAlign.center,
  81. ),
  82. ),
  83. SizedBox(height: 20)
  84. ],
  85. ),
  86. ),
  87. Container(height: 5, color: Color(0xffFAF7FA)),
  88. Column(
  89. crossAxisAlignment: CrossAxisAlignment.start,
  90. mainAxisAlignment: MainAxisAlignment.start,
  91. children: <Widget>[
  92. SectionHeader(title: '故障描述'),
  93. Container(
  94. padding: EdgeInsets.only(
  95. left: ScreenUtil().setWidth(10),
  96. ),
  97. child: Text(
  98. detailObj.descr ?? '',
  99. style: TextStyle(
  100. color: Color(0xff666666),
  101. fontSize: 13,
  102. ),
  103. textAlign: TextAlign.left,
  104. ),
  105. ),
  106. SizedBox(
  107. height: 10,
  108. ),
  109. ],
  110. ),
  111. Container(height: 1, color: Color(0xffFAF7FA)),
  112. Column(
  113. crossAxisAlignment: CrossAxisAlignment.start,
  114. mainAxisAlignment: MainAxisAlignment.start,
  115. children: <Widget>[
  116. SectionHeader(title: '问题现象'),
  117. Container(
  118. padding: EdgeInsets.only(
  119. left: ScreenUtil().setWidth(10),
  120. ),
  121. child: Text(
  122. detailObj.cause ?? '',
  123. style: TextStyle(
  124. color: Color(0xff666666),
  125. fontSize: 13,
  126. ),
  127. textAlign: TextAlign.left,
  128. ),
  129. ),
  130. SizedBox(
  131. height: 10,
  132. ),
  133. ],
  134. ),
  135. Container(height: 1, color: Color(0xffFAF7FA)),
  136. Column(
  137. crossAxisAlignment: CrossAxisAlignment.start,
  138. mainAxisAlignment: MainAxisAlignment.start,
  139. children: <Widget>[
  140. SectionHeader(title: '解决办法'),
  141. Container(
  142. padding: EdgeInsets.only(
  143. left: ScreenUtil().setWidth(10),
  144. ),
  145. child: Text(
  146. detailObj.recoveryMethod ?? '',
  147. style: TextStyle(
  148. color: Color(0xff666666),
  149. fontSize: ScreenUtil().setSp(13),
  150. ),
  151. textAlign: TextAlign.left,
  152. ),
  153. ),
  154. SizedBox(
  155. height: 10,
  156. ),
  157. ],
  158. ),
  159. Container(
  160. padding: EdgeInsets.all(10),
  161. decoration: BoxDecoration(
  162. border: Border(
  163. bottom: BorderSide(width: 0.5, color: Colours.line),
  164. ),
  165. ),
  166. child: Column(
  167. mainAxisAlignment: MainAxisAlignment.start,
  168. crossAxisAlignment: CrossAxisAlignment.start,
  169. children: <Widget>[
  170. ErrorImages(imgList: listPreview)
  171. ]),
  172. ),
  173. ],
  174. ),
  175. ],
  176. ),
  177. )
  178. : Center(
  179. child: Text("正在加载..."),
  180. ),
  181. );
  182. }
  183. }
  184. class ErrorImages extends StatelessWidget {
  185. ErrorImages({Key key, this.imgList}) : super(key: key);
  186. List<dynamic> imgList = [];
  187. List<Widget> imageList(context) => imgList.asMap().keys.map((index) {
  188. double width = MediaQuery.of(context).size.width;
  189. return Container(
  190. margin: EdgeInsets.only(
  191. bottom: ScreenUtil().setWidth(10),
  192. ),
  193. child: GestureDetector(
  194. onTap: () {
  195. Navigator.of(context).push(
  196. new FadeRoute(
  197. page: PhotoViewGalleryScreen(
  198. images: imgList, //传入图片list
  199. index: index, //传入当前点击的图片的index
  200. // heroTag: img,//传入当前点击的图片的hero tag (可选)
  201. ),
  202. ),
  203. );
  204. },
  205. child: ClipRRect(
  206. borderRadius: BorderRadius.circular(5),
  207. child: Container(
  208. width: width,
  209. height: 220,
  210. child: LoadNetworkImage(
  211. imgList[index],
  212. fit: BoxFit.cover,
  213. ),
  214. ),
  215. ),
  216. ));
  217. }).toList();
  218. @override
  219. Widget build(BuildContext context) {
  220. return Container(
  221. padding: EdgeInsets.only(
  222. top: ScreenUtil().setWidth(5),
  223. left: ScreenUtil().setWidth(15),
  224. right: ScreenUtil().setWidth(15)),
  225. child: Wrap(
  226. spacing: 6,
  227. alignment: WrapAlignment.spaceBetween,
  228. crossAxisAlignment: WrapCrossAlignment.center,
  229. children: imageList(context),
  230. ));
  231. }
  232. }
  233. class FadeRoute extends PageRouteBuilder {
  234. final Widget page;
  235. FadeRoute({this.page})
  236. : super(
  237. pageBuilder: (
  238. BuildContext context,
  239. Animation<double> animation,
  240. Animation<double> secondaryAnimation,
  241. ) =>
  242. page,
  243. transitionsBuilder: (
  244. BuildContext context,
  245. Animation<double> animation,
  246. Animation<double> secondaryAnimation,
  247. Widget child,
  248. ) =>
  249. FadeTransition(
  250. opacity: animation,
  251. child: child,
  252. ),
  253. );
  254. }