From 5188fd6d9541a31d56c2a0edc0f64bea5d81a519 Mon Sep 17 00:00:00 2001 From: otbenjello Date: Wed, 6 Dec 2023 10:31:30 +0100 Subject: [PATCH 1/6] graph axes correction mobile + map UI --- .../container/profile/profile_info_user.dart | 4 +- lib/common_widget/graph/altitude_by_time.dart | 6 +- lib/common_widget/graph/bpm_by_time.dart | 2 +- .../func_bpm_and_speed_by_time.dart | 10 +-- .../data_for_graph/func_bpm_by_time.dart | 10 +-- .../graph/mobile/mobile_altitude_by_time.dart | 21 +++--- .../mobile/mobile_bpm_and_speed_by_time.dart | 23 ++----- .../graph/mobile/mobile_bpm_by_time.dart | 20 +++--- .../graph/web/web_altitude_by_time.dart | 21 +++--- .../utile/home_view/home_view_util.dart | 2 +- lib/view/home/mobile/mobile_homeview.dart | 3 +- lib/view/map/chose_map.dart | 69 +++++++++++++++---- lib/view/map/mobile/mobile_my_map.dart | 2 +- lib/view/map/my_map_osm.dart | 2 +- 14 files changed, 116 insertions(+), 79 deletions(-) diff --git a/lib/common_widget/container/profile/profile_info_user.dart b/lib/common_widget/container/profile/profile_info_user.dart index b404b30..26ea71c 100644 --- a/lib/common_widget/container/profile/profile_info_user.dart +++ b/lib/common_widget/container/profile/profile_info_user.dart @@ -31,7 +31,7 @@ class ProfileInfoUser extends StatelessWidget { Expanded( child: TitleSubtitleCell( title: - "${context.watch().getTotalDenivelePositif().toString()} + m", + "${context.watch().getTotalDenivelePositif().toStringAsFixed(2)} + m", subtitle: "Total dénivelé positif", ), ), @@ -41,7 +41,7 @@ class ProfileInfoUser extends StatelessWidget { Expanded( child: TitleSubtitleCell( title: - "${context.watch().getTotalDeniveleNegatif().toString()} - m", + "${context.watch().getTotalDeniveleNegatif().toStringAsFixed(2)} - m", subtitle: "Total dénivelé négatif", ), ), diff --git a/lib/common_widget/graph/altitude_by_time.dart b/lib/common_widget/graph/altitude_by_time.dart index 076c86b..c8e8f76 100644 --- a/lib/common_widget/graph/altitude_by_time.dart +++ b/lib/common_widget/graph/altitude_by_time.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:responsive_builder/responsive_builder.dart'; +import 'package:smartfit_app_mobile/common_widget/graph/data_for_graph/func_bpm_by_time.dart'; import 'package:smartfit_app_mobile/common_widget/graph/mobile/mobile_altitude_by_time.dart'; import 'package:smartfit_app_mobile/common_widget/graph/web/web_altitude_by_time.dart'; import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart'; @@ -18,9 +19,10 @@ class GraphAltitudeByTime extends StatefulWidget { class _GraphAltitudeByTime extends State { @override Widget build(BuildContext context) { + final FuncBpmByTime funcBpm = FuncBpmByTime(widget.data); return ScreenTypeLayout.builder( - mobile: (_) => MobileGraphAltitudeByTime(widget.media, widget.data), - desktop: (_) => WebGraphAltitudeByTime(widget.media, widget.data), + mobile: (_) => MobileGraphAltitudeByTime(widget.media, widget.data, funcBpm), + desktop: (_) => WebGraphAltitudeByTime(widget.media, widget.data, funcBpm), ); } } diff --git a/lib/common_widget/graph/bpm_by_time.dart b/lib/common_widget/graph/bpm_by_time.dart index bf0a09f..e51f4ba 100644 --- a/lib/common_widget/graph/bpm_by_time.dart +++ b/lib/common_widget/graph/bpm_by_time.dart @@ -21,7 +21,7 @@ class _BpmByTime extends State { final FuncBpmByTime funcBpm = FuncBpmByTime(widget.data); return ScreenTypeLayout.builder( - mobile: (_) => MobileBpmByTime(widget.media, widget.data), + mobile: (_) => MobileBpmByTime(widget.media, widget.data, funcBpm), desktop: (_) => WebBpmByTime(widget.media, widget.data, funcBpm), ); } diff --git a/lib/common_widget/graph/data_for_graph/func_bpm_and_speed_by_time.dart b/lib/common_widget/graph/data_for_graph/func_bpm_and_speed_by_time.dart index 92fafdb..32388d6 100644 --- a/lib/common_widget/graph/data_for_graph/func_bpm_and_speed_by_time.dart +++ b/lib/common_widget/graph/data_for_graph/func_bpm_and_speed_by_time.dart @@ -14,14 +14,14 @@ class FuncBpmAndSpeedByTime { getTitlesWidget: rightTitleWidgets, showTitles: true, interval: 20, - reservedSize: 40, + reservedSize: 42, ); SideTitles get leftTitles => SideTitles( getTitlesWidget: leftTitleWidgets, showTitles: true, interval: 20, - reservedSize: 40, + reservedSize: 42, ); SideTitles get bottomTitles => SideTitles( getTitlesWidget: bottomTitleWidgets, @@ -79,7 +79,7 @@ class FuncBpmAndSpeedByTime { return Text(text, style: TextStyle( color: TColor.gray, - fontSize: 12, + fontSize: 8, ), textAlign: TextAlign.center); } @@ -113,7 +113,7 @@ class FuncBpmAndSpeedByTime { return Text(text, style: TextStyle( color: TColor.gray, - fontSize: 12, + fontSize: 8, ), textAlign: TextAlign.center); } @@ -148,7 +148,7 @@ class FuncBpmAndSpeedByTime { return Text(text, style: TextStyle( color: TColor.gray, - fontSize: 12, + fontSize: 8, ), textAlign: TextAlign.center); } diff --git a/lib/common_widget/graph/data_for_graph/func_bpm_by_time.dart b/lib/common_widget/graph/data_for_graph/func_bpm_by_time.dart index afbed1b..a8aea75 100644 --- a/lib/common_widget/graph/data_for_graph/func_bpm_by_time.dart +++ b/lib/common_widget/graph/data_for_graph/func_bpm_by_time.dart @@ -67,19 +67,19 @@ class FuncBpmByTime { text = '0 s'; break; case 20: - text = "${(interval).toStringAsFixed(2)} s"; + text = "${(interval).toStringAsFixed(0)} s"; break; case 40: - text = "${(interval * 2).toStringAsFixed(2)} s"; + text = "${(interval * 2).toStringAsFixed(0)} s"; break; case 60: - text = "${(interval * 3).toStringAsFixed(2)} s"; + text = "${(interval * 3).toStringAsFixed(0)} s"; break; case 80: - text = "${(interval * 4).toStringAsFixed(2)} s"; + text = "${(interval * 4).toStringAsFixed(0)} s"; break; case 100: - text = "${(interval * 5).toStringAsFixed(2)} s"; + text = "${(interval * 5).toStringAsFixed(0)} s"; break; default: return Container(); diff --git a/lib/common_widget/graph/mobile/mobile_altitude_by_time.dart b/lib/common_widget/graph/mobile/mobile_altitude_by_time.dart index e37bee9..1846fb1 100644 --- a/lib/common_widget/graph/mobile/mobile_altitude_by_time.dart +++ b/lib/common_widget/graph/mobile/mobile_altitude_by_time.dart @@ -2,14 +2,16 @@ 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/common_widget/graph/data_for_graph/func_bpm_by_time.dart'; import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart'; class MobileGraphAltitudeByTime extends StatefulWidget { final Size media; final DataHomeView data; + final FuncBpmByTime func; - const MobileGraphAltitudeByTime(this.media, this.data, {Key? key}) + const MobileGraphAltitudeByTime(this.media, this.data, this.func, {Key? key}) : super(key: key); @override @@ -70,20 +72,19 @@ class _MobileGraphAltitudeByTime extends State { leftTitles: const AxisTitles(), topTitles: const AxisTitles(), bottomTitles: AxisTitles( - sideTitles: SideTitles( - reservedSize: 20, - showTitles: true, - getTitlesWidget: (value, meta) { - return Text( - "${double.parse((value / 10).toStringAsFixed(2))}s"); - }, - )), + sideTitles: widget.func.bottomTitles, + ), rightTitles: AxisTitles( sideTitles: SideTitles( reservedSize: 60, showTitles: true, getTitlesWidget: (value, meta) { - return Text("${double.parse(value.toStringAsFixed(2))} m"); + return Text("${double.parse(value.toStringAsFixed(2))} m", + style: TextStyle( + color: TColor.gray, + fontSize: 12, + ), + textAlign: TextAlign.center); }, )), )))); diff --git a/lib/common_widget/graph/mobile/mobile_bpm_and_speed_by_time.dart b/lib/common_widget/graph/mobile/mobile_bpm_and_speed_by_time.dart index 3dc8afc..60516e5 100644 --- a/lib/common_widget/graph/mobile/mobile_bpm_and_speed_by_time.dart +++ b/lib/common_widget/graph/mobile/mobile_bpm_and_speed_by_time.dart @@ -111,27 +111,16 @@ class _MobileGraphBpmAndSpeedByTime titlesData: FlTitlesData( show: true, leftTitles: AxisTitles( - sideTitles: widget.func.rightTitles, + sideTitles: widget.func.leftTitles, ), topTitles: const AxisTitles(), bottomTitles: AxisTitles( - sideTitles: SideTitles( - reservedSize: 20, - showTitles: true, - getTitlesWidget: (value, meta) { - return Text( - "${double.parse((value / 10).toStringAsFixed(2))}s"); - }, - )), + sideTitles: widget.func.bottomTitles, + ), rightTitles: AxisTitles( - sideTitles: SideTitles( - reservedSize: 70, - showTitles: true, - getTitlesWidget: (value, meta) { - return Text( - "${double.parse(value.toStringAsFixed(2))} BPM"); - }, - ))), + sideTitles: widget.func.rightTitles, + + ),), gridData: FlGridData( drawVerticalLine: true, drawHorizontalLine: true, diff --git a/lib/common_widget/graph/mobile/mobile_bpm_by_time.dart b/lib/common_widget/graph/mobile/mobile_bpm_by_time.dart index 9190259..fe420bf 100644 --- a/lib/common_widget/graph/mobile/mobile_bpm_by_time.dart +++ b/lib/common_widget/graph/mobile/mobile_bpm_by_time.dart @@ -1,13 +1,15 @@ import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart'; +import 'package:smartfit_app_mobile/common_widget/graph/data_for_graph/func_bpm_by_time.dart'; import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart'; class MobileBpmByTime extends StatefulWidget { final Size media; final DataHomeView data; + final FuncBpmByTime func; - const MobileBpmByTime(this.media, this.data, {Key? key}) : super(key: key); + const MobileBpmByTime(this.media, this.data,this.func, {Key? key}) : super(key: key); @override State createState() => _MobileBpmByTime(); @@ -57,19 +59,19 @@ class _MobileBpmByTime extends State { leftTitles: const AxisTitles(), topTitles: const AxisTitles(), bottomTitles: AxisTitles( - sideTitles: SideTitles( - reservedSize: 20, - showTitles: true, - getTitlesWidget: (value, meta) { - return Text("${double.parse((value/10).toStringAsFixed(2))}s"); - }, - )), + sideTitles: widget.func.bottomTitles, + ), rightTitles: AxisTitles( sideTitles: SideTitles( reservedSize: 70, showTitles: true, getTitlesWidget: (value, meta) { - return Text("${double.parse(value.toStringAsFixed(2))} BPM"); + return Text("${double.parse(value.toStringAsFixed(2))} BPM", + style: TextStyle( + color: TColor.gray, + fontSize: 12, + ), + textAlign: TextAlign.center); }, )), )))); diff --git a/lib/common_widget/graph/web/web_altitude_by_time.dart b/lib/common_widget/graph/web/web_altitude_by_time.dart index 8868894..a9e108c 100644 --- a/lib/common_widget/graph/web/web_altitude_by_time.dart +++ b/lib/common_widget/graph/web/web_altitude_by_time.dart @@ -2,14 +2,16 @@ 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/common_widget/graph/data_for_graph/func_bpm_by_time.dart'; import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart'; class WebGraphAltitudeByTime extends StatefulWidget { final Size media; final DataHomeView data; + final FuncBpmByTime func; - const WebGraphAltitudeByTime(this.media, this.data, {Key? key}) + const WebGraphAltitudeByTime(this.media, this.data, this.func, {Key? key}) : super(key: key); @override @@ -69,20 +71,19 @@ class _WebGraphAltitudeByTime extends State { leftTitles: const AxisTitles(), topTitles: const AxisTitles(), bottomTitles: AxisTitles( - sideTitles: SideTitles( - reservedSize: 20, - showTitles: true, - getTitlesWidget: (value, meta) { - return Text( - "${double.parse((value / 10).toStringAsFixed(2))}s"); - }, - )), + sideTitles: widget.func.bottomTitles, + ), rightTitles: AxisTitles( sideTitles: SideTitles( reservedSize: 60, showTitles: true, getTitlesWidget: (value, meta) { - return Text("${double.parse(value.toStringAsFixed(2))} m"); + return Text("${double.parse(value.toStringAsFixed(2))} m", + style: TextStyle( + color: TColor.gray, + fontSize: 12, + ), + textAlign: TextAlign.center); }, )), )))); diff --git a/lib/modele/utile/home_view/home_view_util.dart b/lib/modele/utile/home_view/home_view_util.dart index 36bec08..4cc56ad 100644 --- a/lib/modele/utile/home_view/home_view_util.dart +++ b/lib/modele/utile/home_view/home_view_util.dart @@ -22,7 +22,7 @@ class HomeViewUtil { List bpmSecondes2 = List.from(bpmSecondes); return DataHomeView(normaliserPremierElement(bpmSecondes), normaliserPremierElement(normaliserDeuxiemeElement(bpmSecondes2)), - normaliserPremierElement(normaliserDeuxiemeElement(vitesseSecondes)), altitudeSeconde); + normaliserPremierElement(normaliserDeuxiemeElement(vitesseSecondes)), normaliserPremierElement(altitudeSeconde)); } List normaliserDeuxiemeElement(List liste) { diff --git a/lib/view/home/mobile/mobile_homeview.dart b/lib/view/home/mobile/mobile_homeview.dart index 852e7c7..b60e2a9 100644 --- a/lib/view/home/mobile/mobile_homeview.dart +++ b/lib/view/home/mobile/mobile_homeview.dart @@ -47,7 +47,8 @@ class _MobileHomeView extends State { // -- Speed -- // double maxSpeed = managerSelectedActivity.getMaxSpeed(); double avgSpeed = managerSelectedActivity.getAvgSpeed(); - + data.maxSpeed = maxSpeed; + data.time = context.watch().managerSelectedActivity.getTotalTime(); return Scaffold( backgroundColor: TColor.white, body: SingleChildScrollView( diff --git a/lib/view/map/chose_map.dart b/lib/view/map/chose_map.dart index 1ddd3bd..6788c11 100644 --- a/lib/view/map/chose_map.dart +++ b/lib/view/map/chose_map.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart'; +import 'package:smartfit_app_mobile/common_widget/button/round_button.dart'; import 'package:smartfit_app_mobile/view/map/mobile/mobile_my_map.dart'; import 'package:smartfit_app_mobile/view/map/my_map_osm.dart'; @@ -13,6 +15,58 @@ class ChoseMap extends StatefulWidget { class _ChoseMap extends State { @override Widget build(BuildContext context) { + var media = MediaQuery.of(context).size; + return Scaffold( + backgroundColor: TColor.white, + body: SafeArea( + child: Center( + // Utilisation du widget Center pour centrer verticalement + child: Container( + width: media.width, + padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 25), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisSize: MainAxisSize + .min, // Utilisation de MainAxisSize.min pour que la colonne prenne la hauteur minimale nécessaire + children: [ + SizedBox( + height: media.height * 0.1, + ), + SvgPicture.asset( + "assets/img/group.svg", + width: media.width * 0.75, + height: media.height * 0.4, + fit: BoxFit.fitWidth, + ), + SizedBox( + height: media.height * 0.1, + ), + RoundButton( + title: "Use map with google map", + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const MobileMyMaps())); + }, + ), + SizedBox( + height: media.height * 0.03, + ), + RoundButton( + title : "Use map with Open Street Map", + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) => const MyMapOSM())); + }, + ), + Spacer(), + ], + ), + ), + ), + ), + ); return Scaffold( backgroundColor: TColor.white, body: SafeArea( @@ -20,20 +74,7 @@ class _ChoseMap extends State { mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ - TextButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => const MobileMyMaps())); - }, - child: const Text("Use map with google map")), - TextButton( - onPressed: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => const MyMapOSM())); - }, - child: const Text("Use map with Open Street Map")), + const Text( "Mettre une image la en mode une personne avec des jumelles") ], diff --git a/lib/view/map/mobile/mobile_my_map.dart b/lib/view/map/mobile/mobile_my_map.dart index 4657afe..98171c3 100644 --- a/lib/view/map/mobile/mobile_my_map.dart +++ b/lib/view/map/mobile/mobile_my_map.dart @@ -25,7 +25,7 @@ class _MobileMyMaps extends State { return Scaffold( appBar: AppBar( title: const Text("Carte Google Map "), - backgroundColor: TColor.primaryColor1, + backgroundColor: TColor.secondaryColor1, ), body: _getMap()); } diff --git a/lib/view/map/my_map_osm.dart b/lib/view/map/my_map_osm.dart index 3d5a074..02cae4f 100644 --- a/lib/view/map/my_map_osm.dart +++ b/lib/view/map/my_map_osm.dart @@ -23,7 +23,7 @@ class _MyMapOSM extends State { return Scaffold( appBar: AppBar( title: const Text("Carte Open Street Map "), - backgroundColor: TColor.primaryColor1, + backgroundColor: TColor.secondaryColor1, ), body: FlutterMap( options: MapOptions(center: listPolynines.first), From 6ee3a9cb46999ca862e398eb317e265900c1fdca Mon Sep 17 00:00:00 2001 From: Enzo Date: Wed, 6 Dec 2023 11:08:10 +0100 Subject: [PATCH 2/6] =?UTF-8?q?specialisation=20de=20getData=20en=20foncti?= =?UTF-8?q?on=20de=20la=20cat=C3=A9gorie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../container/profile/profile_info_user.dart | 4 +- lib/modele/activity_info/activity_info.dart | 173 +++++++++++++++++- lib/modele/manager_file.dart | 15 +- lib/modele/user.dart | 4 +- pubspec.yaml | 1 + 5 files changed, 185 insertions(+), 12 deletions(-) diff --git a/lib/common_widget/container/profile/profile_info_user.dart b/lib/common_widget/container/profile/profile_info_user.dart index b404b30..3b1d1c1 100644 --- a/lib/common_widget/container/profile/profile_info_user.dart +++ b/lib/common_widget/container/profile/profile_info_user.dart @@ -31,7 +31,7 @@ class ProfileInfoUser extends StatelessWidget { Expanded( child: TitleSubtitleCell( title: - "${context.watch().getTotalDenivelePositif().toString()} + m", + "${context.watch().getTotalDenivelePositifAllActivity().toString()} + m", subtitle: "Total dénivelé positif", ), ), @@ -41,7 +41,7 @@ class ProfileInfoUser extends StatelessWidget { Expanded( child: TitleSubtitleCell( title: - "${context.watch().getTotalDeniveleNegatif().toString()} - m", + "${context.watch().getTotalDeniveleNegatifAllActivity().toString()} - m", subtitle: "Total dénivelé négatif", ), ), diff --git a/lib/modele/activity_info/activity_info.dart b/lib/modele/activity_info/activity_info.dart index 2617846..aed8424 100644 --- a/lib/modele/activity_info/activity_info.dart +++ b/lib/modele/activity_info/activity_info.dart @@ -16,6 +16,7 @@ class ActivityInfo { int bpmMax = 0; int bpmMin = 300; int bpmAvg = 0; + bool bpmNotZero = false; // ----------- Denivelé ------------ // double denivelePositif = 0.0; double deniveleNegatif = 0.0; @@ -23,19 +24,22 @@ class ActivityInfo { double altitudeMax = 0.0; double altitudeMin = 30000.0; double altitudeAvg = 0.0; + bool altitudeNotZero = false; // ----------- Température --------- // int temperatureMax = 0; int temperatureMin = 3000; int temperatureAvg = 0; + bool temperatureNotZero = false; // ----------- Vitesse ------------- // double vitesseMax = 0.0; double vitesseMin = 999999.0; double vitesseAvg = 0.0; + bool vitesseNotZero = false; // ---------------------------------------------------------------------- // // -- Fonction pour lire le csv et remplir la classe -- // - ActivityInfo getData(List> csv) { + ActivityInfo getDataWalking(List> csv) { // - Entete - // Map enteteCSV = getEntete(csv.first); // ------------- Var tmp ---------- // @@ -63,6 +67,7 @@ class ActivityInfo { int.parse(csv[i][enteteCSV["Value_${managerFile.fielBPM}"]!]); bpmSomme += value; bpmNb += 1; + bpmNotZero = true; if (value > bpmMax) { bpmMax = value; } @@ -91,6 +96,7 @@ class ActivityInfo { } altitudeSomme += value; alititudeNb += 1; + altitudeNotZero = true; } // ------------------------ Température ----------------------- // @@ -100,6 +106,7 @@ class ActivityInfo { csv[i][enteteCSV["Value_${managerFile.fieldTemperature}"]!]); temperatureSomme += value; temperatureNb += 1; + temperatureNotZero = true; if (value > temperatureMax) { temperatureMax = value; } @@ -114,6 +121,7 @@ class ActivityInfo { double.parse(csv[i][enteteCSV["Value_${managerFile.fieldSpeed}"]!]); vitesseSomme += value; vitesseNb += 1; + vitesseNotZero = true; if (value > vitesseMax) { vitesseMax = value; } @@ -124,13 +132,168 @@ class ActivityInfo { } // -- BPM -- // - bpmAvg = bpmSomme ~/ bpmNb; + if (bpmNotZero) { + bpmAvg = bpmSomme ~/ bpmNb; + } + // -- Atitude -- // + if (altitudeNotZero) { + altitudeAvg = altitudeSomme / alititudeNb; + } + // -- Température -- // + if (temperatureNotZero) { + temperatureAvg = temperatureSomme ~/ temperatureNb; + } + // -- Vitesse -- // + if (vitesseNotZero) { + vitesseAvg = vitesseSomme / vitesseNb; + } + return this; + } + + // -- Fonction pour lire le csv et remplir la classe -- // + ActivityInfo getDataCycling(List> csv) { + // - Entete - // + Map enteteCSV = getEntete(csv.first); + // ------------- Var tmp ---------- // + // -- BPM -- // + int bpmSomme = 0; + int bpmNb = 0; + // -- Denivelé -- // + double lastDenivele = 0.0; + // -- Altitude -- // + double altitudeSomme = 0; + int alititudeNb = 0; + // -- Température -- // + int temperatureSomme = 0; + int temperatureNb = 0; + // -- Vitesse -- // + double vitesseSomme = 0.0; + int vitesseNb = 0; + + // --- Boucle -- // + for (int i = 1; i < csv.length; i++) { + // + // ---------------------- BPM ---------------------- // + if (!isNull(enteteCSV["Value_${managerFile.fielBPM}"]!, csv[i])) { + int value = + int.parse(csv[i][enteteCSV["Value_${managerFile.fielBPM}"]!]); + bpmSomme += value; + bpmNb += 1; + bpmNotZero = true; + if (value > bpmMax) { + bpmMax = value; + } + if (value < bpmMin) { + bpmMin = value; + } + } + + /// ------------------ Denivele et Altitude --------------- // + if (!isNull(enteteCSV["Value_${managerFile.fieldAltitude}"]!, csv[i])) { + double value = double.parse( + csv[i][enteteCSV["Value_${managerFile.fieldAltitude}"]!]); + // -- Denivelé -- // + if (value > lastDenivele) { + denivelePositif += value - lastDenivele; + } else { + deniveleNegatif += (value - lastDenivele) * -1; + } + lastDenivele = value; + // -- Altitude -- // + if (value > altitudeMax) { + altitudeMax = value; + } + if (value < altitudeMin) { + altitudeMin = value; + } + altitudeSomme += value; + alititudeNb += 1; + altitudeNotZero = true; + } + + // ------------------------ Température ----------------------- // + if (!isNull( + enteteCSV["Value_${managerFile.fieldTemperature}"]!, csv[i])) { + int value = int.parse( + csv[i][enteteCSV["Value_${managerFile.fieldTemperature}"]!]); + temperatureSomme += value; + temperatureNb += 1; + vitesseNotZero = true; + if (value > temperatureMax) { + temperatureMax = value; + } + if (value < temperatureMin) { + temperatureMin = value; + } + } + + // ------------------------ Vitesse -----------------------------// + if (!isNull(enteteCSV["Value_${managerFile.fieldSpeed}"]!, csv[i])) { + double value = + double.parse(csv[i][enteteCSV["Value_${managerFile.fieldSpeed}"]!]); + vitesseSomme += value; + vitesseNb += 1; + vitesseNotZero = true; + if (value > vitesseMax) { + vitesseMax = value; + } + if (value < vitesseMin) { + vitesseMin = value; + } + } + } + + // -- BPM -- // + if (bpmNotZero) { + bpmAvg = bpmSomme ~/ bpmNb; + } // -- Atitude -- // - altitudeAvg = altitudeSomme / alititudeNb; + if (altitudeNotZero) { + altitudeAvg = altitudeSomme / alititudeNb; + } // -- Température -- // - temperatureAvg = temperatureSomme ~/ temperatureNb; + if (temperatureNotZero) { + temperatureAvg = temperatureSomme ~/ temperatureNb; + } // -- Vitesse -- // - vitesseAvg = vitesseSomme / vitesseNb; + if (vitesseNotZero) { + vitesseAvg = vitesseSomme / vitesseNb; + } + return this; + } + +// -- Fonction pour lire le csv et remplir la classe -- // + ActivityInfo getDataGeneric(List> csv) { + // - Entete - // + Map enteteCSV = getEntete(csv.first); + // ------------- Var tmp ---------- // + // -- BPM -- // + int bpmSomme = 0; + int bpmNb = 0; + bool bpmNotZero = false; + // --- Boucle -- // + for (int i = 1; i < csv.length; i++) { + // + // ---------------------- BPM ---------------------- // + if (!isNull(enteteCSV["Value_${managerFile.fielBPM}"]!, csv[i])) { + int value = + int.parse(csv[i][enteteCSV["Value_${managerFile.fielBPM}"]!]); + bpmSomme += value; + bpmNb += 1; + bpmNotZero = true; + if (value > bpmMax) { + bpmMax = value; + } + if (value < bpmMin) { + bpmMin = value; + } + } + } + + // -- BPM -- // + if (bpmNotZero) { + bpmAvg = bpmSomme ~/ bpmNb; + } return this; } diff --git a/lib/modele/manager_file.dart b/lib/modele/manager_file.dart index ede5e0f..a83e975 100644 --- a/lib/modele/manager_file.dart +++ b/lib/modele/manager_file.dart @@ -137,7 +137,6 @@ class ManagerFile { // ------ Remplir info avec la ligne session --------- // info.startTime = DateTime.fromMillisecondsSinceEpoch( int.parse(_getXfromListe(_startTime, ligneSession))); - info.timeOfActivity = double.parse(_getXfromListe(_timeActivity, ligneSession)); info.distance = double.parse(_getXfromListe(_totalDistance, ligneSession)); @@ -145,7 +144,17 @@ class ManagerFile { info.steps = int.parse(_getXfromListe(_totalStep, ligneSession)); // ----------------------------------------------------- // - return Tuple4(true, csvData, info.getData(csvData), categorie); + // -- Extraire les données en fonction de la catégorie -- // + switch (categorie) { + case (_marche): + info.getDataWalking(csvData); + case (_velo): + info.getDataCycling(csvData); + default: + info.getDataGeneric(csvData); + } + + return Tuple4(true, csvData, info, categorie); } List _getLigneSession(List listRecord) { @@ -164,7 +173,7 @@ class ManagerFile { return liste[i + 1].toString(); } } - return "null"; + return "0"; } List>> getDataOfListeOfRecord( diff --git a/lib/modele/user.dart b/lib/modele/user.dart index 5320f97..59a4b72 100644 --- a/lib/modele/user.dart +++ b/lib/modele/user.dart @@ -37,7 +37,7 @@ class User extends ChangeNotifier { // ------------ Walking -------------- // // ---- Denivelé ---- // - double getTotalDenivelePositif() { + double getTotalDenivelePositifAllActivity() { double totalDevPos = 0.0; for (ActivityOfUser activity in listActivity) { totalDevPos += activity.activityInfo.denivelePositif; @@ -45,7 +45,7 @@ class User extends ChangeNotifier { return totalDevPos; } - double getTotalDeniveleNegatif() { + double getTotalDeniveleNegatifAllActivity() { double totalDevNeg = 0.0; for (ActivityOfUser activity in listActivity) { totalDevNeg += activity.activityInfo.deniveleNegatif; diff --git a/pubspec.yaml b/pubspec.yaml index 7bafd6c..0b436fa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -58,6 +58,7 @@ dependencies: responsive_builder: ^0.7.0 flutter_map: ^5.0.0 latlong2: ^0.9.0 + units_converter: ^2.1.1 dev_dependencies: flutter_test: From 71269c8da800e6446fea493a98a0b9d0e85c2c71 Mon Sep 17 00:00:00 2001 From: otbenjello Date: Wed, 6 Dec 2023 11:29:14 +0100 Subject: [PATCH 3/6] correction mapIcon --- assets/img/mapIcon.svg | 19 +++++ assets/img/mapIcon_selected.svg | 81 +++++++++++++++++++ .../main_tab/mobile/mobile_main_tab_view.dart | 4 +- lib/view/main_tab/web/web_main_tab_view.dart | 4 +- 4 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 assets/img/mapIcon.svg create mode 100644 assets/img/mapIcon_selected.svg diff --git a/assets/img/mapIcon.svg b/assets/img/mapIcon.svg new file mode 100644 index 0000000..576fc90 --- /dev/null +++ b/assets/img/mapIcon.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/mapIcon_selected.svg b/assets/img/mapIcon_selected.svg new file mode 100644 index 0000000..6ab505c --- /dev/null +++ b/assets/img/mapIcon_selected.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/view/main_tab/mobile/mobile_main_tab_view.dart b/lib/view/main_tab/mobile/mobile_main_tab_view.dart index 7b0c1c5..5fbd638 100644 --- a/lib/view/main_tab/mobile/mobile_main_tab_view.dart +++ b/lib/view/main_tab/mobile/mobile_main_tab_view.dart @@ -92,8 +92,8 @@ class _MobileMainTabViewState extends State { width: 40, ), TabButton( - icon: "assets/img/Camera_tab.svg", - selectIcon: "assets/img/Camera_tab_select.svg", + icon: "assets/img/mapIcon.svg", + selectIcon: "assets/img/mapIcon_selected.svg", isActive: selectTab == 2, onTap: () { selectTab = 2; diff --git a/lib/view/main_tab/web/web_main_tab_view.dart b/lib/view/main_tab/web/web_main_tab_view.dart index 3a077d1..759558e 100644 --- a/lib/view/main_tab/web/web_main_tab_view.dart +++ b/lib/view/main_tab/web/web_main_tab_view.dart @@ -76,8 +76,8 @@ class _WebMainTabViewState extends State { ), ), sideBarButton( - icon: "assets/img/icon_map.svg", - selectIcon: "assets/img/icon_map.svg", + icon: "assets/img/mapIcon.svg", + selectIcon: "assets/img/mapIcon_selected.svg", index: 2, onTap: () => updateTab(2, const MyMap()), ), From 9e768c474c090ca8a78f2ee1549170b449f2c7db Mon Sep 17 00:00:00 2001 From: otbenjello Date: Wed, 6 Dec 2023 11:49:15 +0100 Subject: [PATCH 4/6] correction profile --- .../container/profile/profile_entete.dart | 12 +-------- .../profile_view_allplatforme.dart | 25 +------------------ 2 files changed, 2 insertions(+), 35 deletions(-) diff --git a/lib/common_widget/container/profile/profile_entete.dart b/lib/common_widget/container/profile/profile_entete.dart index b95d21e..7a73c6b 100644 --- a/lib/common_widget/container/profile/profile_entete.dart +++ b/lib/common_widget/container/profile/profile_entete.dart @@ -45,17 +45,7 @@ class ProfileEntete extends StatelessWidget { ], ), ), - SizedBox( - width: 70, - height: 25, - child: RoundButton( - title: "Editer", - type: RoundButtonType.bgGradient, - fontSize: 12, - fontWeight: FontWeight.w400, - onPressed: () {}, - ), - ) + ], ); } diff --git a/lib/view/profile/all_platforme/profile_view_allplatforme.dart b/lib/view/profile/all_platforme/profile_view_allplatforme.dart index 0aab244..bc12c92 100644 --- a/lib/view/profile/all_platforme/profile_view_allplatforme.dart +++ b/lib/view/profile/all_platforme/profile_view_allplatforme.dart @@ -35,26 +35,6 @@ class _ProfileViewAllPlatforme extends State { style: TextStyle( color: TColor.black, fontSize: 16, fontWeight: FontWeight.w700), ), - actions: [ - InkWell( - onTap: () {}, - child: Container( - margin: const EdgeInsets.all(8), - height: 20, - width: 20, - alignment: Alignment.center, - decoration: BoxDecoration( - color: TColor.lightGray, - borderRadius: BorderRadius.circular(10)), - child: Image.asset( - "assets/img/more_btn.png", - width: 15, - height: 15, - fit: BoxFit.contain, - ), - ), - ) - ], ), backgroundColor: TColor.white, body: SingleChildScrollView( @@ -75,10 +55,7 @@ class _ProfileViewAllPlatforme extends State { const SizedBox( height: 25, ), - ProfileNotification(widget.positive), - const SizedBox( - height: 25, - ), + ProfileOther(widget.otherArr) ], ), From 2941a29a5c3596d9c05dc3520c447857550d62b9 Mon Sep 17 00:00:00 2001 From: Enzo Date: Wed, 6 Dec 2023 14:30:11 +0100 Subject: [PATCH 5/6] workout categorie --- .../container/list/list_activity_widget.dart | 110 +++++++++------- .../workout_row/workout_row_generic.dart | 118 +++++++++++++++++ .../workout_row_walking.dart} | 9 +- lib/modele/activity.dart | 10 +- lib/modele/activity_info/activity_info.dart | 120 +++++++++++++++--- lib/modele/convertisseur.dart | 11 ++ lib/modele/manager_file.dart | 4 +- .../list_activity/list_activity_utile.dart | 2 + 8 files changed, 304 insertions(+), 80 deletions(-) create mode 100644 lib/common_widget/container/workout_row/workout_row_generic.dart rename lib/common_widget/container/{workout_row.dart => workout_row/workout_row_walking.dart} (91%) create mode 100644 lib/modele/convertisseur.dart diff --git a/lib/common_widget/container/list/list_activity_widget.dart b/lib/common_widget/container/list/list_activity_widget.dart index bcaaba8..8d85253 100644 --- a/lib/common_widget/container/list/list_activity_widget.dart +++ b/lib/common_widget/container/list/list_activity_widget.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:smartfit_app_mobile/common_widget/container/workout_row.dart'; +import 'package:smartfit_app_mobile/common_widget/container/workout_row/workout_row_generic.dart'; +import 'package:smartfit_app_mobile/common_widget/container/workout_row/workout_row_walking.dart'; import 'package:smartfit_app_mobile/modele/activity.dart'; import 'package:smartfit_app_mobile/modele/manager_file.dart'; import 'package:smartfit_app_mobile/modele/user.dart'; @@ -20,6 +21,48 @@ class _ListActivityWidget extends State { @override Widget build(BuildContext context) { + void onClick(ActivityOfUser activityObj) async { + if (!Provider.of(context, listen: false) + .managerSelectedActivity + .fileNotSelected(activityObj.fileUuid)) { + Provider.of(context, listen: false) + .managerSelectedActivity + .removeSelectedActivity(activityObj.fileUuid); + setState(() {}); + return; + } + + Tuple2 result = + await _utile.getContentActivity(context, activityObj); + if (!result.item1) { + return; + } + + Provider.of(context, listen: false).removeActivity(activityObj); + Provider.of(context, listen: false).insertActivity(0, activityObj); + } + + void onDelete(ActivityOfUser activityObj) async { + if (await _utile.deleteFileOnBDD( + Provider.of(context, listen: false).token, + activityObj.fileUuid)) { + if (!Provider.of(context, listen: false) + .managerSelectedActivity + .fileNotSelected(activityObj.fileUuid)) { + Provider.of(context, listen: false) + .managerSelectedActivity + .removeSelectedActivity(activityObj.fileUuid); + } + Provider.of(context, listen: false).removeActivity(activityObj); + } + } + + bool isSelected(ActivityOfUser activityObj) { + return !Provider.of(context) + .managerSelectedActivity + .fileNotSelected(activityObj.fileUuid); + } + return Material( color: Colors.transparent, child: ListView.builder( @@ -34,57 +77,28 @@ class _ListActivityWidget extends State { // -- Si categorie == marche if (activityObj.category == managerFile.marche) { activityMap = activityObj.toMapWalking(); + return InkWell( + onTap: () {}, + child: WorkoutRowWalking( + wObj: activityMap, + onDelete: () => onDelete(activityObj), + onClick: () => onClick(activityObj), + isSelected: isSelected(activityObj), + ), + ); } else { // -- Default -- // activityMap = activityObj.toMapGeneric(); + return InkWell( + onTap: () {}, + child: WorkoutRowGeneric( + wObj: activityMap, + onDelete: () => onDelete(activityObj), + onClick: () => onClick(activityObj), + isSelected: isSelected(activityObj), + ), + ); } - - return InkWell( - onTap: () {}, - child: WorkoutRow( - wObj: activityMap, - onDelete: () async { - if (await _utile.deleteFileOnBDD( - Provider.of(context, listen: false).token, - activityObj.fileUuid)) { - if (!Provider.of(context, listen: false) - .managerSelectedActivity - .fileNotSelected(activityObj.fileUuid)) { - Provider.of(context, listen: false) - .managerSelectedActivity - .removeSelectedActivity(activityObj.fileUuid); - } - Provider.of(context, listen: false) - .removeActivity(activityObj); - } - }, - onClick: () async { - if (!Provider.of(context, listen: false) - .managerSelectedActivity - .fileNotSelected(activityObj.fileUuid)) { - Provider.of(context, listen: false) - .managerSelectedActivity - .removeSelectedActivity(activityObj.fileUuid); - setState(() {}); - return; - } - - Tuple2 result = - await _utile.getContentActivity(context, activityObj); - if (!result.item1) { - return; - } - - Provider.of(context, listen: false) - .removeActivity(activityObj); - Provider.of(context, listen: false) - .insertActivity(0, activityObj); - }, - isSelected: !Provider.of(context) - .managerSelectedActivity - .fileNotSelected(activityObj.fileUuid), - ), - ); }, ), ); diff --git a/lib/common_widget/container/workout_row/workout_row_generic.dart b/lib/common_widget/container/workout_row/workout_row_generic.dart new file mode 100644 index 0000000..fa733a9 --- /dev/null +++ b/lib/common_widget/container/workout_row/workout_row_generic.dart @@ -0,0 +1,118 @@ +import 'package:flutter_svg/svg.dart'; +import 'package:smartfit_app_mobile/common/colo_extension.dart'; +import 'package:flutter/material.dart'; +import 'package:smartfit_app_mobile/modele/convertisseur.dart'; + +class WorkoutRowGeneric extends StatelessWidget { + final Map wObj; + final bool isSelected; + final VoidCallback onDelete; + final VoidCallback onClick; + + const WorkoutRowGeneric({ + Key? key, + required this.wObj, + required this.onDelete, + required this.onClick, + required this.isSelected, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onClick, + child: Container( + margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 2), + decoration: BoxDecoration( + border: Border.all( + color: isSelected + ? const Color.fromARGB(255, 144, 252, 148) + : Colors.transparent, + width: 2.0, + ), + borderRadius: BorderRadius.circular(10), + ), + child: Material( + color: isSelected + ? const Color.fromARGB(255, 240, 255, 240) + : Colors.transparent, + child: InkWell( + borderRadius: + BorderRadius.circular(10), // Utiliser le même borderRadius + splashColor: const Color.fromARGB(255, 42, 94, 44) + .withOpacity(0.3), // Couleur du fond au survol + onTap: onClick, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 15), + child: Row( + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(10), + child: SvgPicture.asset( + wObj["image"].toString(), + width: 60, + height: 60, + fit: BoxFit.cover, + ), + ), + const SizedBox(width: 15), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "Type : ${wObj["categorie"].toString()}", + style: TextStyle( + color: TColor.black, + fontSize: 12, + ), + ), + Text( + "Date : ${wObj["date"].toString()}", + style: TextStyle( + color: TColor.black, + fontSize: 12, + ), + ), + Text( + "Temps : ${Convertisseur.secondeIntoMinute(wObj["time"]).toStringAsFixed(2)} m", + style: TextStyle( + color: TColor.black, + fontSize: 12, + ), + ) + ], + ), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + IconButton( + onPressed: onClick, + icon: Image.asset( + "assets/img/next_icon.png", + width: 30, + height: 30, + fit: BoxFit.contain, + ), + ), + IconButton( + onPressed: onDelete, + icon: Image.asset( + "assets/img/corbeille.png", + width: 30, + height: 30, + fit: BoxFit.contain, + ), + ), + ], + ), + ], + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/common_widget/container/workout_row.dart b/lib/common_widget/container/workout_row/workout_row_walking.dart similarity index 91% rename from lib/common_widget/container/workout_row.dart rename to lib/common_widget/container/workout_row/workout_row_walking.dart index d4d499a..1f6b5fd 100644 --- a/lib/common_widget/container/workout_row.dart +++ b/lib/common_widget/container/workout_row/workout_row_walking.dart @@ -1,14 +1,15 @@ import 'package:flutter_svg/svg.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:flutter/material.dart'; +import 'package:smartfit_app_mobile/modele/convertisseur.dart'; -class WorkoutRow extends StatelessWidget { +class WorkoutRowWalking extends StatelessWidget { final Map wObj; final bool isSelected; final VoidCallback onDelete; final VoidCallback onClick; - const WorkoutRow({ + const WorkoutRowWalking({ Key? key, required this.wObj, required this.onDelete, @@ -74,14 +75,14 @@ class WorkoutRow extends StatelessWidget { ), ), Text( - "Temps : ${wObj["time"].toString()}", + "Temps : ${Convertisseur.secondeIntoMinute(wObj["time"]).toStringAsFixed(2)} m", style: TextStyle( color: TColor.black, fontSize: 12, ), ), Text( - "Dénivelé positif : ${wObj["DenivelePositif"].toString()}", + "Vitesse moyenne : ${Convertisseur.msIntoKmh(wObj["VitesseAvg"]).toStringAsFixed(2)} km/h", style: TextStyle( color: TColor.black, fontSize: 12, diff --git a/lib/modele/activity.dart b/lib/modele/activity.dart index 57b36f1..5637d1c 100644 --- a/lib/modele/activity.dart +++ b/lib/modele/activity.dart @@ -3,7 +3,7 @@ import 'package:smartfit_app_mobile/modele/activity_info/activity_info.dart'; class ActivityOfUser { final ActivityInfo _activityInfo; // A afficher - final String _categorie; + final String _category; final String _fileUuid; final String _nameFile; // ------------ // @@ -14,7 +14,7 @@ class ActivityOfUser { String get fileUuid => _fileUuid; String get nameFile => _nameFile; - String get category => _categorie; + String get category => _category; ActivityInfo get activityInfo => _activityInfo; Map get enteteCSV => _enteteCSV; @@ -29,9 +29,9 @@ class ActivityOfUser { } ActivityOfUser( - this._activityInfo, this._categorie, this._fileUuid, this._nameFile) { + this._activityInfo, this._category, this._fileUuid, this._nameFile) { // Mettre dans une fonction appart - if (_categorie == "Walking") { + if (_category == "Walking") { _imageName = "assets/img/workout1.svg"; } else { // Mettre des conditions pour d'autre type d'activité @@ -43,7 +43,7 @@ class ActivityOfUser { Map toMapGeneric() { Map map = { - 'categorie': _categorie, + 'categorie': _category, 'image': _imageName, 'date': _activityInfo.startTime, 'time': _activityInfo.timeOfActivity, diff --git a/lib/modele/activity_info/activity_info.dart b/lib/modele/activity_info/activity_info.dart index aed8424..92ba698 100644 --- a/lib/modele/activity_info/activity_info.dart +++ b/lib/modele/activity_info/activity_info.dart @@ -319,7 +319,9 @@ class ActivityInfo { // -- Altitude -- // "AltitudeMax": altitudeMax, "AltitudeMin": altitudeMin, - "AltitudeAvg": altitudeAvg + "AltitudeAvg": altitudeAvg, + // -- Vitesse -- // + "VitesseAvg": vitesseAvg }; } @@ -330,30 +332,106 @@ class ActivityInfo { return; } // -- Ligne session -- // - startTime = DateTime.parse(map["startTime"]); - timeOfActivity = map["timeOfActivity"].toDouble(); - distance = map["distance"].toDouble(); - calories = map["calories"].toInt(); - steps = map["steps"].toInt(); + try { + startTime = DateTime.parse(map["startTime"]); + } catch (e) { + print("Impossible de recup -> startTime"); + } + try { + timeOfActivity = map["timeOfActivity"]; + } catch (e) { + print("Impossible de recup -> timeOfActivity"); + } + try { + distance = map["distance"].toDouble(); + } catch (e) { + print("Impossible de recup -> distance"); + } + try { + calories = map["calories"]; + } catch (e) { + print("Impossible de recup -> calories"); + } + try { + steps = map["steps"]; + } catch (e) { + print("Impossible de recup -> steps"); + } // -- BPM -- // - bpmAvg = map["bpmAvg"]; - bpmMax = map["bpmMax"]; - bpmMin = map["bpmMin"]; + try { + bpmAvg = map["bpmAvg"]; + } catch (e) { + print("Impossible de recup -> "); + } + try { + bpmMax = map["bpmMax"]; + } catch (e) { + print("Impossible de recup -> "); + } + try { + bpmMin = map["bpmMin"]; + } catch (e) { + print("Impossible de recup -> "); + } // -- Denivelé -- // - deniveleNegatif = map["deniveleNegatif"].toDouble(); - denivelePositif = map["denivelePositif"].toDouble(); + try { + deniveleNegatif = map["deniveleNegatif"]; + } catch (e) { + print("Impossible de recup -> deniveleNegatif"); + } + try { + denivelePositif = map["denivelePositif"]; + } catch (e) { + print("Impossible de recup -> denivelePositif"); + } // -- Altitude -- // - altitudeMax = map["altitudeMax"].toDouble(); - altitudeMin = map["altitudeMin"].toDouble(); - altitudeAvg = map["altitudeAvg"].toDouble(); + try { + altitudeMax = map["altitudeMax"]; + } catch (e) { + print("Impossible de recup -> altitudeMax"); + } + try { + altitudeMin = map["altitudeMin"]; + } catch (e) { + print("Impossible de recup -> altitudeMin"); + } + try { + altitudeAvg = map["altitudeAvg"]; + } catch (e) { + print("Impossible de recup -> altitudeAvg"); + } // -- Température -- // - temperatureMax = map["temperatureMax"].toInt(); - temperatureMin = map["temperatureMin"].toInt(); - temperatureAvg = map["temperatureAvg"].toInt(); + try { + temperatureMax = map["temperatureMax"]; + } catch (e) { + print("Impossible de recup -> temperatureMax"); + } + try { + temperatureMin = map["temperatureMin"]; + } catch (e) { + print("Impossible de recup -> temperatureMin"); + } + try { + temperatureAvg = map["temperatureAvg"]; + } catch (e) { + print("Impossible de recup -> temperatureAvg"); + } // -- Vitesse -- // - vitesseMax = map["vitesseMax"].toDouble(); - vitesseMin = map["vitesseMin"].toDouble(); - vitesseAvg = map["vitesseAvg"].toDouble(); + try { + vitesseMax = map["vitesseMax"].toDouble(); + } catch (e) { + print("Impossible de recup -> vitesseMax"); + } + try { + vitesseMin = map["vitesseMin"].toDouble(); + } catch (e) { + print("Impossible de recup -> vitesseMin"); + } + try { + vitesseAvg = map["vitesseAvg"].toDouble(); + } catch (e) { + print("Impossible de recup -> vitesseAvg"); + } } // -- Ecriture -- // @@ -379,7 +457,7 @@ class ActivityInfo { 'vitesseMin': vitesseMin, 'vitesseAvg': vitesseAvg, // Ligne session - 'startTime': startTime.toString(), + 'startTime': startTime.toIso8601String(), 'timeOfActivity': timeOfActivity, 'distance': distance, 'calories': calories, diff --git a/lib/modele/convertisseur.dart b/lib/modele/convertisseur.dart new file mode 100644 index 0000000..89e3ebc --- /dev/null +++ b/lib/modele/convertisseur.dart @@ -0,0 +1,11 @@ +class Convertisseur { + // Mettre que des trucs static + + static double secondeIntoMinute(double seconde) { + return seconde / 60; + } + + static double msIntoKmh(double metreSeconde) { + return metreSeconde * 3.6; + } +} diff --git a/lib/modele/manager_file.dart b/lib/modele/manager_file.dart index a83e975..efb9959 100644 --- a/lib/modele/manager_file.dart +++ b/lib/modele/manager_file.dart @@ -113,7 +113,7 @@ class ManagerFile { categorie = _getCategoryById(int.parse(_getXfromListe(_sport, ligneSession))); - // -- Si la catégorie est pas prévu est est généric -- // + // -- Si la catégorie est pas prévu == généric -- // switch (categorie) { case (_marche): fieldAllowed = allowedFieldWalking; @@ -143,7 +143,6 @@ class ManagerFile { info.calories = int.parse(_getXfromListe(_totalCalories, ligneSession)); info.steps = int.parse(_getXfromListe(_totalStep, ligneSession)); // ----------------------------------------------------- // - // -- Extraire les données en fonction de la catégorie -- // switch (categorie) { case (_marche): @@ -154,6 +153,7 @@ class ManagerFile { info.getDataGeneric(csvData); } + //print("Fin : ManagerFile -> convertBytesFitFileIntoCSVListAndGetInfo "); return Tuple4(true, csvData, info, categorie); } diff --git a/lib/modele/utile/list_activity/list_activity_utile.dart b/lib/modele/utile/list_activity/list_activity_utile.dart index dc963e2..1f9ef4f 100644 --- a/lib/modele/utile/list_activity/list_activity_utile.dart +++ b/lib/modele/utile/list_activity/list_activity_utile.dart @@ -81,6 +81,8 @@ class ListActivityUtile { resultData.item4, resultData.item3.startTime, resultData.item3); + // resultData.item4 == category + // resultData.item3 == ActivityInfo if (result.item1 == false) { return Tuple2(false, result.item2); } From 8d408a274cc380d3a873a111975778f9b5e32a31 Mon Sep 17 00:00:00 2001 From: otbenjello Date: Wed, 6 Dec 2023 14:42:36 +0100 Subject: [PATCH 6/6] modif --- lib/common_widget/container/profile/profile_info_user.dart | 6 +++--- lib/common_widget/steps.dart | 2 +- lib/view/home/mobile/mobile_homeview.dart | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/common_widget/container/profile/profile_info_user.dart b/lib/common_widget/container/profile/profile_info_user.dart index 26ea71c..9f48af8 100644 --- a/lib/common_widget/container/profile/profile_info_user.dart +++ b/lib/common_widget/container/profile/profile_info_user.dart @@ -21,7 +21,7 @@ class ProfileInfoUser extends StatelessWidget { ), Expanded( child: TitleSubtitleCell( - title: context.watch().getTotalTimeAllActivity().toString(), + title: context.watch().getTotalTimeAllActivity().toStringAsFixed(2), subtitle: "Temps en activité", ), ), @@ -31,7 +31,7 @@ class ProfileInfoUser extends StatelessWidget { Expanded( child: TitleSubtitleCell( title: - "${context.watch().getTotalDenivelePositif().toStringAsFixed(2)} + m", + "${context.watch().getTotalDenivelePositifAllActivity().toStringAsFixed(2)} + m", subtitle: "Total dénivelé positif", ), ), @@ -41,7 +41,7 @@ class ProfileInfoUser extends StatelessWidget { Expanded( child: TitleSubtitleCell( title: - "${context.watch().getTotalDeniveleNegatif().toStringAsFixed(2)} - m", + "${context.watch().getTotalDeniveleNegatifAllActivity().toStringAsFixed(2)} - m", subtitle: "Total dénivelé négatif", ), ), diff --git a/lib/common_widget/steps.dart b/lib/common_widget/steps.dart index 03acc68..5354730 100644 --- a/lib/common_widget/steps.dart +++ b/lib/common_widget/steps.dart @@ -9,7 +9,7 @@ class Steps extends StatelessWidget { Widget build(BuildContext context) { String steps = Provider.of(context, listen: false) .managerSelectedActivity - .getTimeAllActivitySelected() + .getStepsAllActivitySelected() .toString(); return Padding( diff --git a/lib/view/home/mobile/mobile_homeview.dart b/lib/view/home/mobile/mobile_homeview.dart index b60e2a9..5aba44d 100644 --- a/lib/view/home/mobile/mobile_homeview.dart +++ b/lib/view/home/mobile/mobile_homeview.dart @@ -45,10 +45,10 @@ class _MobileHomeView extends State { double avgAltitude = managerSelectedActivity.activitySelected.first.activityInfo.altitudeAvg; // -- Speed -- // - double maxSpeed = managerSelectedActivity.getMaxSpeed(); - double avgSpeed = managerSelectedActivity.getAvgSpeed(); + double maxSpeed = managerSelectedActivity.getMaxSpeedAllActivitySelected(); + double avgSpeed = managerSelectedActivity.getAvgSpeedAllActivitySelected(); data.maxSpeed = maxSpeed; - data.time = context.watch().managerSelectedActivity.getTotalTime(); + data.time = context.watch().managerSelectedActivity.getTimeAllActivitySelected(); return Scaffold( backgroundColor: TColor.white, body: SingleChildScrollView(