diff --git a/lib/components/hyxx_data_handle.dart b/lib/components/hyxx_data_handle.dart index 20f5fae..439944f 100644 --- a/lib/components/hyxx_data_handle.dart +++ b/lib/components/hyxx_data_handle.dart @@ -472,6 +472,9 @@ List listDwspGetList2 = []; List listSbglGetData = []; List listSbglGetList2 = []; +// 今日记录统计信息数据变量 +List listTodayList = []; + //6、报警信息查询数据变量 List listSbbjGetData = []; List listSbbjGetList2 = [ diff --git a/lib/pages/Works/TJXX/today_list.dart b/lib/pages/Works/TJXX/today_list.dart index 4a74fd6..e37c23a 100644 --- a/lib/pages/Works/TJXX/today_list.dart +++ b/lib/pages/Works/TJXX/today_list.dart @@ -5,17 +5,14 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:hyzp_ybqx/components/commonFun.dart'; -import 'package:hyzp_ybqx/pages/Works/HYSH/tsjj_content_new.dart'; import 'package:hyzp_ybqx/pages/Works/TJXX/tj_data.dart'; -import 'package:hyzp_ybqx/pages/Works/TJXX/today_list_zpjl_content.dart'; +import 'package:hyzp_ybqx/pages/Works/TJXX/today_list_zpjl_content_new.dart'; import 'package:hyzp_ybqx/services/EventBus.dart'; import '../../../components/commonFun.dart'; import '../../../components/doJSON.dart'; import '../../../components/hyxx_data_handle.dart'; import '../../../services/EventBus.dart'; -import '../HYSH/fhycx_content_new.dart'; -import '../HYSH/hysh_content_new.dart'; //TodayList是本项目中“今日记录列表”的统一缩写,包括:今日抓拍、今日初审、今日复审、今日推送 class TodayList extends StatefulWidget { @@ -43,7 +40,7 @@ class _TodayListPageState extends State { super.dispose(); } - List listTodayList = []; + // List listTodayList = []; Map mapTodayListLx = { 'jrzp': { 'text': '今日抓拍记录', @@ -628,11 +625,12 @@ class _TodayListPageState extends State { if (widget.todayListLx == 'jrzp') { ret = await Navigator.of(context).push( MaterialPageRoute( - builder: (context) => TodayListZpjlContent( + builder: (context) => TodayListZpjlContentNew( hyshlx: widget.todayListLx, text: mapTodayListLx[widget.todayListLx]['text0'], - num: '(${indexRecord + 1}/${listTodayList.length})', - mapZpjl: listTodayList[indexRecord]), + index: indexRecord), + // num: '(${indexRecord + 1}/${listTodayList.length})', + // mapZpjl: listTodayList[indexRecord]), ), ); } @@ -712,11 +710,12 @@ class _TodayListPageState extends State { if (widget.todayListLx == 'hycs') { ret = await Navigator.of(context).push( MaterialPageRoute( - builder: (context) => TodayListZpjlContent( + builder: (context) => TodayListZpjlContentNew( hyshlx: widget.todayListLx, text: mapTodayListLx[widget.todayListLx]['text0'], - num: '(${indexRecord + 1}/${listTodayList.length})', - mapZpjl: listTodayList[indexRecord]), + index: indexRecord), + // num: '(${indexRecord + 1}/${listTodayList.length})', + // mapZpjl: listTodayList[indexRecord]), ), ); } @@ -821,11 +820,12 @@ class _TodayListPageState extends State { if (widget.todayListLx == 'hyfh') { ret = await Navigator.of(context).push( MaterialPageRoute( - builder: (context) => TodayListZpjlContent( + builder: (context) => TodayListZpjlContentNew( hyshlx: widget.todayListLx, text: mapTodayListLx[widget.todayListLx]['text0'], - num: '(${indexRecord + 1}/${listTodayList.length})', - mapZpjl: listTodayList[indexRecord]), + index: indexRecord), + // num: '(${indexRecord + 1}/${listTodayList.length})', + // mapZpjl: listTodayList[indexRecord]), ), ); } @@ -940,11 +940,12 @@ class _TodayListPageState extends State { if (widget.todayListLx == 'tsjj') { ret = await Navigator.of(context).push( MaterialPageRoute( - builder: (context) => TodayListZpjlContent( + builder: (context) => TodayListZpjlContentNew( hyshlx: widget.todayListLx, text: mapTodayListLx[widget.todayListLx]['text0'], - num: '(${indexRecord + 1}/${listTodayList.length})', - mapZpjl: listTodayList[indexRecord], + index: indexRecord, + // num: '(${indexRecord + 1}/${listTodayList.length})', + // mapZpjl: listTodayList[indexRecord], tsztText: mapTsztText[getInt(listTodayList[indexRecord]['tszt'])], ), ), diff --git a/lib/pages/Works/TJXX/today_list_zpjl_content_new.dart b/lib/pages/Works/TJXX/today_list_zpjl_content_new.dart new file mode 100644 index 0000000..7b4091a --- /dev/null +++ b/lib/pages/Works/TJXX/today_list_zpjl_content_new.dart @@ -0,0 +1,856 @@ +//import '../../../widget/player_pro.dart'; + +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_drag_scale/flutter_drag_scale.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:hyzp_ybqx/widget/my_superplayer.dart'; +import 'package:keyboard_avoider/keyboard_avoider.dart'; + +// +import '../../../components/commonFun.dart'; +import '../../../components/doJSON.dart'; +import '../../../components/hyxx_data_handle.dart'; + +// "today": { +// "total": 4, +// "data": [ +// { +// "id": 428549, +// "car_number": "川15A2563", +// "cpys": "绿色", +// "zpsj": "2021-04-04 11:31:11", +// "dwip": "172.16.3.3", +// "dwms": "岷江南路森林小区附近", +// "cplx": "农用车", +// "lgmzs": 3, +// "pic_url": "/wwwroot/admin/Api/wwwroot/public/uploads/e936524e92f90541cbaeca3b092c95be.jpg", +// "video_url": "video/3_6063_20210404_113111_川15A2563.mp4" +// }, + +class TodayListZpjlContentNew extends StatefulWidget { + TodayListZpjlContentNew({ + @required this.hyshlx, + @required this.index, + // @required this.num, + @required this.text, + // @required this.mapZpjl, + this.tsztText = '', + Key key, + }) : super(key: key); + String hyshlx; + + // String num; + int index; + String text; + // Map mapZpjl; + String tsztText; + + _TodayListZpjlPageState createState() => _TodayListZpjlPageState(); +} + +//用TabController实现顶部tab切换 +class _TodayListZpjlPageState extends State { + //try_setState(); //避免如下异常报错 + try_setState() { + try { + if (mounted) { + setState(() {}); + } + } catch (e) { + print('setState(() {})异常:${e}'); + } + } + + dispose() { + super.dispose(); + } + + BuildContext _context; + + //flutter_screenUtil 4.x 用法,ScreenUtil.screenWidth (sdk>=2.6 : 1.sw) //设备宽度 + double _screenWidth = 1.sw; + + double _marginLeft = 25; + double _marginCenter = 35; + double _fontSize = 16; + double _widthLeft = 40; // = _screenWidth / 3; + double _iconSize = 18; + double _stampSize = 100; + double _listTileHeight = 30; + Color _iconColor = Colors.blue; + double _marginVer = 10; + + Map _mapTsjjGetTsStatus = {}; + + Map mapName = {}; + + int listLen = 0; + String num; + Map mapZpjl; + + void initState() { + _context = context; + _widthLeft = _screenWidth / 2.6; + //getListFlields(); + + //得到字段名称 + mapName['plate_id'] = widget.hyshlx == 'jrzp' ? 'car_number' : 'plate_id'; + mapName['plate_color'] = widget.hyshlx == 'jrzp' ? 'cpys' : 'plate_color'; + + getZpjlData(); // 得到 index 对应的今日抓拍记录数据 + super.initState(); + } + + getZpjlData() async { + listLen = listTodayList.length; + num = '(${widget.index + 1}/${listLen})'; + mapZpjl = listTodayList[widget.index]; + imageWztp = getWztp(); //得到违章图片 + getPreBtn_NextBtn(); + try_setState(); + } + + double _radioImage = 9 / 16; + + // 使用 cached_network_image 插件实现网络图片缓存 + // 使用 flutter_drag_scale 实现可缩放可拖拽双击放大的图片功能。PhotoView插件不好用,有问题 + Widget getNetworkImage(String url) { + return CachedNetworkImage( + imageUrl: url, + alignment: Alignment.topCenter, + imageBuilder: (context, imageProvider) => DragScaleContainer( + doubleTapStillScale: true, child: Image(image: imageProvider) + // child: Image( + // image: NetworkImage( + // 'http://h.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=0d023672312ac65c67506e77cec29e27/9f2f070828381f30dea167bbad014c086e06f06c.jpg'), + // ), + ), + // imageBuilder: (context, imageProvider) => PhotoView( + // imageProvider: imageProvider, + // ), + //placeholder: (context, url) => CircularProgressIndicator(), + placeholder: (context, url) => + getMoreWidget(color: Colors.black38, size: 20.0, strokeWidth: 2.0), + errorWidget: (context, url, error) => Icon(Icons.error), + ); + } + + // 167 50 3.34 + Widget getLgmzs(int lgmzs, {double width = 127, double height = 127}) { + int _rgb = (255 * (5 - lgmzs)) ~/ 5; + return Stack( + children: [ + Container( + width: ScreenUtil().setWidth(width), + height: ScreenUtil().setHeight(height), + padding: EdgeInsets.only( + right: ScreenUtil().setWidth(6), left: ScreenUtil().setWidth(6), top: 0, bottom: 4), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Text('$lgmzs级${lgmzs * 20}%', style: TextStyle(fontSize: 10)), + //SizedBox(height: 0), + Container( + width: ScreenUtil().setWidth(66), + height: ScreenUtil().setHeight(66), + decoration: BoxDecoration( + border: Border.all(color: Colors.grey), + color: Color.fromRGBO(_rgb, _rgb, _rgb, 1.0), + borderRadius: new BorderRadius.circular(0), + ), + ) + ], + ), + ), + Positioned( + top: ScreenUtil().setHeight(4), + child: Container( + width: ScreenUtil().setWidth(width), + height: ScreenUtil().setHeight(height - 8), + padding: EdgeInsets.only( + right: ScreenUtil().setWidth(6), left: ScreenUtil().setWidth(6), top: 0, bottom: 0), + decoration: BoxDecoration( + border: Border.all( + color: + (lgmzs == mapZpjl['lgmzs']) ? Colors.red : Color.fromRGBO(244, 244, 244, 1), + width: 2), + //color: Colors.lightBlue, + borderRadius: new BorderRadius.circular(3.0), + ), + ), + ) + ], + ); + } + + //得到tsjj页面组件 + //1、得到格林曼黑度标准和视频播放按钮组件 + Widget getHdAndPlay() { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + getLgmzs(0), + getLgmzs(1), + getLgmzs(2), + getLgmzs(3), + getLgmzs(4), + getLgmzs(5, width: 153), + getIconBtnSizeX( + height: 104, + //getIconBtnSizeX 中已经使用ScreenUtil().setHeight(126),此处不能传 ScreenUtil().setHeight(126) ,否则严重错位 + width: 168, + text: "视频", + textSize: 12, + circular: 4, + color: Color.fromRGBO(52, 157, 237, 1), + onTop: () async { + if (Playing) { + //禁止同时启动两次播放器 + return; + } + + Playing = true; //禁止同时启动两次播放器 + urlnew = getMediaUrl(mapZpjl['video_url']); + + //获取视频地址失败 + if (!isVideoUrl(urlnew)) { + return; + } + + Navigator.of(_context).push(MaterialPageRoute( + builder: (context) => SuperPlayerPage( + loop: 0, //设置播放循环,默认播放器的循环次数是1, 即不循环播放。如果设置循环次数0,表示无限循环。 + url: urlnew, + title: + '${widget.text}视频${num}\n${mapZpjl[mapName['plate_id']]}(${getDwmc(mapZpjl['dwip'])})'))); + + // Navigator.of(_context).push(MaterialPageRoute( + // builder: (context) => PlayerProNew( + // loop: 0, //设置播放循环,默认播放器的循环次数是1, 即不循环播放。如果设置循环次数0,表示无限循环。 + // url: urlnew, + // title: + // '${widget.text}视频${num}\n${mapZpjl[mapName['plate_id']]}(${getDwmc(mapZpjl['dwip'])})'))); + }, + ), + SizedBox(width: ScreenUtil().setWidth(15)), + ], + ); + } + + Widget imageWztp; + + //2、得到违章图片组件 + Widget getWztp() { + //ratioList[index] = 0.5714285714285714 + return Stack( + children: [ + Container( + width: ScreenUtil().setWidth(1022), + //height: ScreenUtil().setHeight(639), + //height: ScreenUtil().setHeight(22 + 1022 * _radioImage), + height: ScreenUtil().setHeight(30 + 1022 * _radioImage), + decoration: BoxDecoration( + //color: Colors.white, + borderRadius: BorderRadius.all( + Radius.circular(12), + ), + ), + ), + Positioned( + //left: ScreenUtil().setWidth(_marginLeft), + top: ScreenUtil().setHeight(_marginLeft), + child: Container( + width: ScreenUtil().setWidth(1022), + height: ScreenUtil().setHeight(30 + 1022 * _radioImage), + child: getNetworkImage(getMediaUrl(mapZpjl['pic_url'])), + ), + ) + ], + ); + } + + // void printScreenInformation() { + // print('Device width dp:${1.sw}dp'); + // print('Device height dp:${1.sh}dp'); + // print('Device pixel density:${ScreenUtil().pixelRatio}'); + // print('Bottom safe zone distance dp:${ScreenUtil().bottomBarHeight}dp'); + // print('Status bar height dp:${ScreenUtil().statusBarHeight}dp'); + // print('The ratio of actual width to UI design:${ScreenUtil().scaleWidth}'); + // print( + // 'The ratio of actual height to UI design:${ScreenUtil().scaleHeight}'); + // print('System font scaling:${ScreenUtil().textScaleFactor}'); + // print('0.5 times the screen width:${0.5.sw}dp'); + // print('0.5 times the screen height:${0.5.sh}dp'); + // } + + void printScreenInformation() { + print('ScreenUtil().screenWidth = ${ScreenUtil().screenWidth}'); + print('设备宽度:${1.sw}dp'); + print('"1.w" = ${1.w}'); + print('"1.sw" = ${1.sw}'); + print('设备高度:${1.sh}dp'); + print('设备的像素密度:${ScreenUtil().pixelRatio}'); + print('底部安全区距离:${ScreenUtil().bottomBarHeight}dp'); + print('状态栏高度:${ScreenUtil().statusBarHeight}dp'); + print('实际宽度的dp与设计稿px的比例:${ScreenUtil().scaleWidth}'); + print('实际高度的dp与设计稿px的比例:${ScreenUtil().scaleHeight}'); + print('宽度和字体相对于设计稿放大的比例:${ScreenUtil().scaleWidth * ScreenUtil().pixelRatio}'); + print('高度相对于设计稿放大的比例:${ScreenUtil().scaleHeight * ScreenUtil().pixelRatio}'); + print('系统的字体缩放比例:${ScreenUtil().textScaleFactor}'); + print('屏幕宽度的0.5:${0.5.sw}dp'); + print('屏幕高度的0.5:${0.5.sh}dp'); + } + + //3、得到违章图片说明信息组件 + Widget getWztpSmxx() { + return Container( + width: ScreenUtil().setWidth(1022), + height: ScreenUtil().setHeight(390), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all( + Radius.circular(12), + ), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + //违章信息组件1:车牌号码、车牌颜色 + getWzxxPart1(), + //违章信息组件2:抓拍时间组件 + getWzxxText('抓拍时间:' + mapZpjl['zpsj']), + //违章信息组件3:车牌类型 + 黑度 + getWzxxPart3(), + //违章信息组件4:抓拍地点(简称) + getWzxxText('抓拍地点:' + getDwmc(mapZpjl['dwip']) + ' (简称)'), + //违章信息组件5:抓拍地点 + getWzxxText('抓拍地点:' + mapZpjl['dwms']), + ], + ), + ); + } + + // I/flutter (22989): ScreenUtil().screenWidth = 360.0 + // I/flutter (22989): 设备宽度:360.0dp + // I/flutter (22989): "1.w" = 0.3333333333333333 + // I/flutter (22989): "1.sw" = 360.0 + // I/flutter (22989): 设备高度:640.0dp + // I/flutter (22989): 设备的像素密度:3.0 + // I/flutter (22989): 底部安全区距离:0.0dp + // I/flutter (22989): 状态栏高度:24.0dp + // I/flutter (22989): 实际宽度的dp与设计稿px的比例:0.3333333333333333 + // I/flutter (22989): 实际高度的dp与设计稿px的比例:0.3333333333333333 + // I/flutter (22989): 宽度和字体相对于设计稿放大的比例:1.0 + // I/flutter (22989): 高度相对于设计稿放大的比例:1.0 + // I/flutter (22989): 系统的字体缩放比例:1.0 + // I/flutter (22989): 屏幕宽度的0.5:180.0dp + // I/flutter (22989): 屏幕高度的0.5:320.0dp + + //3、得到违章信息组件1:车牌号码、车牌颜色 + //车牌颜色Map cpysMap = { + // '蓝色': cpysItem( + // cpysText: '蓝色', + // cpysBackground: Colors.blue, + // cpysFont: Colors.white, + // cpysBorder: Colors.orange), + // } + Widget getWzxxPart1() { + //printScreenInformation(); + return Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox(width: ScreenUtil().setWidth(_marginLeft)), + getTitleText('车牌号码:'), + getBoderText(mapZpjl[mapName['plate_id']].toString(), + width: ScreenUtil().setWidth(1022 / 3.2)), + Expanded(child: SizedBox.shrink()), + getTitleText('颜色:'), + getBoderText(mapZpjl[mapName['plate_color']], width: ScreenUtil().setWidth(1022 / 4.8)), + SizedBox(width: ScreenUtil().setWidth(_marginLeft)), + ], + ); + } + + Widget getTitleRichText(String text1, {String text2 = '', double fontSize = 16}) { + return RichText( + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + text: TextSpan( + text: text1, + style: TextStyle(fontSize: fontSize, color: Colors.black), + children: [ + TextSpan( + text: text2, + style: TextStyle(fontSize: fontSize, color: Colors.blue, fontWeight: FontWeight.w500), + ), + ], + ), + ); + } + + Widget getTitleText(String text, {double fontSize = 16}) { + return Text(text, + style: TextStyle(fontSize: fontSize), + textAlign: TextAlign.left, + overflow: TextOverflow.ellipsis); + } + + Widget getTrailText(String text, {double fontSize = 16, double off = 0}) { + return Container( + width: _screenWidth - _widthLeft - off - (2 * ScreenUtil().setWidth(_marginLeft)), + child: Text(text, + style: TextStyle(fontSize: fontSize), + textAlign: TextAlign.left, + overflow: TextOverflow.ellipsis), + ); + } + + Widget getBoderText(String text, {double width = 40}) { + cpysItem _cpysItem = cpysMap[mapZpjl[mapName['plate_color']]]; + + return Container( + //color: _cpysItem.cpysBackground, + alignment: Alignment(0, -1), + width: width, + decoration: BoxDecoration( + border: Border.all(color: _cpysItem.cpysBorder, width: 2), + color: _cpysItem.cpysBackground, + borderRadius: BorderRadius.circular(3), + ), + child: Padding( + padding: EdgeInsets.only(bottom: 3), + child: Text(text, + style: TextStyle(fontSize: _fontSize, color: _cpysItem.cpysFont), + textAlign: TextAlign.left, + overflow: TextOverflow.ellipsis), + ), + ); + } + + //I/flutter (17555): mapZpjl = { + // id: 1222, plate_id: 川Q736X2, plate_color: 蓝色, zpsj: 1612857077, yjxx_id: 1399, workflow: 999, + // video_url: video/9_6063_20210209_155117_川Q736X2.mp4, + // pic_url: /wwwroot/admin/Api/wwwroot/public/uploads/9d2f45fd24b41f2b94abe42b30970d75.jpg, + // clfl: 集装箱卡车, dwip: 172.16.3.9, dwms: 宜长路出城方向, lgmzs: 3, jczxd: 994, sfhy: 黑烟车 + // } + + Widget getIcon(IconData _iconData) { + return Container( + width: _iconSize - 2, + height: _iconSize, + child: Padding( + padding: EdgeInsets.only(top: 2), + child: Icon(_iconData, size: _iconSize, color: _iconColor), + ), + ); + } + + Widget getWzxxText(String _text, {double fontSize = 16}) { + return Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox(width: ScreenUtil().setWidth(_marginLeft)), + Container( + alignment: Alignment(-1, 0), + width: ScreenUtil().setWidth(1022) - ScreenUtil().setWidth(_marginLeft), + child: Text(_text, + style: TextStyle(fontSize: fontSize), + textAlign: TextAlign.left, + overflow: TextOverflow.ellipsis), + ), + ], + ); + } + + Widget getWzxxPart3() { + return Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox(width: ScreenUtil().setWidth(_marginLeft)), + Container( + alignment: Alignment(-1, 0), + //width: ScreenUtil().setWidth(1022) - ScreenUtil().setWidth(_marginLeft), + child: getTitleText('车牌类型:' + mapZpjl['cplx']), + ), + Expanded(child: SizedBox.shrink()), + //getTitleText('黑度: ${mapZpjl['lgmzs']}'), + getTitleRichText('黑度:', text2: '${mapZpjl['lgmzs']} '), + SizedBox(width: ScreenUtil().setWidth(_marginLeft)), + ], + ); + } + + Widget getText(String text, {Color color}) { + return Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + alignment: Alignment(-1, 0), + width: ScreenUtil().setWidth(1022 - 2 * _marginLeft), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox(width: ScreenUtil().setWidth(_marginLeft)), + Text(text, + textAlign: TextAlign.left, + overflow: TextOverflow.ellipsis, + style: TextStyle(color: color)) + ], + ), + ), + ], + ); + } + + Widget getText2(String text1, String text2, String text3, {Color color}) { + return Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + alignment: Alignment(-1, 0), + width: ScreenUtil().setWidth(1022 - 2 * _marginLeft), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox(width: ScreenUtil().setWidth(_marginLeft)), + Text(text1, textAlign: TextAlign.left), + Text(text2, + textAlign: TextAlign.left, + overflow: TextOverflow.ellipsis, + style: TextStyle(color: color, fontWeight: FontWeight.w500)), + Text(text3, textAlign: TextAlign.left), + ], + ), + ), + ], + ); + } + + //5、得到黑烟初审'hycsInfo'、或者黑烟'hyfhInfo'複核信息组件 + //style: TextStyle(fontSize: _fontSize), + Widget getHyshInfo(String _hyshInfo) { + String _hyshLx = (_hyshInfo == 'hycsInfo' ? '初审' : '复审'); //黑烟审核类型 + String _hyshYh = (_hyshInfo == 'hycsInfo' ? 'cs_username' : 'fs_username'); //黑烟审核用户 + String _hyshSj = (_hyshInfo == 'hycsInfo' ? 'cs_time' : 'fs_time'); //黑烟审核时间 + String _hyshJg = (_hyshInfo == 'hycsInfo' ? 'cs_tile' : 'fs_tile'); //黑烟审核结果 + String _hyshYj = (_hyshInfo == 'hycsInfo' ? 'cs_shuoming' : 'fs_shuoming'); //黑烟审核意见 + + double _height = _hyshInfo == 'hyfhInfo' && widget.hyshlx == 'tsjj' ? 315 : 265; + return Column( + children: [ + Container( + width: ScreenUtil().setWidth(1022), + height: ScreenUtil().setHeight(_height), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all( + Radius.circular(12), + ), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + alignment: Alignment(-1, 0), + width: ScreenUtil().setWidth(1022 - 2 * _marginLeft), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox(width: ScreenUtil().setWidth(_marginLeft)), + Text('${_hyshLx}结果:' + mapZpjl[_hyshJg], + textAlign: TextAlign.left, overflow: TextOverflow.ellipsis), + SizedBox(width: ScreenUtil().setWidth(20)), + Container( + width: my_iconSize, + height: my_iconSize, + decoration: mapZpjl[_hyshJg] == '' + ? null + : BoxDecoration( + //color: Colors.white, + image: DecorationImage( + image: AssetImage(mapZpjl[_hyshJg] == "黑烟车" + ? "assets/images/hyc.png" + : "assets/images/fhyc.png"), + fit: BoxFit.contain), + ), + alignment: Alignment.center, + //child: + ), + ], + ), + ), + ], + ), + getText('${_hyshLx}意见:' + mapZpjl[_hyshYj]), + getText('${_hyshLx}用户:' + mapZpjl[_hyshYh]), + getText('${_hyshLx}时间:' + mapZpjl[_hyshSj]), + _hyshInfo == 'hyfhInfo' && widget.hyshlx == 'tsjj' + ? (getText2('推送状态:', widget.tsztText, ' (${getDate(mapZpjl['ts_time'])})', + color: + widget.tsztText.indexOf('成功') >= 0 ? Colors.blueAccent : Colors.black26)) + : SizedBox.shrink(), + ], + ), + ), + SizedBox(height: ScreenUtil().setHeight(_marginVer)), + ], + ); + } + + //9、得到推送交警状态信息组件7:推送状态 + // tszt 整型 推送状态:0-未推送 | 1-推送失败 | 3-推送成功 + //_mapTsjjGetTsStatus['tszt'] + Widget getWzxxPart7() { + return Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox(width: ScreenUtil().setWidth(_marginLeft)), + Container( + alignment: Alignment(-1, 0), + width: _screenWidth - ScreenUtil().setWidth(_marginLeft), + child: getTitleText('推送状态:' + mapTsztText[_mapTsjjGetTsStatus['tszt']]), + ), + ], + ); + } + + //10、得到推送交警确认组件 + Widget getTsjjQr() { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + getBtnSizeX( + text: "返回", + onPressedFun: () async { + Navigator.pop(context); + }, + width: 90.0), + preBtn, + nextBtn, + ], + ); + } + + //解决第一次进入报错问题。因为getPreBtn_NextBtn()还未执行,preBtn和nextBtn为空 + Widget preBtn = Container( + color: Colors.white12, //onPressedFun为null时无效 + width: 70.0, + height: 35.0, + child: RaisedButton( + padding: EdgeInsets.all(0), + textColor: Colors.black, + child: Text('上一条'), + onPressed: null, + ), + ); + + Widget nextBtn = Container( + color: Colors.white12, //onPressedFun为null时无效 + width: 70.0, + height: 35.0, + child: RaisedButton( + padding: EdgeInsets.all(0), + textColor: Colors.black, + child: Text('下一条'), + onPressed: null, + ), + ); + + getPreBtn_NextBtn() { + preBtn = getBtnSizeX( + text: "上一条", + onPressedFun: null, + ); + nextBtn = getBtnSizeX( + text: "下一条", + onPressedFun: null, + ); + + if (widget.index > 0 && listLen > 0) { + preBtn = getBtnSizeX( + text: "上一条", + onPressedFun: () async { + if (widget.index > 0) { + widget.index--; + getZpjlData(); + } + }, + ); + } + + if (widget.index < (listLen - 1) && listLen > 0) { + nextBtn = getBtnSizeX( + text: "下一条", + onPressedFun: () async { + if (widget.index < listLen - 1) { + widget.index++; + getZpjlData(); + } + }, + ); + } + } + + bool showMoreWidget = false; + + @override + Widget build(BuildContext context) { + return Scaffold( + //resizeToAvoidBottomPadding: false, + appBar: PreferredSize( + preferredSize: Size.fromHeight(ScreenUtil().setHeight(173)), // 设置appBar高度 + // 设置appBar高度 + child: AppBar( + automaticallyImplyLeading: false, + centerTitle: true, + titleSpacing: 0.0, + //设置title的左边距 + flexibleSpace: Container( + //SizedBox(height: ScreenUtil().statusBarHeight), //显示顶部状态栏 + // SizedBox(height: ScreenUtil().setHeight(10)), //显示顶部状态栏 + padding: EdgeInsets.only(top: ScreenUtil().statusBarHeight), //留出顶部状态栏高度 + child: Container( + //height: ScreenUtil().setHeight(173), + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + Color.fromRGBO(12, 186, 156, 1), + Color.fromRGBO(39, 127, 235, 1), + ], + ), + ), + // decoration: BoxDecoration( + // gradient: LinearGradient(colors: [ + // Color(0xFF0018EB), + // Color(0xFF01C1D9), + // ], begin: Alignment.bottomCenter, end: Alignment.topCenter), + // ), + ), + ), + title: Padding( + padding: EdgeInsets.only(left: 0, right: 0), + child: Row( + //mainAxisAlignment: MainAxisAlignment.start, + children: [ + getIconAndTextButton( + iconColor: Colors.white, + iconData: Icons.chevron_left_outlined, + onPress: showMoreWidget + ? null + : () { + Navigator.pop(context); + }, + ), + Expanded( + child: Text(widget.text + '记录' + num, + style: TextStyle(color: Colors.white, fontSize: 20), + textAlign: TextAlign.center, + overflow: TextOverflow.ellipsis), + ), + SizedBox(width: 30), + ], + ), + ), + ), + ), + body: null == imageWztp + // 显示加载中的圈圈 + ? getMoreWidget(color: Colors.black38, size: 20.0, strokeWidth: 2.0) + : Stack( + children: [ + //SizedBox.shrink() 创建父类允许最小尺寸的约束Box + showMoreWidget + ? Align( + alignment: Alignment(0, 0.8), + child: Container( + height: 200, + width: 200, + child: getMoreWidget2( + text: '加载中...', + color: Colors.red, + size: 40.0, + strokeWidth: 3.0), //显示加载中的圈圈, + ), + ) + : SizedBox.shrink(), + KeyboardAvoider( + autoScroll: true, + child: Container( + color: Color.fromRGBO(244, 244, 244, 1), + child: Column( + children: [ + //1、得到格林曼黑度标准和视频播放按钮组件 + getHdAndPlay(), + //2、得到违章图片组件 + imageWztp, + SizedBox(height: ScreenUtil().setHeight(_marginVer)), + //3、得到违章图片说明信息组件 + getWztpSmxx(), + SizedBox(height: ScreenUtil().setHeight(_marginVer)), + //7、得到黑烟初审信息组件 + widget.hyshlx == 'hycs' || + widget.hyshlx == 'hyfh' || + widget.hyshlx == 'tsjj' + ? getHyshInfo('hycsInfo') + : SizedBox.shrink(), + //8、得到黑烟复审信息组件 + widget.hyshlx == 'hyfh' || widget.hyshlx == 'tsjj' + ? getHyshInfo('hyfhInfo') + : SizedBox.shrink(), + SizedBox(height: widget.hyshlx == 'tsjj' ? 0 : 15), + //9、得到推送交警确认组件 + getTsjjQr(), + //SizedBox(height: 10), + ], + ), + ), + ), + widget.hyshlx == 'tsjj' + ? Positioned( + //alignment: Alignment(0.9, 0.35), + //alignment: Alignment(0.8, 0.45), + right: ScreenUtil().setWidth(50), + top: ScreenUtil().setHeight(1423), + child: Container( + //alignment: Alignment(0.5, -0.5), + width: _stampSize, + height: _stampSize, + //color: Colors.black12, + decoration: BoxDecoration( + //color: Colors.white, + image: DecorationImage( + //image: AssetImage("assets/images/jkzx_stamp.png"), fit: BoxFit.contain), + image: AssetImage(mapZpjl['fs_tile'] == '黑烟车' + ? "assets/images/hyc.png" + : "assets/images/fhyc.png"), + fit: BoxFit.contain), + ), + //child: + ), + ) + : SizedBox.shrink(), + ], + ), + ); + } + + Widget getBtnSizeX({@required text, width = 70.0, height = 35.0, onPressedFun}) { + return Container( + color: Colors.white12, //onPressedFun为null时无效 + width: width, + height: height, + child: RaisedButton( + padding: EdgeInsets.all(0), + textColor: Colors.black, + child: Text(text), + onPressed: onPressedFun, + ), + ); + } +}