You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

927 lines
34 KiB
Dart

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//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_ybqx511505_sanjiang_new_area_launche/components/customDialogF.dart';
import 'package:hyzp_ybqx511505_sanjiang_new_area_launche/services/EventBus.dart';
import 'package:hyzp_ybqx511505_sanjiang_new_area_launche/widget/my_superplayer.dart';
import 'package:keyboard_avoider/keyboard_avoider.dart';
//
import '../../../components/commonFun.dart';
//import 'package:hyzp_ybqx511505_sanjiang_new_area_launche/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<TsjjContentNew> 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<HycsDataAuditSfyc>().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.indexzpsj抓拍时间
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
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: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
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: <Widget>[
getBtnSizeX(text: '已超时', onPressedFun: null, width: 90.0), //'复审提交'
qxButton, //'取消'
],
)
: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
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: <Widget>[
//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,
),
);
}
}