//import '../../../widget/player_pro.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flustars/flustars.dart' as flustars; //该组件中有ScreenUtil import 'package:flutter/material.dart'; import 'package:flutter_drag_scale/flutter_drag_scale.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:hyzp_ybqx/components/customDialogF.dart'; import 'package:hyzp_ybqx/services/EventBus.dart'; import 'package:hyzp_ybqx/widget/my_superplayer.dart'; import 'package:keyboard_avoider/keyboard_avoider.dart'; // import '../../../components/commonFun.dart'; //import 'package:hyzp_ybqx/widget/player_pro_new.dart'; import '../../../components/dioFun.dart'; import '../../../components/doJSON.dart'; import '../../../components/hyxx_data_handle.dart'; class TsjjContentNew extends StatefulWidget { TsjjContentNew({ @required this.hyshlx, @required this.title, this.indexRecord, this.id, Key key, }) : super(key: key); String title; int indexRecord = 0; int id = -1; String hyshlx; _LoginPageState createState() => _LoginPageState(); } //用TabController实现顶部tab切换 class _LoginPageState extends State with SingleTickerProviderStateMixin { //try_setState(); //避免如下异常报错 try_setState() { try { setState(() {}); } catch (e) { print('setState(() {})异常:${e}'); } } dispose() { super.dispose(); } BuildContext _context; String _title = ''; //flutter_screenUtil 4.x 用法,ScreenUtil.screenWidth (sdk>=2.6 : 1.sw) //设备宽度 double _screenWidth = 1.sw; double _marginLeft = 8; double _marginCenter = 70; double _fontSize = 16; double _widthLeft = 40; // = _screenWidth / 3; double _iconSize = 18; double _stampSize = 100; double _listTileHeight = 30; double _marginVer = 10; Color _iconColor = Colors.blue; Map _mapTsjjGetTsStatus = {}; void initState() { //黑烟审核推送交警Checkbox改变事件 eventBus.on().listen((event) { print(event.str); try_setState(); //避免如下异常报错 }); _widthLeft = _screenWidth / 2; getListFlields(); _context = context; super.initState(); } Map _mapGetTsjjGetData = { "id": 1203, "plate_id": "川QS9661", "plate_color": "蓝色", "zpsj": 1612770967, "yjxx_id": "1379", "workflow": 2, "video_url": "video/9_6063_20210208_155607_川QS9661.mp4", "pic_url": "/wwwroot/admin/Api/wwwroot/public/uploads/926f5168f1fe109a9b8ec88dcac7ac2c.jpg", "clfl": "皮卡车", "dwip": "172.16.3.9", "dwms": "宜长路出城方向", "lgmzs": 3, "jczxd": "863", "sfhy": "黑烟车", }; double _radioImage = 9 / 16; Widget imageWztp; getListFlields() async { _mapGetTsjjGetData = await getWzxxItemData(widget.id); //获取指定id的违章信息返回 _mapGetTsjjGetData print('_mapGetTsjjGetData = ${_mapGetTsjjGetData}'); await getShenheData(widget.id); //获取指定id的审核信息存入 listGetShenheData await getMapGetShenheData(); //从listGetShenheData中取出数据分别存入mapGetHycsShenheData、mapGetHyfhShenheData //Tab切换时,设置 sfyc 和 tsjj,只处理当前选中的抓拍记录 _tabController.index,zpsj抓拍时间 set_sfyc_tsjj(_mapGetTsjjGetData['zpsj']); // 获取推送交警状态信息 // tsjjGetTsStatus返回字段 类型 说明 // id 整型 违章记录ID // checkid 整型 推送的抓拍记录ID // tszt 整型 推送状态:0-未推送 | 1-推送失败 | 3-推送成功 // 20210529更新: // tszt 整型 推送状态:0-未推送 | 1-推送失败 | 2-推送成功 | 3-规定时间内已有违章记录,本次不推送 | 4-现场登记,不推送 // ts_time 字符串 推送时间 //Future tsjjGetTsStatus(int _wzxxID) _mapTsjjGetTsStatus = await tsjjGetTsStatus(widget.id); print('_mapTsjjGetTsStatus = $_mapTsjjGetTsStatus'); // 获取网络图片尺寸 flustars.WidgetUtil.getImageWH(url: getMediaUrl(_mapGetTsjjGetData['pic_url'])).then((rect) { if (null != rect) { _radioImage = rect.height / rect.width; } }); imageWztp = getWztp(); //得到违章图片 //下面读取的是全局数据,该模块不需要修改 // 川Q565H4 try { //_title = '违章黑烟车详情(${(widget.indexRecord + 1).toString()} / ${listHycsGetList2.length})id:${listHycsGetList2[widget.indexRecord]['id']}'; //_title = '违章黑烟车(${(widget.indexRecord + 1).toString()} / ${listHycsGetList2.length}):${listHycsGetList2[widget.indexRecord]["plate_id"]}(${listHycsGetList2[widget.indexRecord]["plate_color"]})'; _title = '推送交警详情(${(widget.indexRecord + 1).toString()} / ${listHycsGetList2.length})'; setState(() {}); } catch (e) {} } // 使用 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 == _mapGetTsjjGetData['lgmzs']) ? Colors.red : Color.fromRGBO(244, 244, 244, 1), width: 2), //color: Colors.lightBlue, borderRadius: new BorderRadius.circular(3.0), ), ), ) ], ); } //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(_mapGetTsjjGetData['video_url']); //获取视频地址失败 if (!isVideoUrl(urlnew)) { return; } Navigator.of(_context).push(MaterialPageRoute( builder: (context) => SuperPlayerPage( loop: 0, //设置播放循环,默认播放器的循环次数是1, 即不循环播放。如果设置循环次数0,表示无限循环。 url: urlnew, title: '违章视频: ${_mapGetTsjjGetData["plate_id"]}\n${_mapGetTsjjGetData['dwms']}'))); // Navigator.of(_context).push(MaterialPageRoute( // builder: (context) => PlayerProNew( // loop: 0, //设置播放循环,默认播放器的循环次数是1, 即不循环播放。如果设置循环次数0,表示无限循环。 // url: urlnew, // title: // '违章视频: ${_mapGetTsjjGetData["plate_id"]}\n${_mapGetTsjjGetData['dwms']}'))); }, ), SizedBox(width: ScreenUtil().setWidth(15)), ], ); } //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(25), top: ScreenUtil().setHeight(25), child: Container( width: ScreenUtil().setWidth(1022), height: ScreenUtil().setHeight(30 + 1022 * _radioImage), child: getNetworkImage(getMediaUrl(_mapGetTsjjGetData['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(270), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all( Radius.circular(12), ), ), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ getWzxxPart1(), getWzxxPart2(), getWzxxPart3(), ], ), ); } // 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: _marginLeft), getTitleText('车牌号码:'), getBoderText(_mapGetTsjjGetData['plate_id'].toString(), width: ScreenUtil().setWidth(1022 / 3.2)), SizedBox(width: ScreenUtil().setWidth(_marginCenter)), getTitleText('颜色:'), getBoderText(_mapGetTsjjGetData['plate_color'], width: ScreenUtil().setWidth(1022 / 4.8)), ], ); } Widget getTitleText(String text, {double fontSize = 16, int lines = 1, Color color}) { return Text(text, style: TextStyle(fontSize: fontSize, color: color), textAlign: TextAlign.left, overflow: TextOverflow.ellipsis, maxLines: lines); } Widget getTrailText(String text, {double fontSize = 16, double off = 0}) { return Container( width: ScreenUtil().setWidth(1022) - _widthLeft - off - (2 * _marginLeft), child: Text(text, style: TextStyle(fontSize: fontSize), textAlign: TextAlign.left, overflow: TextOverflow.ellipsis), ); } Widget getBoderText(String text, {double width = 40}) { cpysItem _cpysItem = cpysMap[_mapGetTsjjGetData['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): _mapGetTsjjGetData = { // 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), ), ); } //4、得到违章信息组件2:抓拍时间组件 Widget getWzxxPart2() { return Row( mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox(width: _marginLeft), Container( alignment: Alignment(-1, 0), width: ScreenUtil().setWidth(1022) - _marginLeft, child: getTitleText( '抓拍时间:' + getDate( (_mapGetTsjjGetData['zpsj'] is int) ? _mapGetTsjjGetData['zpsj'] : int.parse(_mapGetTsjjGetData['zpsj']), ), ), ), ], ); } Widget getWzxxPart3() { return Row( mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox(width: _marginLeft), Container( alignment: Alignment(-1, 0), width: ScreenUtil().setWidth(1022) - _marginLeft, child: getTitleText('抓拍地点:' + _mapGetTsjjGetData['dwms']), ), ], ); } //4、得到审核信息组件 Widget getShxx() { return Container( width: ScreenUtil().setWidth(1022), height: ScreenUtil().setHeight(380), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all( Radius.circular(12), ), ), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ getWzxxPart4(), getWzxxPart5(), getWzxxPart6(), ], ), ); } //6、得到审核信息组件4:违章类型、格林曼黑度组件 Widget getWzxxPart4() { return Row( mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox(width: _marginLeft), Container( alignment: Alignment(-1, 0), width: _widthLeft, child: getTitleText('违章类型:' + _mapGetTsjjGetData['sfhy']), ), SizedBox(width: _marginLeft), //getIcon(Icons.location_on_outlined), Container( width: _iconSize, height: _iconSize, decoration: BoxDecoration( //color: Colors.white, image: DecorationImage(image: AssetImage("assets/images/hyc.png"), fit: BoxFit.contain), ), alignment: Alignment.center, //child: ), getTrailText(':' + _mapGetTsjjGetData['lgmzs'].toString(), off: _iconSize), ], ); } //从listGetShenheData中取出数据分别存入mapGetHycsShenheData、mapGetHyfhShenheData //7、得到审核信息组件5:初审人员,初审时间 Widget getWzxxPart5() { return Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox(width: _marginLeft), Container( alignment: Alignment(-1, 0), width: 300, child: getTitleText('初审人员:' + mapGetHycsShenheData['uname']), ), // SizedBox(width: _marginLeft), // getIcon(Icons.query_builder), // getTrailText(':' + mapGetHycsShenheData['addtime'], off: _iconSize), ], ), Row( mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox(width: _marginLeft), Container( alignment: Alignment(-1, 0), width: 300, child: getTitleText('初审时间:' + mapGetHycsShenheData['addtime']), ), ], ) ], ); } //8、得到审核信息组件6:复审人员,复审时间 Widget getWzxxPart6() { return Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox(width: _marginLeft), Container( alignment: Alignment(-1, 0), width: 300, child: getTitleText('复审人员:' + mapGetHyfhShenheData['uname']), ), // SizedBox(width: _marginLeft), // getIcon(Icons.query_builder), // getTrailText(':' + mapGetHycsShenheData['addtime'], off: _iconSize), ], ), Row( mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox(width: _marginLeft), Container( alignment: Alignment(-1, 0), width: 300, child: getTitleText('复审时间:' + mapGetHyfhShenheData['addtime']), ), ], ) ], ); } //5、得到推送交警状态组件 Widget getTsjjStatus() { return Container( width: ScreenUtil().setWidth(1022), height: ScreenUtil().setHeight(1 == _mapTsjjGetTsStatus['tszt'] || 2 == _mapTsjjGetTsStatus['tszt'] || 2 != _mapTsjjGetTsStatus['tszt'] && 1 == sfyc ? 170 : 90), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all( Radius.circular(12), ), ), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ getWzxxPart7(), ], ), ); } //7、得到推送交警状态信息组件7:推送状态 // 20210529更新: // tszt 整型 推送状态:0-未推送 | 1-推送失败 | 2-推送成功 | 3-规定时间内已有违章记录,本次不推送 | 4-现场登记,不推送 //_mapTsjjGetTsStatus['tszt'] Widget getWzxxPart7() { return Row( mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox(width: _marginLeft), Container( alignment: Alignment(-1, 0), width: ScreenUtil().setWidth(1022) - _marginLeft, child: Container( child: getTitleText( '推送状态:' + mapTsztText[_mapTsjjGetTsStatus['tszt']] + (1 == _mapTsjjGetTsStatus['tszt'] || 2 == _mapTsjjGetTsStatus['tszt'] ? '\n推送时间:${getDate((_mapTsjjGetTsStatus['ts_time'] is int) ? _mapTsjjGetTsStatus['ts_time'] : int.parse(_mapTsjjGetTsStatus['ts_time']))}' : '') + (0 == _mapTsjjGetTsStatus['tszt'] && 1 == sfyc ? ',但已超时。当前时间 > 抓拍时间 + 审核间隔,不能推送交警!' : ''), lines: 2, color: Colors.blue), ), ), ], ); } //10、得到推送交警确认组件 Widget getTsjjQr() { Widget qxButton = getBtnSizeX( text: "取消", onPressedFun: showMoreWidget ? null : () async { Navigator.pop(context); }, width: 90.0); // App.Car_Hyc.GetTs接口返回值说明中没有tszt为2,但许多记录返回值都是2,返回值为2是否是推送成功? // App.Car_Hyc.GetTs接口返回值说明有误,返回值为2表示推送成功、而不是3 // tszt 整型 推送状态:0-未推送 | 1-推送失败 | 3-推送成功 // 20210529更新: // tszt 整型 推送状态:0-未推送 | 1-推送失败 | 2-推送成功 | 3-规定时间内已有违章记录,本次不推送 | 4-现场登记,不推送 //_mapTsjjGetTsStatus['tszt'] return Container( //padding: EdgeInsets.only(top: ScreenUtil().setWidth(6)), width: ScreenUtil().setWidth(1022), height: ScreenUtil().setHeight(155), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all( Radius.circular(12), ), ), child: 2 == _mapTsjjGetTsStatus['tszt'] ? Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text('已推送', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), SizedBox(width: 2), Padding( padding: EdgeInsets.only(top: 3), child: Icon( Icons.check, size: 18, ), ), ], ), qxButton, //'取消' ], ) : 1 == sfyc ? Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ getBtnSizeX(text: '已超时', onPressedFun: null, width: 90.0), //'复审提交' qxButton, //'取消' ], ) : Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ getBtnSizeX( text: '推送', onPressedFun: showMoreWidget ? null : () async { print('等待推送交警确认'); await Navigator.of(context) .push( PageRouteBuilder( opaque: false, pageBuilder: (context, animation, secondaryAnimation) => CustomDialogF(title: '推送确认', content: '是否推送交警?'), ), ) .then((value) async { print('value = $value'); if (value) { print('用户已确认,开始处理推送交警!'); //return; print('before tsjjFun(widget.id)'); showMoreWidget = true; try_setState(); String _plateAndID = _mapGetTsjjGetData['plate_id'].toString() + '(ID:${widget.id.toString()})'; tsjjFun(widget.id, _plateAndID); showMoreWidget = false; try_setState(); Fluttertoast.showToast( msg: '$_plateAndID 已推送交警,请等待返回结果。', gravity: ToastGravity.CENTER); } else { print('用户取消了推送交警操作'); } }); //Unhandled Exception: type 'String' is not a subtype of type 'int' of 'result' Navigator.pop(context, -1); }, width: 90.0), //'复审提交' qxButton, //'取消' ], ), ); } bool showMoreWidget = false; @override Widget build(BuildContext context) { return Scaffold( //resizeToAvoidBottomPadding: false, appBar: PreferredSize( preferredSize: Size.fromHeight(ScreenUtil().setHeight(173)), // 设置appBar高度 child: AppBar( automaticallyImplyLeading: false, centerTitle: true, titleSpacing: 0.0, 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的左边距 title: Padding( padding: EdgeInsets.only(left: 0, right: 0), child: Row( //mainAxisAlignment: MainAxisAlignment.start, children: [ //1.1、返回按钮 getIconAndTextButton( iconColor: Colors.white, iconData: Icons.chevron_left_outlined, onPress: () { Navigator.pop(context); }, ), Expanded( child: Text(_title, 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、得到违章图片组件 //getWztp(), imageWztp, SizedBox(height: ScreenUtil().setHeight(_marginVer)), //3、得到违章图片说明信息组件 getWztpSmxx(), SizedBox(height: ScreenUtil().setHeight(_marginVer)), //4、得到审核信息组件 getShxx(), SizedBox(height: ScreenUtil().setHeight(_marginVer)), //5、得到推送交警状态组件 getTsjjStatus(), SizedBox(height: ScreenUtil().setHeight(_marginVer)), //9、得到推送交警确认组件 getTsjjQr(), SizedBox(height: 10), ], ), ), ), Positioned( //alignment: Alignment(0.9, 0.35), //alignment: Alignment(0.8, 0.48), left: ScreenUtil().setWidth(80), top: ScreenUtil().setHeight(1015), 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), ), //child: ), ), Positioned( //alignment: Alignment(0.9, 0.35), //alignment: Alignment(0.8, 0.48), right: ScreenUtil().setWidth(80), top: ScreenUtil().setHeight(1015), 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/hyc.png"), fit: BoxFit.contain), ), //child: ), ), ], ), ); } 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, ), ); } }