|
|
|
|
@ -31,7 +31,8 @@ class _EKG_BLEState extends State<EKG_BLE> {
|
|
|
|
|
|
|
|
|
|
List<String> ekgFilesList = [];
|
|
|
|
|
|
|
|
|
|
EKGFileDetailResponseModel ekgFileDetailResponseModel;
|
|
|
|
|
List<EKGFileDetailResponseModel> ekgFileDetailResponseModelList = [];
|
|
|
|
|
|
|
|
|
|
EKGRealTimeDataResponseModel ekgRealTimeDataResponseModel;
|
|
|
|
|
|
|
|
|
|
List<int> ecgBytesAllDataList = [];
|
|
|
|
|
@ -86,7 +87,6 @@ class _EKG_BLEState extends State<EKG_BLE> {
|
|
|
|
|
plotAreaBorderWidth: 0,
|
|
|
|
|
primaryXAxis: NumericAxis(majorGridLines: const MajorGridLines(width: 0)),
|
|
|
|
|
primaryYAxis: NumericAxis(axisLine: const AxisLine(width: 0), majorTickLines: const MajorTickLines(size: 0)),
|
|
|
|
|
|
|
|
|
|
series: <LineSeries<_ChartData, int>>[
|
|
|
|
|
LineSeries<_ChartData, int>(
|
|
|
|
|
onRendererCreated: (ChartSeriesController controller) {
|
|
|
|
|
@ -181,75 +181,24 @@ class _EKG_BLEState extends State<EKG_BLE> {
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
mHeight(20.0),
|
|
|
|
|
_buildLiveLineChart()
|
|
|
|
|
// ValueListenableBuilder(
|
|
|
|
|
// valueListenable: ekgValueNotifier,
|
|
|
|
|
// builder: (context, value, _) {
|
|
|
|
|
// return Column(
|
|
|
|
|
// crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
// children: [
|
|
|
|
|
// Text(
|
|
|
|
|
// value,
|
|
|
|
|
// style: TextStyle(fontSize: 9.0),
|
|
|
|
|
// ),
|
|
|
|
|
// mHeight(24.0),
|
|
|
|
|
// getFilesListWidget(),
|
|
|
|
|
// mHeight(20.0),
|
|
|
|
|
// // SizedBox(
|
|
|
|
|
// // height: 150.0,
|
|
|
|
|
// // width: MediaQuery.of(context).size.width,
|
|
|
|
|
// // child: (ekgRealTimeDataResponseModel != null && ekgRealTimeDataResponseModel.wave != null)
|
|
|
|
|
// // ? LineChart(
|
|
|
|
|
// // LineChartData(
|
|
|
|
|
// // lineTouchData: LineTouchData(handleBuiltInTouches: false),
|
|
|
|
|
// // gridData: FlGridData(
|
|
|
|
|
// // show: true,
|
|
|
|
|
// // verticalInterval: 30,
|
|
|
|
|
// // horizontalInterval: 30,
|
|
|
|
|
// // getDrawingVerticalLine: (value) {
|
|
|
|
|
// // return FlLine(
|
|
|
|
|
// // color: Colors.red[300],
|
|
|
|
|
// // strokeWidth: 0.4,
|
|
|
|
|
// // );
|
|
|
|
|
// // },
|
|
|
|
|
// // getDrawingHorizontalLine: (value) {
|
|
|
|
|
// // return FlLine(
|
|
|
|
|
// // color: Colors.red[300],
|
|
|
|
|
// // strokeWidth: 0.4,
|
|
|
|
|
// // );
|
|
|
|
|
// // },
|
|
|
|
|
// // ),
|
|
|
|
|
// // titlesData: FlTitlesData(show: true),
|
|
|
|
|
// // borderData: FlBorderData(
|
|
|
|
|
// // show: false,
|
|
|
|
|
// // border: Border.all(color: const Color(0xff37434d), width: 1),
|
|
|
|
|
// // ),
|
|
|
|
|
// // minX: 0,
|
|
|
|
|
// // // maxX: (ekgRealTimeDataResponseModel.wave.ecgBytes.length.toDouble() - 1),
|
|
|
|
|
// // maxX: ecgBytesAllDataList.length.toDouble(),
|
|
|
|
|
// // minY: ekgRealTimeDataResponseModel.wave.ecgBytes.reduce((value, element) => value < element ? value : element).toDouble(),
|
|
|
|
|
// // maxY: ekgRealTimeDataResponseModel.wave.ecgBytes.reduce((value, element) => value > element ? value : element).toDouble(),
|
|
|
|
|
// // lineBarsData: [
|
|
|
|
|
// // LineChartBarData(
|
|
|
|
|
// // isCurved: false,
|
|
|
|
|
// // preventCurveOverShooting: true,
|
|
|
|
|
// // barWidth: 0.5,
|
|
|
|
|
// // dotData: FlDotData(show: false),
|
|
|
|
|
// // // spots: getDataList(ekgRealTimeDataResponseModel.wave.ecgBytes),
|
|
|
|
|
// // spots: getDataList(ekgRealTimeDataResponseModel.wave.ecgBytes),
|
|
|
|
|
// // colors: [Colors.grey[800]],
|
|
|
|
|
// // isStrokeCapRound: true,
|
|
|
|
|
// // belowBarData: BarAreaData(show: false),
|
|
|
|
|
// // ),
|
|
|
|
|
// // ],
|
|
|
|
|
// // ),
|
|
|
|
|
// // )
|
|
|
|
|
// // : Container(),
|
|
|
|
|
// // ),
|
|
|
|
|
// ],
|
|
|
|
|
// );
|
|
|
|
|
// },
|
|
|
|
|
// ),
|
|
|
|
|
// _buildLiveLineChart()
|
|
|
|
|
ValueListenableBuilder(
|
|
|
|
|
valueListenable: ekgValueNotifier,
|
|
|
|
|
builder: (context, value, _) {
|
|
|
|
|
return Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
Text(
|
|
|
|
|
value,
|
|
|
|
|
style: TextStyle(fontSize: 9.0),
|
|
|
|
|
),
|
|
|
|
|
mHeight(24.0),
|
|
|
|
|
getFilesListWidget(),
|
|
|
|
|
mHeight(20.0),
|
|
|
|
|
],
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
@ -287,23 +236,28 @@ class _EKG_BLEState extends State<EKG_BLE> {
|
|
|
|
|
itemBuilder: (context, index) {
|
|
|
|
|
return InkWell(
|
|
|
|
|
onTap: () {
|
|
|
|
|
getEKGFileDetails(ekgFilesList[index]);
|
|
|
|
|
showEKGFileDetails(ekgFileDetailResponseModelList[index]);
|
|
|
|
|
},
|
|
|
|
|
child: Text(ekgFilesList[index]));
|
|
|
|
|
child: Text(ekgFileDetailResponseModelList[index].fileName));
|
|
|
|
|
},
|
|
|
|
|
itemCount: ekgFilesList.length,
|
|
|
|
|
separatorBuilder: (context, index) => SizedBox(height: 14),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void getEKGFileDetails(String fileName) async {
|
|
|
|
|
print("received file name: $fileName");
|
|
|
|
|
await BleChannel.getEKGFileDetails(fileName);
|
|
|
|
|
void showEKGFileDetails(EKGFileDetailResponseModel ekgFileDetailResponseModel) async {
|
|
|
|
|
print("received file name: ${ekgFileDetailResponseModel.fileName}");
|
|
|
|
|
Navigator.push(context, FadePage(page: EKGChartView(ekgFileDetailResponseModel: ekgFileDetailResponseModel)));
|
|
|
|
|
// await BleChannel.getEKGFileDetails(fileName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void parseEKGFileDetailObject(dynamic returnData) {
|
|
|
|
|
ekgFileDetailResponseModel = EKGFileDetailResponseModel.fromJson(json.decode(returnData));
|
|
|
|
|
Navigator.push(context, FadePage(page: EKGChartView(ekgFileDetailResponseModel: ekgFileDetailResponseModel)));
|
|
|
|
|
returnData.forEach((v) {
|
|
|
|
|
ekgFileDetailResponseModelList.add(new EKGFileDetailResponseModel.fromJson(v));
|
|
|
|
|
});
|
|
|
|
|
print(ekgFileDetailResponseModelList.length);
|
|
|
|
|
// ekgFileDetailResponseModel = EKGFileDetailResponseModel.fromJson(json.decode(returnData));
|
|
|
|
|
// Navigator.push(context, FadePage(page: EKGChartView(ekgFileDetailResponseModel: ekgFileDetailResponseModel)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String parseEKGRealTimeDataObject(dynamic returnData) {
|
|
|
|
|
|