Description
- flutter version any
- syncfusion_flutter_charts : ^18.3.44
1. It's normal to run the app the first time
**2.when refresh the widget or perform hot reload , it will display errors(end to end),The data is obtained by network request **
code
`class EchartsWidget extends StatefulWidget{
@OverRide
State createState() {
return EchartsWidgetState();
}
}
class EchartsWidgetState extends State{
RefreshController _refreshController =
RefreshController(initialRefresh: false);
void _onRefresh() async {
// monitor network fetch
await Future.delayed(Duration(milliseconds: 1000));
if (mounted)
setState(() {
});
// if failed,use refreshFailed()
_refreshController.refreshCompleted();
}
List resultDataList = [];
List todayDataListOld = [];
List yesterdayDataListOld = [];
var unit;
List todayDataList = List();
List yesterdayDataList = List();
timestampToDateechart(timestamp) {
var date = DateTime.fromMillisecondsSinceEpoch(timestamp);
return date.toString().substring(0, 16);
}
getEchartData(List resultDataList) {
ResultData data1 = resultDataList[0];
ResultData data2 = resultDataList[1];
if (data1.name == "今日") {
todayDataListOld = data1.data;
yesterdayDataListOld = data2.data;
} else {
todayDataListOld = data2.data;
yesterdayDataListOld = data1.data;
}
for (int i = 0; i < todayDataListOld.length; i++) {
String timestamp = timestampToDateechart(todayDataListOld[i].date-(24 * 60 * 60 * 1000));
print("今日" + timestamp);
var time = DateTime.parse(timestamp);
var value = double.parse(todayDataListOld[i].value);
todayDataList.add(new EchartsData(time, value));
}
for (int i = 0; i < yesterdayDataListOld.length; i++) {
String timestamp = timestampToDateechart(yesterdayDataListOld[i].date);
var time = DateTime.parse(timestamp);
print("昨日" + timestamp);
var value = double.parse(yesterdayDataListOld[i].value) ;
yesterdayDataList.add(new EchartsData(time, value));
}
}
@OverRide
Widget build(BuildContext context) {
return SmartRefresher(
enablePullDown: true,
header: MaterialClassicHeader(),
controller: _refreshController,
onRefresh: _onRefresh,
child: Container(
child: FutureBuilder(
future: WholeFactoryService().getEchartsData(),
builder: (BuildContext context, AsyncSnapshot snapshot){
if(snapshot.connectionState == ConnectionState.done){
resultDataList = snapshot.data;
getEchartData(resultDataList);
return Container(
width: 300,
height: 300,
child: SfCartesianChart(
title: ChartTitle(
text: '发电负荷(MW)',
alignment: ChartAlignment.near
),
legend: Legend(
isVisible:true,
position: LegendPosition.auto,
),
backgroundColor: Color(0xff2775c7),
// Initialize category axis
primaryXAxis: DateTimeAxis(
//isVisible: true,
dateFormat: DateFormat.Hm(),
),
primaryYAxis: NumericAxis(
axisLine: AxisLine(width: 0),
),
series: <LineSeries<EchartsData, DateTime>>[
LineSeries<EchartsData, DateTime>(
color: Color(0xff05fcff),
// Bind data source
dataSource: todayDataList,
xValueMapper: (EchartsData data, _) => data.time,
yValueMapper: (EchartsData data, _) => data.value,
legendItemText: "今日",
),
LineSeries<EchartsData, DateTime>(
color: Color(0xfff5a92f),
// Bind data source
dataSource: yesterdayDataList,
xValueMapper: (EchartsData data, _) => data.time,
yValueMapper: (EchartsData data, _) => data.value,
legendItemText: "昨日",
isVisible: true,
),
]
),
);
}else{
return Container();
}
},
),
),
);
}
}
class EchartsData {
EchartsData(this.time, this.value);
DateTime time;
num value;
}`