correction ActivityInfo
continuous-integration/drone/push Build is passing Details

pull/4/head
Enzo 2 years ago
parent 6388591ee0
commit a4f387e3cd

@ -1,6 +1,8 @@
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/modele/activity.dart';
import 'package:smartfit_app_mobile/modele/manager_file.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/modele/utile/list_activity/list_activity_utile.dart';
import 'package:tuple/tuple.dart';
@ -14,6 +16,7 @@ class ListActivityWidget extends StatefulWidget {
class _ListActivityWidget extends State<ListActivityWidget> {
final ListActivityUtile _utile = ListActivityUtile();
final ManagerFile managerFile = ManagerFile();
@override
Widget build(BuildContext context) {
@ -25,9 +28,16 @@ class _ListActivityWidget extends State<ListActivityWidget> {
shrinkWrap: true,
itemCount: Provider.of<User>(context, listen: true).listActivity.length,
itemBuilder: (context, index) {
var activityObj =
ActivityOfUser activityObj =
Provider.of<User>(context, listen: true).listActivity[index];
var activityMap = activityObj.toMap();
Map<String, dynamic> activityMap;
// -- Si categorie == marche
if (activityObj.category == managerFile.marche) {
activityMap = activityObj.toMapWalking();
} else {
// -- Default -- //
activityMap = activityObj.toMapGeneric();
}
return InkWell(
onTap: () {},

@ -20,10 +20,22 @@ class MobileGraphAltitudeByTime extends StatefulWidget {
class _MobileGraphAltitudeByTime extends State<MobileGraphAltitudeByTime> {
@override
Widget build(BuildContext context) {
final double maxY =
context.watch<User>().managerSelectedActivity.getMaxAltitude() + 2;
final double minY =
context.watch<User>().managerSelectedActivity.getMinAltitude() - 2;
final double maxY = context
.watch<User>()
.managerSelectedActivity
.activitySelected
.first
.activityInfo
.altitudeMax +
2;
final double minY = context
.watch<User>()
.managerSelectedActivity
.activitySelected
.first
.activityInfo
.altitudeMin -
2;
final lineBarsData = [
LineChartBarData(

@ -19,10 +19,22 @@ class WebGraphAltitudeByTime extends StatefulWidget {
class _WebGraphAltitudeByTime extends State<WebGraphAltitudeByTime> {
@override
Widget build(BuildContext context) {
final double maxY =
context.watch<User>().managerSelectedActivity.getMaxAltitude() + 2;
final double minY =
context.watch<User>().managerSelectedActivity.getMinAltitude() - 2;
final double maxY = context
.watch<User>()
.managerSelectedActivity
.activitySelected
.first
.activityInfo
.altitudeMax +
2;
final double minY = context
.watch<User>()
.managerSelectedActivity
.activitySelected
.first
.activityInfo
.altitudeMin -
2;
final lineBarsData = [
LineChartBarData(

@ -41,15 +41,19 @@ class ActivityOfUser {
// -------------------------- FIN Localisation ---------------------- //
Map<String, dynamic> toMap() {
Map<String, dynamic> toMapGeneric() {
Map<String, dynamic> map = {
'categorie': _categorie,
'image': _imageName,
'date': _activityInfo.startTime,
'time': _activityInfo.timeOfActivity,
};
map.addAll(_activityInfo.toMap());
return map;
}
Map<String, dynamic> toMapWalking() {
Map<String, dynamic> map = toMapGeneric();
map.addAll(activityInfo.toMapWalking());
return map;
}
}

@ -1,25 +1,47 @@
import 'dart:convert';
import 'package:smartfit_app_mobile/modele/manager_file.dart';
abstract class ActivityInfo {
class ActivityInfo {
ManagerFile managerFile = ManagerFile();
ActivityInfo();
// -- Time -- // Ne pas calculer (Ligne session)
String startTime = "2000-01-01";
double timeOfActivity = 0.0;
// -- BPM -- //
// ----------- BPM ------------ //
int bpmMax = 0;
int bpmMin = 300;
int bpmAvg = 0;
// ----------- Denivelé ------------ //
double denivelePositif = 0.0;
double deniveleNegatif = 0.0;
// ----------- Altitude ------------ //
double altitudeMax = 0.0;
double altitudeMin = 30000.0;
double altitudeAvg = 0.0;
// ---------------------------------------------------------------------- //
// -- Fonction pour lire le csv et remplir la classe -- //
ActivityInfo getData(List<List<String>> csv) {
// - Entete - //
Map<String, int> enteteCSV = getEntete(csv.first);
// ------------- Var tmp ---------- //
// -- BPM -- //
int bpmSomme = 0;
int bpmNb = 0;
Map<String, int> enteteCSV = getEntete(csv.first);
// -- Denivelé -- //
double lastDenivele = 0.0;
// -- Altitude -- //
double altitudeSomme = 0;
int alititudeNb = 0;
// --- Boucle -- //
for (int i = 1; i < csv.length; i++) {
// -- BPM -- //
//
// ---------------------- BPM ---------------------- //
if (!isNull(enteteCSV["Value_${managerFile.fielBPM}"]!, csv[i])) {
int value =
int.parse(csv[i][enteteCSV["Value_${managerFile.fielBPM}"]!]);
@ -32,13 +54,38 @@ abstract class ActivityInfo {
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;
}
}
// -- BPM -- //
bpmAvg = bpmSomme ~/ bpmNb;
// -- Atitude -- //
altitudeAvg = altitudeSomme / alititudeNb;
return this;
}
// ------------ Fonction utile ------------------- //
Map<String, int> getEntete(List<dynamic> content) {
Map<String, int> enteteCSV = {};
for (int i = 0; i < content.length; i++) {
@ -51,16 +98,59 @@ abstract class ActivityInfo {
return ligne[colonne] == "null";
}
String toJson();
Map<String, dynamic> toMap();
// ------------- Pour print ----------------- //
Map<String, dynamic> toMapWalking() {
return {
// -- Denivelé -- //
"DenivelePositif": denivelePositif,
"DeniveleNegatif": denivelePositif,
// -- Altitude -- //
"AltitudeMax": altitudeMax,
"AltitudeMin": altitudeMin,
"AltitudeAvg": altitudeAvg
};
}
// --------------- JSON --------- //
// -- Lecture -- //
ActivityInfo.fromJson(Map<String, dynamic>? map) {
if (map == null) {
return;
}
// -- Ligne session -- //
startTime = map["startTime"];
timeOfActivity = map["timeOfActivity"].toDouble();
// -- BPM -- //
bpmAvg = map["bpmAvg"];
bpmMax = map["bpmMax"];
bpmMin = map["bpmMin"];
// -- Denivelé -- //
deniveleNegatif = map["deniveleNegatif"].toDouble();
denivelePositif = map["denivelePositif"].toDouble();
// -- Altitude -- //
altitudeMax = map["altitudeMax"].toDouble();
altitudeMin = map["altitudeMin"].toDouble();
altitudeAvg = map["altitudeAvg"].toDouble();
}
// -- Ecriture -- //
String toJson() {
Map<String, dynamic> jsonMap = {
// -- BPM -- //
'bpmAvg': bpmAvg,
'bpmMax': bpmMax,
'bpmMin': bpmMin,
// -- Denivelé -- //
'denivelePositif': denivelePositif,
'deniveleNegatif': deniveleNegatif,
// -- Altitude -- //
'altitudeMax': altitudeMax,
'altitudeMin': altitudeMin,
'altitudeAvg': altitudeAvg,
// Ligne session
'startTime': startTime,
'timeOfActivity': timeOfActivity,
};
return jsonEncode(jsonMap);
}
}

@ -1,35 +0,0 @@
import 'dart:convert';
import 'package:smartfit_app_mobile/modele/activity_info/activity_info.dart';
class ActivityInfoGeneric extends ActivityInfo {
ActivityInfoGeneric.fromJson(super.map) : super.fromJson();
ActivityInfoGeneric() : super.fromJson(null);
// ------- Ajout --------- //
// ------- Activity Info -------- //
@override
ActivityInfo getData(List<List<String>> csv) {
super.getData(csv);
return this;
}
@override
// Méthode pour convertir les attributs en JSON
String toJson() {
Map<String, dynamic> jsonMap = {
'bpmAvg': bpmAvg,
'bpmMax': bpmMax,
'bpmMin': bpmMin,
'startTime': startTime,
'timeOfActivity': timeOfActivity,
};
return jsonEncode(jsonMap);
}
@override
Map<String, dynamic> toMap() {
return {};
}
}

@ -1,68 +0,0 @@
import 'dart:convert';
import 'package:smartfit_app_mobile/modele/activity_info/activity_info.dart';
class ActivityInfoWalking extends ActivityInfo {
ActivityInfoWalking.fromJson(map) : super.fromJson(map) {
deniveleNegatif = map["deniveleNegatif"].toDouble();
denivelePositif = map["denivelePositif"].toDouble();
}
ActivityInfoWalking() : super.fromJson(null);
// ------- Ajout --------- //
// -- Denivelé -- //
double denivelePositif = 0.0;
double deniveleNegatif = 0.0;
@override
ActivityInfo getData(List<List<String>> csv) {
super.getData(csv);
Map<String, int> enteteCSV = getEntete(csv.first);
// -- Denivelé -- //
double lastDenivele = 0.0;
// -- Lecture du corps -- //
for (int i = 1; i < csv.length; i++) {
// -- Denivele -- //
if (!isNull(enteteCSV["Value_${managerFile.fieldAltitude}"]!, csv[i])) {
double value = double.parse(
csv[i][enteteCSV["Value_${managerFile.fieldAltitude}"]!]);
if (value > lastDenivele) {
denivelePositif += value - lastDenivele;
} else {
deniveleNegatif += (value - lastDenivele) * -1;
}
lastDenivele = value;
}
}
return this;
}
@override
// Méthode pour convertir les attributs en JSON
String toJson() {
Map<String, dynamic> jsonMap = {
// Unique
'denivelePositif': denivelePositif,
'deniveleNegatif': deniveleNegatif,
// All
'bpmAvg': bpmAvg,
'bpmMax': bpmMax,
'bpmMin': bpmMin,
// Ligne session
'startTime': startTime,
'timeOfActivity': timeOfActivity,
};
return jsonEncode(jsonMap);
}
@override
Map<String, dynamic> toMap() {
return {
"DenivelePositif": denivelePositif,
"DeniveleNegatif": denivelePositif
};
}
}

@ -4,8 +4,6 @@ import 'package:csv/csv.dart';
import 'package:fit_tool/fit_tool.dart';
import 'package:path_provider/path_provider.dart';
import 'package:smartfit_app_mobile/modele/activity_info/activity_info.dart';
import 'package:smartfit_app_mobile/modele/activity_info/activity_info_generic.dart';
import 'package:smartfit_app_mobile/modele/activity_info/activity_info_walking.dart';
import 'package:tuple/tuple.dart';
class ManagerFile {
@ -25,7 +23,7 @@ class ManagerFile {
static const String _session = "session";
static const String _startTime = "start_time";
static const String _sport = "sport";
//static const String _timeActivity = "total_elapsed_time";
static const String _timeActivity = "total_elapsed_time";
// -- Getter field
String get fieldTimeStamp => _fieldTimestamp;
@ -44,6 +42,10 @@ class ManagerFile {
static const String _velo = "cycling";
static const String _marche = "walking";
// -- Getter categorie
String get marche => _marche;
String get generic => _generic;
List<String> allowedFieldWalking = List.empty(growable: true);
List<String> allowedFieldGeneric = List.empty(growable: true);
List<String> allowedFieldCycling = List.empty(growable: true);
@ -106,11 +108,11 @@ class ManagerFile {
List<Record> fitFile = FitFile.fromBytes(bytes).records;
String categorie;
List<String> fieldAllowed = [];
ActivityInfo info;
ActivityInfo info = ActivityInfo();
// -- Chercher ligne session -- //
List<dynamic> ligneSession = _getLigneSession(fitFile);
if (ligneSession.isEmpty) {
return Tuple4(false, List.empty(), ActivityInfoGeneric(), "");
return Tuple4(false, List.empty(), ActivityInfo(), "");
}
categorie =
_getCategoryById(int.parse(_getXfromListe(_sport, ligneSession)));
@ -119,11 +121,9 @@ class ManagerFile {
switch (categorie) {
case (_marche):
fieldAllowed = allowedFieldWalking;
info = ActivityInfoWalking();
break;
case (_generic):
fieldAllowed = allowedFieldGeneric;
info = ActivityInfoGeneric();
break;
default:
// A REMETRE EN GENERIC
@ -131,15 +131,20 @@ class ManagerFile {
//info = ActivityInfoGeneric();
//categorie = _generic;
fieldAllowed = allowedFieldWalking;
info = ActivityInfoWalking();
break;
}
// -------- Transformation en CSV ----------- //
List<List<String>> csvData = transformDataMapIntoCSV(
getDataOfListeOfRecord(fitFile, fieldAllowed), fieldAllowed);
// Remplir info avec la ligne session
// ------ Remplir info avec la ligne session --------- //
info.startTime = DateTime.fromMillisecondsSinceEpoch(
int.parse(_getXfromListe(_startTime, ligneSession)))
.toIso8601String();
info.timeOfActivity =
double.parse(_getXfromListe(_timeActivity, ligneSession));
// ----------------------------------------------------- //
return Tuple4(true, csvData, info.getData(csvData), categorie);
}

@ -99,6 +99,26 @@ class ManagerSelectedActivity {
return max;
}*/
int getBpmMaxAllActivitieSelected() {
int max = 0;
for (ActivityOfUser activityOfUser in activitySelected) {
if (activityOfUser.activityInfo.bpmMax > max) {
max = activityOfUser.activityInfo.bpmMax;
}
}
return max;
}
int getBpmMinAllActivitieSelected() {
int min = 0;
for (ActivityOfUser activityOfUser in activitySelected) {
if (activityOfUser.activityInfo.bpmMax < min) {
min = activityOfUser.activityInfo.bpmMin;
}
}
return min;
}
/*
// Retourne le BPM Min (Fichier CSV)
int getMinBpm() {
@ -119,6 +139,7 @@ class ManagerSelectedActivity {
return min;
}
// Retourne le BPM avg (Fichier CSV)
int getAvgBpm() {
int somme = 0;
@ -135,7 +156,7 @@ class ManagerSelectedActivity {
}
return somme ~/ nb;
}*/
/*
double getAvgAltitude() {
double somme = 0;
int nb = 0;
@ -154,7 +175,7 @@ class ManagerSelectedActivity {
}
double average = somme / nb;
return double.parse(average.toStringAsFixed(2));
}
}*/
double getAvgTemperature() {
double somme = 0;
@ -332,7 +353,7 @@ class ManagerSelectedActivity {
// ---------------------------- FIN time -------------------- //
// ---------------------------------------- Altitude -------------------- //
/*
// --- Fichier CSV --- //
double getMaxAltitude() {
double max = 0;
@ -354,8 +375,28 @@ class ManagerSelectedActivity {
}
}
return max;
}*/
double getMaxAltitudeAllActivitySelected() {
double max = 0.0;
for (ActivityOfUser activityOfUser in activitySelected) {
if (activityOfUser.activityInfo.altitudeMax > max) {
max = activityOfUser.activityInfo.altitudeMax;
}
}
return max;
}
double getMinAltitudeAllActivitySelected() {
double min = 0.0;
for (ActivityOfUser activityOfUser in activitySelected) {
if (activityOfUser.activityInfo.altitudeMax < min) {
min = activityOfUser.activityInfo.altitudeMin;
}
}
return min;
}
/*
// --- Fichier CSV --- //
double getMinAltitude() {
double min = 5000;
@ -377,7 +418,7 @@ class ManagerSelectedActivity {
}
}
return min;
}
}*/
// -------------------------- FIN altitude ---------------------- //

@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/modele/activity.dart';
import 'package:smartfit_app_mobile/modele/activity_info/activity_info_walking.dart';
import 'package:smartfit_app_mobile/modele/manager_selected_activity.dart';
class User extends ChangeNotifier {
@ -27,7 +26,7 @@ class User extends ChangeNotifier {
}
// ------------ Fonction Calcul -------- //
// --- Time --- //
double getTotalTimeAllActivity() {
double totalTime = 0.0;
for (ActivityOfUser activity in listActivity) {
@ -36,15 +35,12 @@ class User extends ChangeNotifier {
return totalTime;
}
// ------------ Walking -------------- //
// ---- Denivelé ---- //
double getTotalDenivelePositif() {
double totalDevPos = 0.0;
for (ActivityOfUser activity in listActivity) {
try {
totalDevPos +=
(activity.activityInfo as ActivityInfoWalking).denivelePositif;
} catch (e) {
//print(e);
}
totalDevPos += activity.activityInfo.denivelePositif;
}
return totalDevPos;
}
@ -52,12 +48,7 @@ class User extends ChangeNotifier {
double getTotalDeniveleNegatif() {
double totalDevNeg = 0.0;
for (ActivityOfUser activity in listActivity) {
try {
totalDevNeg +=
(activity.activityInfo as ActivityInfoWalking).deniveleNegatif;
} catch (e) {
//print(e);
}
totalDevNeg += activity.activityInfo.deniveleNegatif;
}
return totalDevNeg;
}

@ -6,7 +6,6 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/modele/activity.dart';
import 'package:smartfit_app_mobile/modele/activity_info/activity_info.dart';
import 'package:smartfit_app_mobile/modele/activity_info/activity_info_walking.dart';
import 'package:smartfit_app_mobile/modele/api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/modele/api/request_api.dart';
import 'package:smartfit_app_mobile/modele/manager_file.dart';
@ -54,7 +53,7 @@ class ListActivityUtile {
// -- connaitre le type de categorie pour changer le type d'info -- //
Provider.of<User>(context, listen: false).addActivity(ActivityOfUser(
ActivityInfoWalking.fromJson(element["info"]),
ActivityInfo.fromJson(element["info"]),
element["category"].toString(),
element["uuid"].toString(),
element["filename"].toString()));
@ -100,6 +99,7 @@ class ListActivityUtile {
return true;
}
// --- Ne marche pas sous window !! Jsp linux (mettre en format mobile) -- //
void addFileWeb(Uint8List? bytes, String token, String filename,
BuildContext context) async {
if (bytes == null) {

@ -38,9 +38,12 @@ class _MobileHomeView extends State<MobileHomeView> {
managerSelectedActivity.activitySelected.first.activityInfo.bpmAvg;
// -- Altitude -- //
double minAltitude = managerSelectedActivity.getMinAltitude();
double maxAltitude = managerSelectedActivity.getMaxAltitude();
double avgAltitude = (maxAltitude + minAltitude) / 2;
double minAltitude =
managerSelectedActivity.activitySelected.first.activityInfo.altitudeMin;
double maxAltitude =
managerSelectedActivity.activitySelected.first.activityInfo.altitudeMax;
double avgAltitude =
managerSelectedActivity.activitySelected.first.activityInfo.altitudeAvg;
// -- Speed -- //
double maxSpeed = managerSelectedActivity.getMaxSpeed();
double avgSpeed = managerSelectedActivity.getAvgSpeed();

@ -3,6 +3,7 @@ import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/common_widget/container/container_stats_activities.dart';
import 'package:smartfit_app_mobile/common_widget/other/entete_home_view.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/modele/manager_selected_activity.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/home_view_util.dart';
@ -22,27 +23,20 @@ class _StatAtivities extends State<StatAtivities> {
Widget build(BuildContext context) {
var media = MediaQuery.of(context).size;
data = HomeViewUtil().initData(context);
int maxBpm = context
.watch<User>()
.managerSelectedActivity
.activitySelected
.first
.activityInfo
.bpmMax;
int minBpm = context
.watch<User>()
.managerSelectedActivity
.activitySelected
.first
.activityInfo
.bpmMin;
int avgBpm = context
.watch<User>()
.managerSelectedActivity
.activitySelected
.first
.activityInfo
.bpmAvg;
ManagerSelectedActivity managerSelectedActivity =
context.watch<User>().managerSelectedActivity;
// -- BPM -- //
int maxBpm = managerSelectedActivity.getBpmMaxAllActivitieSelected();
int minBpm = managerSelectedActivity.getBpmMinAllActivitieSelected();
int avgBpm = (minBpm + maxBpm) ~/ 2;
// -- Altitude -- //
double maxAltitude =
managerSelectedActivity.getMaxAltitudeAllActivitySelected();
double minAltitude =
managerSelectedActivity.getMinAltitudeAllActivitySelected();
double avgAltitude = (minAltitude + maxAltitude) / 2;
double getTotalDistance =
context.watch<User>().managerSelectedActivity.getTotalDistance();
int totalSteps =
@ -53,14 +47,9 @@ class _StatAtivities extends State<StatAtivities> {
context.watch<User>().managerSelectedActivity.getCalorie();
double avgSpeed =
context.watch<User>().managerSelectedActivity.getAvgSpeed();
double avgAltitude =
context.watch<User>().managerSelectedActivity.getAvgAltitude();
double avgTemperature =
context.watch<User>().managerSelectedActivity.getAvgTemperature();
double maxAltitude =
context.watch<User>().managerSelectedActivity.getMaxAltitude();
double maxTemperature =
context.watch<User>().managerSelectedActivity.getMaxTemperature();
@ -68,8 +57,6 @@ class _StatAtivities extends State<StatAtivities> {
context.watch<User>().managerSelectedActivity.getMaxSpeed();
double minSpeed =
context.watch<User>().managerSelectedActivity.getMinSpeed();
double minAltitude =
context.watch<User>().managerSelectedActivity.getMinAltitude();
double minTemperature =
context.watch<User>().managerSelectedActivity.getMinTemperature();

@ -6,6 +6,7 @@ import 'package:smartfit_app_mobile/common_widget/graph/bpm_and_speed_by_time.da
import 'package:smartfit_app_mobile/common_widget/graph/bpm_by_time.dart';
import 'package:smartfit_app_mobile/common_widget/other/entete_home_view.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/modele/manager_selected_activity.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/home_view_util.dart';
@ -24,34 +25,23 @@ class _WebHomeView extends State<WebHomeView> {
@override
Widget build(BuildContext context) {
var media = MediaQuery.of(context).size;
ManagerSelectedActivity managerSelectedActivity =
context.watch<User>().managerSelectedActivity;
// -- BPM -- //
int maxBpm = context
.watch<User>()
.managerSelectedActivity
.activitySelected
.first
.activityInfo
.bpmMax;
int minBpm = context
.watch<User>()
.managerSelectedActivity
.activitySelected
.first
.activityInfo
.bpmMin;
int avgBpm = context
.watch<User>()
.managerSelectedActivity
.activitySelected
.first
.activityInfo
.bpmAvg;
int maxBpm =
managerSelectedActivity.activitySelected.first.activityInfo.bpmMax;
int minBpm =
managerSelectedActivity.activitySelected.first.activityInfo.bpmMin;
int avgBpm =
managerSelectedActivity.activitySelected.first.activityInfo.bpmAvg;
// -- Altitude -- //
double minAltitude =
context.watch<User>().managerSelectedActivity.getMinAltitude();
managerSelectedActivity.activitySelected.first.activityInfo.altitudeMin;
double maxAltitude =
context.watch<User>().managerSelectedActivity.getMaxAltitude();
double avgAltitude = (maxAltitude + minAltitude) / 2;
managerSelectedActivity.activitySelected.first.activityInfo.altitudeMax;
double avgAltitude =
managerSelectedActivity.activitySelected.first.activityInfo.altitudeAvg;
// -- Speed -- //
double maxSpeed =
context.watch<User>().managerSelectedActivity.getMaxSpeed();

Loading…
Cancel
Save