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: