diff --git a/lib/common_widget/container/workout_row.dart b/lib/common_widget/container/workout_row.dart index 0fd3514..9137ee6 100644 --- a/lib/common_widget/container/workout_row.dart +++ b/lib/common_widget/container/workout_row.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; class WorkoutRow extends StatelessWidget { final Map wObj; - final bool isFirstActivity; // Ajouter la propriété isFirstActivity + final bool isSelected; final VoidCallback onDelete; final VoidCallback onClick; @@ -13,7 +13,7 @@ class WorkoutRow extends StatelessWidget { required this.wObj, required this.onDelete, required this.onClick, - required this.isFirstActivity, + required this.isSelected, }) : super(key: key); @override @@ -24,7 +24,7 @@ class WorkoutRow extends StatelessWidget { margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 2), decoration: BoxDecoration( border: Border.all( - color: isFirstActivity + color: isSelected ? Color.fromARGB(255, 144, 252, 148) : Colors.transparent, width: 2.0, @@ -32,7 +32,7 @@ class WorkoutRow extends StatelessWidget { borderRadius: BorderRadius.circular(10), ), child: Material( - color: isFirstActivity + color: isSelected ? Color.fromARGB(255, 240, 255, 240) : Colors.transparent, child: InkWell( diff --git a/lib/modele/manager_selected_activity.dart b/lib/modele/manager_selected_activity.dart index 7f6fa48..7fbe4e7 100644 --- a/lib/modele/manager_selected_activity.dart +++ b/lib/modele/manager_selected_activity.dart @@ -9,14 +9,38 @@ class ManagerSelectedActivity { List activitySelected = List.empty(growable: true); bool addSelectedActivity(ActivityOfUser activityOfUser) { - // Chercher le contenu du fichier // Regarder si l'entete est la même - // Supprimer l'entete + // C'est de la merde!! + /* + if (activitySelected.isNotEmpty && + activitySelected.first.enteteCSV != activityOfUser.enteteCSV) { + return false; + }*/ + activitySelected.add(activityOfUser); return true; } + bool removeSelectedActivity(String fileUuid) { + for (ActivityOfUser activityOfUser in activitySelected) { + if (activityOfUser.fileUuid == fileUuid) { + activitySelected.remove(activityOfUser); + return true; + } + } + return false; + } + // ---- Function utile ---- // // -- func utile -- // + bool fileNotSelected(String fileUuid) { + for (ActivityOfUser activityOfUser in activitySelected) { + if (activityOfUser.fileUuid == fileUuid) { + return false; + } + } + return true; + } + bool _notNull(int indexActivitySelected, int ligne, int colonne) { if (activitySelected[indexActivitySelected].contentActivity[ligne] [colonne] == @@ -33,21 +57,26 @@ class ManagerSelectedActivity { int firstTimestamp = 0; - for (int i = 0; i < activity.contentActivity.length; i++) { - if (_notNull( - activity.contentActivity, i, activity.enteteCSV["Value_$field"]!)) { - if (firstTimestamp == 0) { - firstTimestamp = activity.contentActivity[i] - [activity.enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!]; + for (int c = 0; c < activitySelected.length; c++) { + for (int i = 0; i < activitySelected[c].contentActivity.length; i++) { + if (_notNull(c, i, activitySelected[c].enteteCSV["Value_$field"]!)) { + if (firstTimestamp == 0) { + firstTimestamp = activitySelected[c].contentActivity[i][ + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!]; + } + result.add(FlSpot( + (((activitySelected[c].contentActivity[i][ + activitySelected[c].enteteCSV[ + "Value_${_managerFile.fieldTimeStamp}"]!]) - + firstTimestamp) ~/ + 100) + .toDouble(), + activitySelected[c] + .contentActivity[i] + [activitySelected[c].enteteCSV["Value_$field"]!] + .toDouble())); } - result.add(FlSpot( - (((activity.contentActivity[i][activity.enteteCSV[ - "Value_${_managerFile.fieldTimeStamp}"]!]) - - firstTimestamp) ~/ - 100) - .toDouble(), - activity.contentActivity[i][activity.enteteCSV["Value_$field"]!] - .toDouble())); } } return result; @@ -58,29 +87,35 @@ class ManagerSelectedActivity { // Retourne le BPM Max (Fichier CSV) int getMaxBpm() { int max = 0; - for (int i = 0; i < activity.contentActivity.length; i++) { - if (_notNull(activity.contentActivity, i, - activity.enteteCSV["Value_${_managerFile.fielBPM}"]!)) { - int valueTmp = activity.contentActivity[i] - [activity.enteteCSV["Value_${_managerFile.fielBPM}"]!]; - if (valueTmp > max) { - max = valueTmp; + for (int c = 0; c < activitySelected.length; c++) { + for (int i = 0; i < activitySelected[c].contentActivity.length; i++) { + if (_notNull(c, i, + activitySelected[c].enteteCSV["Value_${_managerFile.fielBPM}"]!)) { + int valueTmp = activitySelected[c].contentActivity[i] + [activitySelected[c].enteteCSV["Value_${_managerFile.fielBPM}"]!]; + if (valueTmp > max) { + max = valueTmp; + } } } } + return max; } // Retourne le BPM Min (Fichier CSV) int getMinBpm() { int min = 300; - for (int i = 0; i < activity.contentActivity.length; i++) { - if (_notNull(activity.contentActivity, i, - activity.enteteCSV["Value_${_managerFile.fielBPM}"]!)) { - int valueTmp = activity.contentActivity[i] - [activity.enteteCSV["Value_${_managerFile.fielBPM}"]!]; - if (valueTmp < min) { - min = valueTmp; + + for (int c = 0; c < activitySelected.length; c++) { + for (int i = 0; i < activitySelected[c].contentActivity.length; i++) { + if (_notNull(c, i, + activitySelected[c].enteteCSV["Value_${_managerFile.fielBPM}"]!)) { + int valueTmp = activitySelected[c].contentActivity[i] + [activitySelected[c].enteteCSV["Value_${_managerFile.fielBPM}"]!]; + if (valueTmp < min) { + min = valueTmp; + } } } } @@ -91,12 +126,14 @@ class ManagerSelectedActivity { int getAvgBpm() { int somme = 0; int nb = 0; - for (int i = 0; i < contentActivity.length; i++) { - if (_notNull( - contentActivity, i, enteteCSV["Value_${_managerFile.fielBPM}"]!)) { - somme += contentActivity[i][enteteCSV["Value_${_managerFile.fielBPM}"]!] - as int; - nb++; + for (int c = 0; c < activitySelected.length; c++) { + for (int i = 0; i < activitySelected[c].contentActivity.length; i++) { + if (_notNull(c, i, + activitySelected[c].enteteCSV["Value_${_managerFile.fielBPM}"]!)) { + somme += activitySelected[c].contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fielBPM}"]!] as int; + nb++; + } } } return somme ~/ nb; @@ -108,17 +145,27 @@ class ManagerSelectedActivity { double getTotalDistance() { double max = 0; - for (int i = contentActivity.length - 1; i != 0; i--) { - if (_notNull(contentActivity, i, - enteteCSV["Value_${_managerFile.fieldDistance}"]!)) { - double valueTmp = contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldDistance}"]!] - .toDouble(); - if (valueTmp > max) { - max = valueTmp; + + for (int c = 0; c < activitySelected.length; c++) { + for (int i = activitySelected[c].contentActivity.length - 1; + i != 0; + i--) { + if (_notNull( + c, + i, + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldDistance}"]!)) { + double valueTmp = activitySelected[c] + .contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldDistance}"]!] + .toDouble(); + if (valueTmp > max) { + max = valueTmp; + } } } } + return max; } @@ -126,11 +173,18 @@ class ManagerSelectedActivity { // ---------------------- Calories ---------------------- // int getCalorie() { - for (int i = contentActivity.length - 1; i != 0; i--) { - if (_notNull(contentActivity, i, - enteteCSV["Value_${_managerFile.fieldTotalCalories}"]!)) { - return contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldTotalCalories}"]!] as int; + for (int c = 0; c < activitySelected.length; c++) { + for (int i = activitySelected[c].contentActivity.length - 1; + i != 0; + i--) { + if (_notNull( + c, + i, + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldTotalCalories}"]!)) { + return activitySelected[c].contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldTotalCalories}"]!] as int; + } } } return 0; @@ -140,12 +194,20 @@ class ManagerSelectedActivity { // ---------------------- Step ------------------------------// int getTotalSteps() { - for (int i = contentActivity.length - 1; i != 0; i--) { - if (_notNull(contentActivity, i, - enteteCSV["Value_${_managerFile.fieldTotalStep}"]!)) { - return contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldTotalStep}"]!] - .toInt(); + for (int c = 0; c < activitySelected.length; c++) { + for (int i = activitySelected[c].contentActivity.length - 1; + i != 0; + i--) { + if (_notNull( + c, + i, + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldTotalStep}"]!)) { + return activitySelected[c] + .contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldTotalStep}"]!] + .toInt(); + } } } return 0; @@ -155,11 +217,18 @@ class ManagerSelectedActivity { // ------------------------- Time ----------------------------- // int getTotalTime() { - for (int i = contentActivity.length - 1; i != 0; i--) { - if (_notNull(contentActivity, i, - enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!)) { - return contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!]; + for (int c = 0; c < activitySelected.length; c++) { + for (int i = activitySelected[c].contentActivity.length - 1; + i != 0; + i--) { + if (_notNull( + c, + i, + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!)) { + return activitySelected[c].contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!]; + } } } return 0; @@ -171,14 +240,20 @@ class ManagerSelectedActivity { // --- Fichier CSV --- // double getMaxAltitude() { double max = 0; - for (int i = 0; i < contentActivity.length; i++) { - if (_notNull(contentActivity, i, - enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) { - double valueTmp = contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldAltitude}"]!] - .toDouble(); - if (valueTmp > max) { - max = valueTmp; + for (int c = 0; c < activitySelected.length; c++) { + for (int i = 0; i < activitySelected[c].contentActivity.length; i++) { + if (_notNull( + c, + i, + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) { + double valueTmp = activitySelected[c] + .contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldAltitude}"]!] + .toDouble(); + if (valueTmp > max) { + max = valueTmp; + } } } } @@ -188,14 +263,20 @@ class ManagerSelectedActivity { // --- Fichier CSV --- // double getMinAltitude() { double min = 5000; - for (int i = 0; i < contentActivity.length; i++) { - if (_notNull(contentActivity, i, - enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) { - double valueTmp = contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldAltitude}"]!] - .toDouble(); - if (valueTmp < min) { - min = valueTmp; + for (int c = 0; c < activitySelected.length; c++) { + for (int i = 0; i < activitySelected[c].contentActivity.length; i++) { + if (_notNull( + c, + i, + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) { + double valueTmp = activitySelected[c] + .contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldAltitude}"]!] + .toDouble(); + if (valueTmp < min) { + min = valueTmp; + } } } } @@ -211,23 +292,35 @@ class ManagerSelectedActivity { List result = List.empty(growable: true); int firstTimestamp = 0; - for (int i = 0; i < contentActivity.length; i++) { - if (_notNull(contentActivity, i, - enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!) && - notNull(contentActivity, i, - enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) { - if (firstTimestamp == 0) { - firstTimestamp = contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!]; + for (int c = 0; c < activitySelected.length; c++) { + for (int i = 0; i < activitySelected[c].contentActivity.length; i++) { + if (_notNull( + c, + i, + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!) && + _notNull( + c, + i, + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) { + if (firstTimestamp == 0) { + firstTimestamp = activitySelected[c].contentActivity[i][ + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!]; + } + result.add(DataPoint( + (((activitySelected[c].contentActivity[i][ + activitySelected[c].enteteCSV[ + "Value_${_managerFile.fieldTimeStamp}"]!]) - + firstTimestamp) ~/ + 100) + .toDouble(), + activitySelected[c] + .contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldSpeed}"]!] + .toDouble())); } - result.add(DataPoint( - (((contentActivity[i][enteteCSV[ - "Value_${_managerFile.fieldTimeStamp}"]!]) - - firstTimestamp) ~/ - 100) - .toDouble(), - contentActivity[i][enteteCSV["Value_${_managerFile.fieldSpeed}"]!] - .toDouble())); } } return result; @@ -236,14 +329,21 @@ class ManagerSelectedActivity { // Retourne la Speed Max (Fichier CSV) double getMaxSpeed() { double max = 0.00; - for (int i = 0; i < contentActivity.length; i++) { - if (_notNull( - contentActivity, i, enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) { - double valueTmp = contentActivity[i] - [enteteCSV["Value_${_managerFile.fieldSpeed}"]!] - .toDouble(); - if (valueTmp > max) { - max = valueTmp; + + for (int c = 0; c < activitySelected.length; c++) { + for (int i = 0; i < activitySelected[c].contentActivity.length; i++) { + if (_notNull( + c, + i, + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) { + double valueTmp = activitySelected[c] + .contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldSpeed}"]!] + .toDouble(); + if (valueTmp > max) { + max = valueTmp; + } } } } @@ -254,14 +354,21 @@ class ManagerSelectedActivity { double getAvgSpeed() { double somme = 0; int nb = 0; - for (int i = 0; i < contentActivity.length; i++) { - if (_notNull( - contentActivity, i, enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) { - somme += - contentActivity[i][enteteCSV["Value_${_managerFile.fieldSpeed}"]!]; - nb++; + + for (int c = 0; c < activitySelected.length; c++) { + for (int i = 0; i < activitySelected[c].contentActivity.length; i++) { + if (_notNull( + c, + i, + activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) { + somme += activitySelected[c].contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldSpeed}"]!]; + nb++; + } } } + return somme / nb; } diff --git a/lib/view/activity/mobile/mobile_list_activity.dart b/lib/view/activity/mobile/mobile_list_activity.dart index 886a942..a3c50c7 100644 --- a/lib/view/activity/mobile/mobile_list_activity.dart +++ b/lib/view/activity/mobile/mobile_list_activity.dart @@ -27,14 +27,10 @@ class _MobileListActivity extends State { FilePickerResult? result; final IDataStrategy _strategy = RequestApi(); final ListActivityUtile _utile = ListActivityUtile(); - int firstActivityIndex = 0; Future deleteFileOnBDD(String token, String fileUuid) async { Tuple2 result = await _strategy.deleteFile(token, fileUuid); if (!result.item1) { - print(fileUuid); - print("msg d'erreur"); - print(result.item2); return false; } return true; @@ -142,20 +138,8 @@ class _MobileListActivity extends State { .listActivity[index]; var activityMap = activityObj.toMap(); - bool isFirstActivity = false; - if (index == firstActivityIndex) { - isFirstActivity = true; - } return InkWell( - onTap: () { - setState(() { - firstActivityIndex = index; - }); - Provider.of(context, listen: false) - .removeActivity(activityObj); - Provider.of(context, listen: false) - .insertActivity(0, activityObj); - }, + onTap: () {}, child: WorkoutRow( wObj: activityMap, onDelete: () async { @@ -167,15 +151,31 @@ class _MobileListActivity extends State { .removeActivity(activityObj); } }, - onClick: () { + onClick: () async { + if (!Provider.of(context, listen: false) + .managerSelectedActivity + .fileNotSelected(activityObj.fileUuid)) { + Provider.of(context, listen: false) + .managerSelectedActivity + .removeSelectedActivity( + activityObj.fileUuid); + 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); - _utile.getContentActivity( - context, activityObj); }, - isFirstActivity: isFirstActivity, + isSelected: !Provider.of(context) + .managerSelectedActivity + .fileNotSelected(activityObj.fileUuid), ), ); }, diff --git a/lib/view/activity/web/web_list_activity.dart b/lib/view/activity/web/web_list_activity.dart index 9bfd1a5..9abfca7 100644 --- a/lib/view/activity/web/web_list_activity.dart +++ b/lib/view/activity/web/web_list_activity.dart @@ -23,28 +23,8 @@ class _WebListActivityState extends State { FilePickerResult? result; IDataStrategy strategy = RequestApi(); final ListActivityUtile _utile = ListActivityUtile(); - int firstActivityIndex = 0; final IDataStrategy _strategy = RequestApi(); - /* - void readFile(html.File file) 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); - Provider.of(context, listen: false).addActivity( - ActivityOfUser("Date random", "${file.name} Categorie", "", "")); - Provider.of(context, listen: false) - .listActivity - .last - .contentActivity = result; - } - }); - }*/ - Future deleteFileOnBDD(String token, String fileUuid) async { Tuple2 result = await _strategy.deleteFile(token, fileUuid); if (!result.item1) { @@ -62,7 +42,6 @@ class _WebListActivityState extends State { reader.onLoadEnd.listen((event) async { if (reader.readyState == html.FileReader.DONE) { - print("donne"); Uint8List bytes = reader.result as Uint8List; Tuple2 resultAdd = await _utile.addFile(bytes, file.name, token); @@ -165,20 +144,16 @@ class _WebListActivityState extends State { Provider.of(context, listen: true) .listActivity[index]; var activityMap = activityObj.toMap(); - - bool isFirstActivity = false; - if (index == firstActivityIndex) { - isFirstActivity = true; - } return InkWell( onTap: () { + /* setState(() { firstActivityIndex = index; }); Provider.of(context, listen: false) .removeActivity(activityObj); Provider.of(context, listen: false) - .insertActivity(0, activityObj); + .insertActivity(0, activityObj);*/ }, child: WorkoutRow( wObj: activityMap, @@ -199,7 +174,9 @@ class _WebListActivityState extends State { _utile.getContentActivity( context, activityObj); }, - isFirstActivity: isFirstActivity, + isSelected: Provider.of(context) + .managerSelectedActivity + .fileNotSelected(activityObj.fileUuid), ), ); },