hyzp_ybqx-Commit059:已经实现“车流量日统计(含早晚高峰)”功能
This commit is contained in:
@@ -1 +1 @@
|
||||
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":20211231,"versionName":"1.4.5","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
|
||||
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":20211231,"versionName":"1.4.6","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
|
||||
+3
-2
@@ -7,6 +7,7 @@ import 'package:flutter/services.dart';
|
||||
import 'package:flutter_bmfbase/BaiduMap/bmfmap_base.dart' show BMFMapSDK, BMF_COORD_TYPE;
|
||||
import 'package:flutter_screenutil/screenutil_init.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/Login/LoginTabs2.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/MyMsics/05_updated/MyUpdatedNew.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/Works/TJXX/tj_data.dart';
|
||||
import 'package:package_info/package_info.dart';
|
||||
// 引入provider
|
||||
@@ -89,8 +90,8 @@ class _MyAppState extends State<MyApp> {
|
||||
// Navigator.of(context).push(MaterialPageRoute(
|
||||
// builder: (context) => MyUpdated(ver: version, date: buildDate, theContext: context)));
|
||||
|
||||
// MyUpdatedNew m = await MyUpdatedNew(
|
||||
// ver: version, date: buildDate, theContext: context, bStartUpdated: true);
|
||||
MyUpdatedNew m = await MyUpdatedNew(
|
||||
ver: version, date: buildDate, theContext: context, bStartUpdated: true);
|
||||
});
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:hyzp_ybqx511528_xingwen/components/commonFun.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/components/dioFun.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/components/hyxx_data_handle.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/Works/TJXX/zptj_bar_echarts_trinity_new_getdata.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/services/EventBus.dart';
|
||||
|
||||
///获取车流量日统计数据
|
||||
@@ -495,6 +496,10 @@ Future startGetStatisDataNew() async {
|
||||
listAllStatisData = value;
|
||||
eventBus.fire(StatisDataUpdate('统计数据已更新'));
|
||||
});
|
||||
|
||||
///车流量日统计数据类
|
||||
cllRStatisDataGeting = true; //正在获取车流量日统计数据,禁止重入
|
||||
trinityData = ZptjBarEchartsTrinityNewGetData(); //提取获取车流量日统计数据
|
||||
});
|
||||
} else {
|
||||
if (mapStatisInfo['今日抓拍'] < 0) {
|
||||
@@ -512,6 +517,10 @@ Future startGetStatisDataNew() async {
|
||||
//发送统计数据已更新广播
|
||||
eventBus.fire(StatisDataUpdate('统计数据已更新'));
|
||||
}
|
||||
|
||||
///车流量日统计数据类
|
||||
cllRStatisDataGeting = true; //正在获取车流量日统计数据,禁止重入
|
||||
trinityData = ZptjBarEchartsTrinityNewGetData(); //提取获取车流量日统计数据
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
//import 'package:flustars/flustars.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/components/commonFun.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/components/hyxx_data_handle.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/Works/TJXX/tj_data.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/Works/TJXX/zptj_bar_echarts_trinity_new_getdata.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/widget/table_scrollable/table_scrollable.dart';
|
||||
|
||||
import '../../../services/EventBus.dart';
|
||||
|
||||
class ZptjBarEchartsTrinityNew extends StatefulWidget {
|
||||
ZptjBarEchartsTrinityNew({this.statisType, Key key}) : super(key: key);
|
||||
String statisType; //统计类型
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() => ZptjBarEchartsTrinityNewState();
|
||||
}
|
||||
|
||||
class ZptjBarEchartsTrinityNewState extends State<ZptjBarEchartsTrinityNew> {
|
||||
//try_setState(); //避免异常报错
|
||||
try_setState() {
|
||||
try {
|
||||
setState(() {});
|
||||
} catch (e) {
|
||||
print('setState(() {})异常:${e}');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
print('cllRStatisDataOk = ${cllRStatisDataOk}');
|
||||
|
||||
///获取点位信息数据
|
||||
if (!cllRStatisDataOk) {
|
||||
///车流量日统计数据类
|
||||
trinityData = ZptjBarEchartsTrinityNewGetData(); //提取获取车流量日统计数据
|
||||
} else {
|
||||
updateEchartsAndTable(); //刷新页面数据
|
||||
}
|
||||
|
||||
//监听 选择LED点位 更新事件
|
||||
eventBus.on<SelectLedDwUpdateEvent>().listen((event) async {
|
||||
print(event.str);
|
||||
|
||||
//获取用户选择项对应的id号
|
||||
int id = trinityData.listItems.indexOf(event.selectedValue);
|
||||
print('SelectLedDwUpdateEvent: id = ${id}, nDwbh = ${trinityData.nDwbh}');
|
||||
if (id != trinityData.nDwbh) {
|
||||
trinityData.nDwbh = id;
|
||||
updateEchartsAndTable(bFirst: false); //刷新页面数据
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Future updateEchartsAndTable({bool bFirst = true}) {
|
||||
trinityData.replaceEchartsOptionData(bFirst: bFirst).then((value) {
|
||||
cllRStatisDataOk = true;
|
||||
try_setState();
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: PreferredSize(
|
||||
preferredSize: Size.fromHeight(ScreenUtil().setHeight(173)), // 设置appBar高度
|
||||
child: AppBar(
|
||||
automaticallyImplyLeading: false,
|
||||
centerTitle: true,
|
||||
titleSpacing: 0.0,
|
||||
flexibleSpace: Container(
|
||||
padding: EdgeInsets.only(top: ScreenUtil().statusBarHeight), //留出顶部状态栏高度
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.centerLeft,
|
||||
end: Alignment.centerRight,
|
||||
colors: [
|
||||
Color.fromRGBO(12, 186, 156, 1),
|
||||
Color.fromRGBO(39, 127, 235, 1),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
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: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
Expanded(
|
||||
child: RichText(
|
||||
textAlign: TextAlign.center,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
text: TextSpan(children: [
|
||||
TextSpan(
|
||||
text: mapStatisType[widget.statisType]['text'],
|
||||
style: TextStyle(color: Colors.white, fontSize: 20),
|
||||
),
|
||||
TextSpan(
|
||||
text: '\n' + mapStatisType[widget.statisType]['textTerm'],
|
||||
style: TextStyle(fontSize: 14.0)),
|
||||
]),
|
||||
)),
|
||||
SizedBox(width: 50),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
body: (listCllrtjStatis.isEmpty ||
|
||||
trinityData.strEchartsOptionNew.isEmpty ||
|
||||
trinityData.mapAllDw.length < 31)
|
||||
? getMoreWidget(
|
||||
color: Colors.black38,
|
||||
text: '正在下载大量数据,\n请耐心等待...',
|
||||
size: 25,
|
||||
textAlign: TextAlign.center)
|
||||
: Column(
|
||||
children: [
|
||||
SizedBox(height: ScreenUtil().setHeight(20)),
|
||||
//2、得到统计图表组件
|
||||
trinityData.getBarEcharts(trinityData.strEchartsOptionNew),
|
||||
//SizedBox(height: ScreenUtil().setHeight(0)),
|
||||
//3、得到数据表组件
|
||||
TableScrollable(mapTableData: trinityData.mapAllDw),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,640 @@
|
||||
import 'package:fl_chart/fl_chart.dart';
|
||||
//import 'package:flustars/flustars.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_echarts/flutter_echarts.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/components/commonFun.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/components/dioFun.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/components/doJSON.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/components/hyxx_data_handle.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/Works/TJXX/tj_data.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/widget/DropdownItem.dart';
|
||||
|
||||
import '../../../services/EventBus.dart';
|
||||
|
||||
class ZptjBarEchartsTrinityNewGetData {
|
||||
static const Color red = const Color(0xffff5182);
|
||||
static const Color blue = const Color(0xff0000ff);
|
||||
|
||||
static const Color firstBarColor = const Color(0xffff5182);
|
||||
static const Color secondBarColor = const Color.fromRGBO(0, 150, 150, 1);
|
||||
static const Color thirdBarColor = const Color(0xff00000f);
|
||||
|
||||
// static const Color firstBarColor = const Color.fromRGBO(200, 55, 55, 1);
|
||||
// static const Color secondBarColor = const Color.fromRGBO(100, 170, 170, 1);
|
||||
// static const Color thirdBarColor = const Color.fromRGBO(45, 45, 45, 1);
|
||||
|
||||
static const Color bottomBarColor = const Color(0xff939393);
|
||||
static const Color gridColor = const Color(0xffe7e8ec);
|
||||
static const double width = 7;
|
||||
static const double widthTrinity = 1;
|
||||
|
||||
String _textBottom1;
|
||||
String _textBottom2;
|
||||
String _textTop1;
|
||||
String _textTop2;
|
||||
int _rate = 10; // today 字段放大倍率
|
||||
int _rateCoord = 10000; // 坐标压缩倍率
|
||||
int _interval = 20; // 坐标间隔
|
||||
int _maxY = -1;
|
||||
|
||||
List<BarChartGroupData> _listBarData = [];
|
||||
|
||||
int nDwbh = 0; // 点位编号,0代表所有点位,其他数字对应其他点位编号
|
||||
|
||||
ZptjBarEchartsTrinityNewGetData() {
|
||||
cllRStatisDataGeting = true;
|
||||
print('cllRStatisDataOk = ${cllRStatisDataOk}');
|
||||
|
||||
///获取点位信息数据
|
||||
if (!cllRStatisDataOk) {
|
||||
//listCllrtjStatis 中的数据未准备好
|
||||
listCllrtjStatis.clear(); //最后需要显示的数据
|
||||
// 获得前 31 天的日期起点和终点:['2021-03-18', '2021-04-17']
|
||||
List _listDateDuration = getLast31DateString();
|
||||
mapStatisType['cllrtj']['startDate'] = _listDateDuration[0];
|
||||
mapStatisType['cllrtj']['endDate'] = _listDateDuration[1];
|
||||
}
|
||||
|
||||
if (listCllrtjStatis.isEmpty) {
|
||||
if (listDwinfoGetList2.isEmpty) {
|
||||
//若没有读取点位数据,便需要先读取
|
||||
getThePageList(theHyshlx: 'dwxx').then((value) {
|
||||
listDwinfoGetList2 = value;
|
||||
print('listDwinfoGetList2 = \n$listDwinfoGetList2');
|
||||
getCllrtjStatisNew('cllrtj').then((value) {
|
||||
//按 sortField 升序排序
|
||||
//listCllrtjStatis.sort((a, b) => (a['dwbh']).compareTo(b['dwbh']));
|
||||
getEchartsOptionData().then((value) {
|
||||
updateEchartsAndTable(); //刷新页面数据
|
||||
});
|
||||
});
|
||||
|
||||
// getCllrtjStatis('cllrtj').then((value) {
|
||||
// //按 sortField 升序排序
|
||||
// listCllrtjStatis.sort((a, b) => (a['dwbh']).compareTo(b['dwbh']));
|
||||
// getEchartsOptionData().then((value) {
|
||||
// updateEchartsAndTable(); //刷新页面数据
|
||||
// });
|
||||
// });
|
||||
});
|
||||
} else {
|
||||
//若已经读取了点位数据,便直接使用
|
||||
print('listDwinfoGetList2 = \n$listDwinfoGetList2');
|
||||
getCllrtjStatisNew('cllrtj').then((value) {
|
||||
//按 sortField 升序排序
|
||||
//listCllrtjStatis.sort((a, b) => (a['dwbh']).compareTo(b['dwbh']));
|
||||
getEchartsOptionData().then((value) {
|
||||
updateEchartsAndTable(); //刷新页面数据
|
||||
});
|
||||
});
|
||||
}
|
||||
} else {
|
||||
updateEchartsAndTable(); //刷新页面数据
|
||||
}
|
||||
|
||||
// //监听 选择LED点位 更新事件
|
||||
// eventBus.on<SelectLedDwUpdateEvent>().listen((event) async {
|
||||
// print(event.str);
|
||||
//
|
||||
// //获取用户选择项对应的id号
|
||||
// int id = listItems.indexOf(event.selectedValue);
|
||||
// print('SelectLedDwUpdateEvent: id = ${id}, nDwbh = ${nDwbh}');
|
||||
// if (id != nDwbh) {
|
||||
// nDwbh = id;
|
||||
// updateEchartsAndTable(bFirst: false); //刷新页面数据
|
||||
// }
|
||||
// });
|
||||
}
|
||||
|
||||
Future updateEchartsAndTable({bool bFirst = true}) {
|
||||
if (bFirst) {
|
||||
getListFlields(); //更新_listItems内容
|
||||
}
|
||||
replaceEchartsOptionData(bFirst: bFirst).then((value) {
|
||||
cllRStatisDataOk = true;
|
||||
cllRStatisDataGeting = false;
|
||||
eventBus.fire(SelectLedDwUpdateEvent('Dropdown选项已改变', nDwbh.toString()));
|
||||
//try_setState();
|
||||
});
|
||||
}
|
||||
|
||||
//LED点位名称List,除第一项外,后面都按ID号排列
|
||||
List listItems = [
|
||||
// '全部',
|
||||
// '1、江北振兴大道',
|
||||
// '2、宜飞路',
|
||||
// '3、宜宾南收费站',
|
||||
// '4、一曼路',
|
||||
// '5、柏溪收费站',
|
||||
// '6、七星路万达广场',
|
||||
// '7、宜宾财政局',
|
||||
// '8、宜威路南广镇',
|
||||
// '9、宜长路',
|
||||
// '10、宜南快速通道',
|
||||
// '11、观斗山隧道',
|
||||
// '12、大麦坝',
|
||||
// '13、外江路',
|
||||
];
|
||||
|
||||
//更新_listItems内容
|
||||
Future getListFlields() async {
|
||||
listItems = ['全部'];
|
||||
int len = listDwinfoGetList2.length;
|
||||
for (int i = 0; i < len; i++) {
|
||||
listItems.add('${i + 1}.' + listDwinfoGetList2[i]['dwmc']);
|
||||
}
|
||||
print('_listItems = $listItems');
|
||||
|
||||
//_title = '${widget.title}(${widget.id.toString()} / ${listDwinfoGetList2.length})';
|
||||
//try_setState();
|
||||
}
|
||||
|
||||
//1、得到选择LED点位组件
|
||||
Widget getSelectLedDw() {
|
||||
return Container(
|
||||
padding: EdgeInsets.only(top: ScreenUtil().setHeight(11)),
|
||||
alignment: Alignment.centerLeft,
|
||||
child: DropdownItem(
|
||||
listItems: listItems,
|
||||
//初始值 initValue 必须是 listItems 中的已有元素
|
||||
initValue: listItems[0],
|
||||
dropdownEvent: 'SelectLedDwUpdateEvent',
|
||||
width: ScreenUtil().setWidth(500),
|
||||
height: 35,
|
||||
), //SizedBox(width: _marginLeft),
|
||||
);
|
||||
}
|
||||
|
||||
String strDateNew = 'data: ['; // 全部 和 13 个点位都相同
|
||||
List listStrFlowNew = [];
|
||||
List listStrAmRushNew = [];
|
||||
List listStrPmRushNew = [];
|
||||
|
||||
// 所有点位 31 天的车流量日统计数据,每天有 3 个数据:车流量、早高峰、晚高峰
|
||||
Map mapAllDw = {}; // 有 31 个元素,每个元素又是一个 Map:包含车流量、早高峰、晚高峰
|
||||
|
||||
// 从 listCllrtjStatis 中获取的车流量日统计数据
|
||||
Future getEchartsOptionData() async {
|
||||
// 读取 13 个点位车流量日统计数据的循环
|
||||
int j = -1;
|
||||
for (Map mapDw in listCllrtjStatis) {
|
||||
List listCllmx = mapDw["cllmx"];
|
||||
String strFlowList2 = 'data: [';
|
||||
String strAmRushList2 = 'data: [';
|
||||
String strPmRushList2 = 'data: [';
|
||||
|
||||
// 读取每个点位 31 天的车流量日统计数据的循环。反序遍历
|
||||
int len = listCllmx.length;
|
||||
print('len = $len');
|
||||
j++;
|
||||
for (int i = len - 1; i > -1; i--) {
|
||||
Map mapDay = listCllmx[i];
|
||||
|
||||
if (0 == j) {
|
||||
// 第一次处理点位数据时添加 listAllDw 的元素
|
||||
mapAllDw[mapDay["day"]] = {
|
||||
"all": 0,
|
||||
"am": 0,
|
||||
"pm": 0
|
||||
}; //有 31 个元素,每个元素又是一个 Map:包含车流量、早高峰、晚高峰
|
||||
}
|
||||
|
||||
//print(mapDay);
|
||||
//print('mapDay = ${mapDay}, len = ${mapDay.length}');
|
||||
//mapDay = {day: 2021-05-19, am_order: 0730:0930, pm_order: 1730:1930, all: null, am: null, pm: null}, len = 6
|
||||
//mapDay = {day: 2021-05-09, am_order: 0730:0930, pm_order: 1730:1930, all: null, am: null, pm: null}, len = 6
|
||||
//print('mapDay["all"] = ${mapDay["all"]}, len = ${mapDay["all"].length}');
|
||||
//Unhandled Exception: NoSuchMethodError: The getter 'length' was called on null.
|
||||
|
||||
if (0 == j) {
|
||||
// 第一次处理点位数据时添加
|
||||
strDateNew += getStrMonthDay(mapDay["day"]); // 获取日字符串
|
||||
}
|
||||
|
||||
strFlowList2 += (null == mapDay["all"] ? '0' : mapDay["all"]) + ', '; // 获取车流量日统计数据字符串
|
||||
mapAllDw[mapDay["day"]]["all"] += null == mapDay["all"] ? 0 : int.parse(mapDay["all"]);
|
||||
|
||||
strAmRushList2 += (null == mapDay["am"] ? '0' : mapDay["am"]) + ', '; // 获取早高峰统计数据字符串
|
||||
mapAllDw[mapDay["day"]]["am"] += null == mapDay["am"] ? 0 : int.parse(mapDay["am"]);
|
||||
|
||||
strPmRushList2 += (null == mapDay["pm"] ? '0' : mapDay["pm"]) + ', '; // 获取晚高峰统计数据字符串
|
||||
mapAllDw[mapDay["day"]]["pm"] += null == mapDay["pm"] ? 0 : int.parse(mapDay["pm"]);
|
||||
}
|
||||
strFlowList2 += ']'; // 加上尾巴
|
||||
strAmRushList2 += ']'; // 加上尾巴
|
||||
strPmRushList2 += ']'; // 加上尾巴
|
||||
|
||||
if (0 == j) {
|
||||
// 第一次处理点位数据时添加
|
||||
strDateNew += ']'; // 加上尾巴
|
||||
}
|
||||
|
||||
listStrFlowNew.add(strFlowList2);
|
||||
listStrAmRushNew.add(strAmRushList2);
|
||||
listStrPmRushNew.add(strPmRushList2);
|
||||
}
|
||||
|
||||
// 在 List 头部插入 AllDw 数据
|
||||
insertAlldwData(mapAllDw);
|
||||
|
||||
// my_segmentPrint(strDateList);
|
||||
// my_segmentPrint(strDateNew);
|
||||
//data: ['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th', '10th', '11th', '12th', '13th', '14th', '15th', '16th', '17th', '18th', '19th', '20th
|
||||
// ', '21st', '22nd', '23rd', '24th', '25th', '26th', '27th', '28th', '29th', '30th', '31st',]
|
||||
//data: ['3.18', '3.19', '3.20', '3.21', '3.22', '3.23', '3.24', '3.25', '3.26', '3.27', '3.28', '3.29', '3.30', '3.31', '4.01', '4.02', '4.03', '4.04', '4.0
|
||||
// 5', '4.06', '4.07', '4.08', '4.09', '4.10', '4.11', '4.12', '4.13', '4.14', '4.15', '4.16', '4.17', ]
|
||||
|
||||
// my_segmentPrint(strFlowList);
|
||||
// my_segmentPrint(listStrFlowNew[0]);
|
||||
//data: [320, 302, 301, 334, 390, 330, 320, 320, 302, 301, 334, 390, 330, 320, 320, 302, 301, 334, 390, 330, 320, 320, 302, 301, 334, 390, 330, 320, 320, 302
|
||||
// , 301,]
|
||||
//data: [194893, 211019, 242299, 209904, 100941, 261849, 117473, 94218, 130115, 206901, 203021, 176968, 83047, 168084, 178937, 197859, 224155, 190689, 201393
|
||||
// , 184673, 198215, 200415, 192958, 203951, 198704, 174829, 200787, 205696, 169762, 196270, 193892, ]
|
||||
|
||||
// my_segmentPrint(strAmRushList);
|
||||
// my_segmentPrint(listStrAmRushNew[0]);
|
||||
//data: [120, 132, 101, 134, 90, 230, 210, 120, 132, 101, 134, 90, 230, 210, 120, 132, 101, 134, 90, 230, 210, 120, 132, 101, 134, 90, 230, 210, 120, 132, 10
|
||||
// 1,]
|
||||
//data: [5055, 31048, 23814, 23344, 38457, 36880, 32959, 7875, 6916, 27568, 26921, 20085, 17335, 16304, 22311, 21469, 21440, 15561, 18854, 25972, 25305, 2374
|
||||
// 3, 23024, 20813, 17755, 21151, 26523, 25628, 17657, 21632, 16196, ]
|
||||
|
||||
// my_segmentPrint(strPmRushList);
|
||||
// my_segmentPrint(listStrPmRushNew[0]);
|
||||
//data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290, 330, 310, 220, 182
|
||||
// , 191,]
|
||||
//data: [44288, 36414, 32965, 18464, 4156, 30809, 9437, 6974, 24531, 28787, 21435, 24525, 0, 24785, 29147, 26628, 24129, 21751, 30712, 25291, 33308, 32587, 3
|
||||
// 1470, 29432, 25386, 25123, 27701, 29828, 30249, 33947, 19888, ]
|
||||
}
|
||||
|
||||
// 用获取的车流量日统计数据,替换 strEchartsOption 中要需要替换的字符串
|
||||
Future replaceEchartsOptionData({bool bFirst = true}) async {
|
||||
print('replaceEchartsOptionData bFirst = $bFirst');
|
||||
print('replaceEchartsOptionData nDwbh = $nDwbh');
|
||||
//1、strEchartsOption 中要需要替换的字符串
|
||||
String strDateList =
|
||||
'''data: ['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th', '10th', '11th', '12th', '13th', '14th', '15th', '16th', '17th', '18th', '19th', '20th', '21st', '22nd', '23rd', '24th', '25th', '26th', '27th', '28th', '29th', '30th', '31st',]''';
|
||||
String strFlowList =
|
||||
'''data: [320, 302, 301, 334, 390, 330, 320, 320, 302, 301, 334, 390, 330, 320, 320, 302, 301, 334, 390, 330, 320, 320, 302, 301, 334, 390, 330, 320, 320, 302, 301,]''';
|
||||
String strAmRushList =
|
||||
'''data: [120, 132, 101, 134, 90, 230, 210, 120, 132, 101, 134, 90, 230, 210, 120, 132, 101, 134, 90, 230, 210, 120, 132, 101, 134, 90, 230, 210, 120, 132, 101,]''';
|
||||
String strPmRushList =
|
||||
'''data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290, 330, 310, 220, 182, 191,]''';
|
||||
|
||||
strEchartsOptionNew = strEchartsOption;
|
||||
//print('strEchartsOptionNew.indexOf(strDateList) = ${strEchartsOptionNew.indexOf(strDateList)}');
|
||||
//I/flutter (23047): strEchartsOptionNew.indexOf(strDateList) = 1667
|
||||
strEchartsOptionNew = strEchartsOptionNew.replaceAll(strDateList, strDateNew);
|
||||
strEchartsOptionNew = strEchartsOptionNew.replaceAll(strFlowList, listStrFlowNew[nDwbh]);
|
||||
strEchartsOptionNew = strEchartsOptionNew.replaceAll(strAmRushList, listStrAmRushNew[nDwbh]);
|
||||
strEchartsOptionNew = strEchartsOptionNew.replaceAll(strPmRushList, listStrPmRushNew[nDwbh]);
|
||||
|
||||
// 第一次处理点位数据时添加 listAllDw 的元素
|
||||
// mapAllDw[mapDay["day"]] = {
|
||||
// "all": 0,
|
||||
// "am": 0,
|
||||
// "pm": 0
|
||||
// }; //有 31 个元素,每个元素又是一个 Map:包含车流量、早高峰、晚高峰
|
||||
if (!bFirst) {
|
||||
List _listStrFlow = listStrFlowNew[nDwbh]
|
||||
.substring(listStrFlowNew[nDwbh].indexOf('[') + 1, listStrFlowNew[nDwbh].lastIndexOf(']'))
|
||||
.split(',');
|
||||
List _listStrAmRush = listStrAmRushNew[nDwbh]
|
||||
.substring(
|
||||
listStrAmRushNew[nDwbh].indexOf('[') + 1, listStrAmRushNew[nDwbh].lastIndexOf(']'))
|
||||
.split(',');
|
||||
List _listStrPmRush = listStrPmRushNew[nDwbh]
|
||||
.substring(
|
||||
listStrPmRushNew[nDwbh].indexOf('[') + 1, listStrPmRushNew[nDwbh].lastIndexOf(']'))
|
||||
.split(',');
|
||||
|
||||
List listKeys = mapAllDw.keys.toList();
|
||||
int len = listKeys.length;
|
||||
for (int i = 0; i < len; i++) {
|
||||
mapAllDw[listKeys[i]]["all"] = int.parse(_listStrFlow[i].trim());
|
||||
mapAllDw[listKeys[i]]["am"] = int.parse(_listStrAmRush[i].trim());
|
||||
mapAllDw[listKeys[i]]["pm"] = int.parse(_listStrPmRush[i].trim());
|
||||
}
|
||||
// Map 遍历时修改 value 值
|
||||
//mapAllDw.forEach((var key, var value) {});
|
||||
}
|
||||
}
|
||||
|
||||
// 在 List 头部插入 AllDw 数据
|
||||
insertAlldwData(Map mapAllDw) {
|
||||
// 所有点位 31 天的车流量日统计数据,每天有 3 个数据:车流量、早高峰、晚高峰
|
||||
//Map mapAllDw = {}; // 有 31 个元素,每个元素又是一个 Map:包含车流量、早高峰、晚高峰
|
||||
|
||||
String strFlow = 'data: [';
|
||||
String strAmRush = 'data: [';
|
||||
String strPmRush = 'data: [';
|
||||
List list = mapAllDw.values.toList();
|
||||
for (Map m in list) {
|
||||
strFlow += (m["all"].toString() + ', ');
|
||||
strAmRush += (m["am"].toString() + ', ');
|
||||
strPmRush += (m["pm"].toString() + ', ');
|
||||
}
|
||||
strFlow += ']';
|
||||
strAmRush += ']';
|
||||
strPmRush += ']';
|
||||
|
||||
listStrFlowNew.insert(0, strFlow);
|
||||
listStrAmRushNew.insert(0, strAmRush);
|
||||
listStrPmRushNew.insert(0, strPmRush);
|
||||
}
|
||||
|
||||
// 从日期字符串 _strDate 得到月.日字符串
|
||||
String getStrMonthDay(String _strDate) {
|
||||
String _monthDay = '\'' + getStrMonth(_strDate) + getStrDay(_strDate) + '\',';
|
||||
_monthDay = _monthDay.replaceAll(' ', '');
|
||||
return _monthDay + ' ';
|
||||
}
|
||||
|
||||
// 从日期字符串 _strDate 得到日字符串 _strDay
|
||||
String getStrDay(String _strDate) {
|
||||
String _day = _strDate.substring(_strDate.lastIndexOf('-') + 1);
|
||||
return _day;
|
||||
}
|
||||
|
||||
// 从日期字符串 _strDate 得到月字符串 _strMonth
|
||||
String getStrMonth(String _strDate) {
|
||||
String _month = _strDate.substring(_strDate.indexOf('-') + 1, _strDate.lastIndexOf('-'));
|
||||
_month = '0' == _month[0] ? _month[1] : _month; //去除前导0
|
||||
_month = _month + '.';
|
||||
return _month;
|
||||
}
|
||||
|
||||
String strEchartsOptionNew = '';
|
||||
String strEchartsOption = '''
|
||||
{
|
||||
height: 260,
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
// position: function (pt) {
|
||||
// return [pt[0], '10%'];
|
||||
// }
|
||||
position: function(point, params, dom, rect, size) {
|
||||
//其中point为当前鼠标的位置,size中有两个属性:viewSize和contentSize,分别为外层div和tooltip提示框的大小
|
||||
var x = point[0];
|
||||
var y = point[1];
|
||||
var viewWidth = size.viewSize[0];
|
||||
var viewHeight = size.viewSize[1];
|
||||
var boxWidth = size.contentSize[0];
|
||||
var boxHeight = size.contentSize[1];
|
||||
var posX = 0; //x坐标位置
|
||||
var posY = 0; //y坐标位置
|
||||
|
||||
if (x < boxWidth) { //左边放不下
|
||||
posX = 5;
|
||||
} else { //左边放的下
|
||||
posX = x - boxWidth;
|
||||
}
|
||||
|
||||
if (y < boxHeight) { //上边放不下
|
||||
posY = 5;
|
||||
} else { //上边放得下
|
||||
posY = y - boxHeight;
|
||||
}
|
||||
|
||||
return [posX, posY];
|
||||
},
|
||||
},
|
||||
toolbox: {
|
||||
//left: '13',//距左
|
||||
right: '12',//距右
|
||||
top: '7',//距上
|
||||
itemSize: '18',
|
||||
feature: {
|
||||
// dataZoom: {
|
||||
// yAxisIndex: 'none'
|
||||
// },
|
||||
restore: {},
|
||||
// saveAsImage: {},
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
top: '49',//距上
|
||||
left: '70',//距左
|
||||
//orient: 'vertical',
|
||||
//data: ['Flow', 'amRush', 'pmRush']
|
||||
data: ['车流量', '早高峰', '晚高峰']
|
||||
},
|
||||
grid: {
|
||||
height: 230,
|
||||
left: '0%',
|
||||
right: '4%',
|
||||
bottom: '18%',
|
||||
containLabel: true
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
axisLabel: {
|
||||
show:true,
|
||||
// textStyle: {
|
||||
// color: "rgba(255,255,255,.6)",
|
||||
// fontSize: '12',
|
||||
// },
|
||||
formatter: function(value, index) {
|
||||
// var value;
|
||||
// if (value >= 100) {
|
||||
// value = value / 10000;
|
||||
// } else if (value < 100) {
|
||||
// value = value;
|
||||
// }
|
||||
value = value / 10000;
|
||||
var dispValue;
|
||||
if (value < 10) {
|
||||
dispValue = value.toFixed(1);
|
||||
} else {
|
||||
dispValue = value.toFixed(0);
|
||||
}
|
||||
return dispValue
|
||||
},
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: ['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th', '10th', '11th', '12th', '13th', '14th', '15th', '16th', '17th', '18th', '19th', '20th', '21st', '22nd', '23rd', '24th', '25th', '26th', '27th', '28th', '29th', '30th', '31st',]
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '车流量',
|
||||
type: 'bar',
|
||||
data: [320, 302, 301, 334, 390, 330, 320, 320, 302, 301, 334, 390, 330, 320, 320, 302, 301, 334, 390, 330, 320, 320, 302, 301, 334, 390, 330, 320, 320, 302, 301,]
|
||||
},
|
||||
{
|
||||
name: '早高峰',
|
||||
type: 'bar',
|
||||
data: [120, 132, 101, 134, 90, 230, 210, 120, 132, 101, 134, 90, 230, 210, 120, 132, 101, 134, 90, 230, 210, 120, 132, 101, 134, 90, 230, 210, 120, 132, 101,]
|
||||
},
|
||||
{
|
||||
name: '晚高峰',
|
||||
type: 'bar',
|
||||
data: [220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290, 330, 310, 220, 182, 191, 234, 290, 330, 310, 220, 182, 191,]
|
||||
},
|
||||
],
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'inside',
|
||||
start: 0,
|
||||
end: 100,
|
||||
},
|
||||
{
|
||||
//backgroundColor: 'rgba(255,255,255,1)',
|
||||
//fillerColor: 'rgba(240,240,240,0.25)',
|
||||
height: 48, //组件高度
|
||||
top: 318, //组件离容器上侧的距离,'top', 'middle', 'bottom','20%'
|
||||
bottom: 0, //组件离容器下侧的距离,'20%'
|
||||
//bottom: 30
|
||||
left: 22, //组件离容器左侧的距离,'left', 'center', 'right','20%'
|
||||
right: 17, //组件离容器右侧的距离,'20%'
|
||||
start: 0,
|
||||
end: 100,
|
||||
handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
|
||||
handleSize: '60%',
|
||||
handleStyle: {
|
||||
color: '#fff',
|
||||
shadowBlur: 3,
|
||||
shadowColor: 'rgba(0, 0, 0, 0.6)',
|
||||
shadowOffsetX: 2,
|
||||
shadowOffsetY: 2
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
''';
|
||||
|
||||
//2、得到统计图表组件
|
||||
Widget getBarEcharts(String _strEchartsOptionNew) {
|
||||
return Stack(
|
||||
children: [
|
||||
//1、显示 Echarts 图表
|
||||
Align(
|
||||
child: Container(
|
||||
width: 350,
|
||||
height: 379,
|
||||
alignment: Alignment(0, 0),
|
||||
child: Echarts(
|
||||
// extensions: [darkThemeScript],
|
||||
// theme: 'dark',
|
||||
captureAllGestures: true,
|
||||
extraScript: '''
|
||||
var base = +new Date(1968, 9, 3);
|
||||
var oneDay = 24 * 3600 * 1000;
|
||||
var date = []; // 该句不能删
|
||||
var data = [Math.random() * 300];
|
||||
for (var i = 1; i < 20000; i++) {
|
||||
var now = new Date(base += oneDay);
|
||||
date.push([now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/'));
|
||||
data.push(Math.round((Math.random() - 0.5) * 20 + data[i - 1]));
|
||||
}
|
||||
''',
|
||||
option: _strEchartsOptionNew,
|
||||
),
|
||||
),
|
||||
),
|
||||
//2、得到点位选择下拉按钮组件
|
||||
Positioned(
|
||||
top: ScreenUtil().setHeight(5),
|
||||
left: ScreenUtil().setHeight(85),
|
||||
child: listItems.isEmpty ? getMoreWidget2() : getSelectLedDw(),
|
||||
),
|
||||
//3、显示坐标单位
|
||||
Positioned(
|
||||
top: ScreenUtil().setHeight(155),
|
||||
left: ScreenUtil().setHeight(20),
|
||||
child: Text('万辆', style: TextStyle(fontSize: 12)),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// return Scaffold(
|
||||
// // appBar: AppBar(
|
||||
// // title: Text(mapStatisType['cllrtj']['text']),
|
||||
// // centerTitle: true,
|
||||
// // ),
|
||||
// appBar: PreferredSize(
|
||||
// preferredSize: Size.fromHeight(ScreenUtil().setHeight(173)), // 设置appBar高度
|
||||
// // 设置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: Padding(
|
||||
// padding: EdgeInsets.only(left: 0, right: 0),
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.start,
|
||||
// children: [
|
||||
// getIconAndTextButton(
|
||||
// iconColor: Colors.white,
|
||||
// iconData: Icons.chevron_left_outlined,
|
||||
// onPress: () {
|
||||
// Navigator.pop(context);
|
||||
// },
|
||||
// ),
|
||||
// Expanded(
|
||||
// child: RichText(
|
||||
// textAlign: TextAlign.center,
|
||||
// overflow: TextOverflow.ellipsis,
|
||||
// text: TextSpan(children: [
|
||||
// TextSpan(
|
||||
// text: mapStatisType['cllrtj']['text'],
|
||||
// style: TextStyle(color: Colors.white, fontSize: 20),
|
||||
// ),
|
||||
// TextSpan(
|
||||
// text: '\n' + mapStatisType['cllrtj']['textTerm'],
|
||||
// style: TextStyle(fontSize: 14.0)),
|
||||
// ]),
|
||||
// )),
|
||||
// SizedBox(width: 50),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// body: (listCllrtjStatis.isEmpty || strEchartsOptionNew.isEmpty || mapAllDw.length < 31)
|
||||
// ? getMoreWidget(
|
||||
// color: Colors.black38,
|
||||
// text: '正在下载大量数据,\n请耐心等待...',
|
||||
// size: 25,
|
||||
// textAlign: TextAlign.center)
|
||||
// : Column(
|
||||
// children: [
|
||||
// SizedBox(height: ScreenUtil().setHeight(20)),
|
||||
// //2、得到统计图表组件
|
||||
// getBarEcharts(strEchartsOptionNew),
|
||||
// //SizedBox(height: ScreenUtil().setHeight(0)),
|
||||
// //3、得到数据表组件
|
||||
// TableScrollable(mapTableData: mapAllDw),
|
||||
// ],
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
}
|
||||
@@ -16,6 +16,7 @@ import 'package:hyzp_ybqx511528_xingwen/pages/Works/TJXX/tj_data.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/Works/TJXX/today_list.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/Works/TJXX/zptj_bar_chart.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/Works/TJXX/zptj_bar_chart_one.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/Works/TJXX/zptj_bar_echarts_trinity_new.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/pages/Works/TJXX/zptj_page.dart';
|
||||
import 'package:hyzp_ybqx511528_xingwen/services/EventBus.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
@@ -850,12 +851,12 @@ class _Page1_WorksState extends State<Page1_Works>
|
||||
},
|
||||
icon: Icons.format_list_numbered_outlined),
|
||||
);
|
||||
// list.add(
|
||||
// _getPicAndTextButton("车流量日统计", "assets/images/车流量日统计.png", () {
|
||||
// Navigator.of(context).push(MaterialPageRoute(
|
||||
// builder: (context) => ZptjBarEchartsTrinityNew(statisType: 'cllrtj')));
|
||||
// }),
|
||||
// );
|
||||
list.add(
|
||||
_getPicAndTextButton("车流量日统计", "assets/images/车流量日统计.png", () {
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (context) => ZptjBarEchartsTrinityNew(statisType: 'cllrtj')));
|
||||
}),
|
||||
);
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -42,7 +42,8 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
# version: 1.3.13+20211026
|
||||
# version: 1.4.1+20211226
|
||||
# version: 1.4.2+20211227
|
||||
version: 1.4.4+20211230
|
||||
# version: 1.4.4+20211230
|
||||
version: 1.4.6+20211231
|
||||
|
||||
environment:
|
||||
sdk: ">=2.7.0 <3.0.0"
|
||||
|
||||
Reference in New Issue
Block a user