From ae4610ec4173cf56028163e5c3bf86fc6c413c1e Mon Sep 17 00:00:00 2001 From: Enzo Date: Mon, 20 Nov 2023 10:42:14 +0100 Subject: [PATCH] graph altitude --- lib/common_widget/graph/altitude_by_time.dart | 67 +++++++++++++++++++ lib/common_widget/info.dart | 8 +-- lib/modele/activity.dart | 20 ++++++ .../utile/home_view/data_home_view.dart | 8 +-- .../utile/home_view/home_view_util.dart | 17 ++--- lib/view/activity/web/web_list_activity.dart | 35 +++++----- lib/view/home/mobile/mobile_homeview.dart | 7 +- lib/view/home/web/web_homeview.dart | 7 +- 8 files changed, 126 insertions(+), 43 deletions(-) create mode 100644 lib/common_widget/graph/altitude_by_time.dart diff --git a/lib/common_widget/graph/altitude_by_time.dart b/lib/common_widget/graph/altitude_by_time.dart new file mode 100644 index 0000000..ff8c2b7 --- /dev/null +++ b/lib/common_widget/graph/altitude_by_time.dart @@ -0,0 +1,67 @@ +import 'package:fl_chart/fl_chart.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:smartfit_app_mobile/common/colo_extension.dart'; +import 'package:smartfit_app_mobile/modele/user.dart'; +import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart'; + +class GraphAltitudeByTime extends StatefulWidget { + final Size media; + final DataHomeView data; + + const GraphAltitudeByTime(this.media, this.data, {Key? key}) + : super(key: key); + + @override + State createState() => _GraphAltitudeByTime(); +} + +class _GraphAltitudeByTime extends State { + @override + Widget build(BuildContext context) { + final double maxY = + context.watch().listActivity[0].getMaxAltitude() + 2; + final double minY = + context.watch().listActivity[0].getMinAltitude() - 2; + + final lineBarsData = [ + LineChartBarData( + spots: widget.data.altitudeSeconde, + isCurved: false, + dotData: const FlDotData(show: false)) + ]; + + return Container( + padding: const EdgeInsets.only(left: 15), + height: widget.media.width * 0.5, + width: double.maxFinite, + child: LineChart(LineChartData( + lineBarsData: lineBarsData, + borderData: FlBorderData(show: false), + maxY: maxY, + minY: minY, + gridData: FlGridData( + drawVerticalLine: false, + drawHorizontalLine: true, + horizontalInterval: 1, + getDrawingHorizontalLine: (value) { + return FlLine( + color: TColor.gray.withOpacity(0.15), + strokeWidth: 2, + ); + }), + titlesData: FlTitlesData( + leftTitles: const AxisTitles(), + topTitles: const AxisTitles(), + bottomTitles: const AxisTitles(), + rightTitles: AxisTitles( + sideTitles: SideTitles( + reservedSize: 50, + showTitles: true, + getTitlesWidget: (value, meta) { + return Text("${value.toInt()} m"); + }, + )), + )))); + } +} diff --git a/lib/common_widget/info.dart b/lib/common_widget/info.dart index bf1b4f3..c82720b 100644 --- a/lib/common_widget/info.dart +++ b/lib/common_widget/info.dart @@ -41,12 +41,12 @@ class Stats extends StatelessWidget { Text.rich( TextSpan( text: value, - style: TextStyle( + style: const TextStyle( fontSize: 20, fontWeight: FontWeight.w900, ), children: [ - TextSpan(text: ' '), + const TextSpan(text: ' '), TextSpan( text: unit, style: TextStyle( @@ -56,10 +56,10 @@ class Stats extends StatelessWidget { ), ]), ), - SizedBox(height: 6), + const SizedBox(height: 6), Text( label, - style: TextStyle( + style: const TextStyle( fontSize: 10, fontWeight: FontWeight.w500, ), diff --git a/lib/modele/activity.dart b/lib/modele/activity.dart index 2b4ff76..569adde 100644 --- a/lib/modele/activity.dart +++ b/lib/modele/activity.dart @@ -133,6 +133,7 @@ class ActivityOfUser { return "null"; } + // ---------------------------------------- Altitude -------------------- // List getAltitudeWithTime() { List result = List.empty(growable: true); int firtTimeStamp = 0; @@ -150,6 +151,25 @@ class ActivityOfUser { return result; } + double getMaxAltitude() { + for (int i = 4; i < _contentActivity[_dataSession].length; i++) { + if (_contentActivity[_dataSession][i] == "max_altitude") { + return _contentActivity[_dataSession][i + 1]; + } + } + return 0.0; + } + + double getMinAltitude() { + for (int i = 4; i < _contentActivity[_dataSession].length; i++) { + if (_contentActivity[_dataSession][i] == "min_altitude") { + return _contentActivity[_dataSession][i + 1]; + } + } + return 0.0; + } + // -------------------------- FIN altitude ---------------------- // + List getSpeedWithTime() { List result = List.empty(growable: true); int firtTimeStamp = 0; diff --git a/lib/modele/utile/home_view/data_home_view.dart b/lib/modele/utile/home_view/data_home_view.dart index cdf14a6..962bc96 100644 --- a/lib/modele/utile/home_view/data_home_view.dart +++ b/lib/modele/utile/home_view/data_home_view.dart @@ -4,10 +4,8 @@ class DataHomeView { late List bpmSecondes; late List bpmSecondes2; late List vitesseSecondes; + late List altitudeSeconde; - DataHomeView( - this.bpmSecondes, - this.bpmSecondes2, - this.vitesseSecondes, - ); + DataHomeView(this.bpmSecondes, this.bpmSecondes2, this.vitesseSecondes, + this.altitudeSeconde); } diff --git a/lib/modele/utile/home_view/home_view_util.dart b/lib/modele/utile/home_view/home_view_util.dart index 44cbe8c..f6591d5 100644 --- a/lib/modele/utile/home_view/home_view_util.dart +++ b/lib/modele/utile/home_view/home_view_util.dart @@ -1,21 +1,22 @@ import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:smartfit_app_mobile/modele/activity.dart'; import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart'; class HomeViewUtil { DataHomeView initData(BuildContext context) { - List bpmSecondes = - Provider.of(context).listActivity[0].getHeartRateWithTime(); - List vitesseSecondes = - Provider.of(context).listActivity[0].getSpeedWithTime(); + ActivityOfUser activity = Provider.of(context).listActivity[0]; + + List bpmSecondes = activity.getHeartRateWithTime(); + List vitesseSecondes = activity.getSpeedWithTime(); + List altitudeSeconde = activity.getAltitudeWithTime(); List bpmSecondes2 = List.from(bpmSecondes); - return DataHomeView( - bpmSecondes, - normaliserDeuxiemeElement(bpmSecondes2), - normaliserDeuxiemeElement(vitesseSecondes)); + + return DataHomeView(bpmSecondes, normaliserDeuxiemeElement(bpmSecondes2), + normaliserDeuxiemeElement(vitesseSecondes), altitudeSeconde); } List normaliserDeuxiemeElement(List liste) { diff --git a/lib/view/activity/web/web_list_activity.dart b/lib/view/activity/web/web_list_activity.dart index f6d2530..c12dc8a 100644 --- a/lib/view/activity/web/web_list_activity.dart +++ b/lib/view/activity/web/web_list_activity.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; import 'package:flutter/material.dart'; -import 'dart:html' as html; // Importation des fonctionnalités HTML import 'package:crypto/crypto.dart'; import 'package:file_picker/file_picker.dart'; @@ -30,9 +29,11 @@ class _WebListActivityState extends State { //late File x = File(file.path); List parseFile(Uint8List bytes) { - String csvString = utf8.decode(bytes); // Convertit les bytes en chaîne UTF-8 - List lines = LineSplitter.split(csvString).toList(); // Sépare les lignes - + String csvString = + utf8.decode(bytes); // Convertit les bytes en chaîne UTF-8 + List lines = + LineSplitter.split(csvString).toList(); // Sépare les lignes + for (String line in lines) { print(line); // Affiche chaque ligne du fichier } @@ -40,20 +41,21 @@ class _WebListActivityState extends State { return lines; // Ou retournez les lignes du fichier } - void readFile(html.File file) async { + void readFile() async { + /* ManagerFile x = ManagerFile(); final reader = html.FileReader(); reader.readAsArrayBuffer(file); reader.onLoadEnd.listen((event) { if (reader.readyState == html.FileReader.DONE) { Uint8List bytes = reader.result as Uint8List; - List result = x.readFitFileWeb(bytes) ; + List result = x.readFitFileWeb(bytes); Provider.of(context, listen: false) - .addActivity(ActivityOfUser(file.name, result )); + .addActivity(ActivityOfUser(file.name, result)); } - }); + });*/ } - + List lastWorkoutArr = []; @override @@ -82,15 +84,18 @@ class _WebListActivityState extends State { ), TextButton( onPressed: () async { - html.FileUploadInputElement uploadInput = html.FileUploadInputElement(); + /* + html.FileUploadInputElement uploadInput = + html.FileUploadInputElement(); uploadInput.click(); uploadInput.onChange.listen((e) { final files = uploadInput.files; if (files != null && files.isNotEmpty) { - readFile(files[0]); // Lecture du fichier sélectionné + readFile( + files[0]); // Lecture du fichier sélectionné } - }); + });*/ }, child: Text( "Ajouter", @@ -159,7 +164,5 @@ class _WebListActivityState extends State { ), ), ); - } - - -} \ No newline at end of file + } +} diff --git a/lib/view/home/mobile/mobile_homeview.dart b/lib/view/home/mobile/mobile_homeview.dart index 235dc2f..46e0ed9 100644 --- a/lib/view/home/mobile/mobile_homeview.dart +++ b/lib/view/home/mobile/mobile_homeview.dart @@ -1,6 +1,7 @@ import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:smartfit_app_mobile/common_widget/container/ligne_container_stats.dart'; +import 'package:smartfit_app_mobile/common_widget/graph/altitude_by_time.dart'; import 'package:smartfit_app_mobile/common_widget/graph/bpm_and_speed_by_time.dart'; import 'package:smartfit_app_mobile/common_widget/graph/bpm_by_time.dart'; import 'package:smartfit_app_mobile/common_widget/other/entete_home_view.dart'; @@ -73,11 +74,7 @@ class _MobileHomeView extends State { height: media.width * 0.05, ), const LigneContainerStats("1", "2", "3", "s", "s", "s"), - Container( - padding: const EdgeInsets.only(left: 15), - height: media.width * 0.5, - width: double.maxFinite, - child: LineChart(LineChartData())) + GraphAltitudeByTime(media, data) ], ), ), diff --git a/lib/view/home/web/web_homeview.dart b/lib/view/home/web/web_homeview.dart index 7c04521..79e6008 100644 --- a/lib/view/home/web/web_homeview.dart +++ b/lib/view/home/web/web_homeview.dart @@ -1,6 +1,7 @@ import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:smartfit_app_mobile/common_widget/container/ligne_container_stats.dart'; +import 'package:smartfit_app_mobile/common_widget/graph/altitude_by_time.dart'; import 'package:smartfit_app_mobile/common_widget/graph/bpm_and_speed_by_time.dart'; import 'package:smartfit_app_mobile/common_widget/graph/bpm_by_time.dart'; import 'package:smartfit_app_mobile/common_widget/other/entete_home_view.dart'; @@ -82,11 +83,7 @@ class _WebHomeView extends State { SizedBox( height: media.width * 0.05, ), - Container( - padding: const EdgeInsets.only(left: 15), - height: media.width * 0.5, - width: double.maxFinite, - child: LineChart(LineChartData())) + GraphAltitudeByTime(media, data) ], ), ),