workout categorie
continuous-integration/drone/push Build is passing Details

pull/4/head
Enzo 1 year ago
parent 6ee3a9cb46
commit 2941a29a5c

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.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/activity.dart';
import 'package:smartfit_app_mobile/modele/manager_file.dart'; import 'package:smartfit_app_mobile/modele/manager_file.dart';
import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/modele/user.dart';
@ -20,6 +21,48 @@ class _ListActivityWidget extends State<ListActivityWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
void onClick(ActivityOfUser activityObj) async {
if (!Provider.of<User>(context, listen: false)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid)) {
Provider.of<User>(context, listen: false)
.managerSelectedActivity
.removeSelectedActivity(activityObj.fileUuid);
setState(() {});
return;
}
Tuple2<bool, String> result =
await _utile.getContentActivity(context, activityObj);
if (!result.item1) {
return;
}
Provider.of<User>(context, listen: false).removeActivity(activityObj);
Provider.of<User>(context, listen: false).insertActivity(0, activityObj);
}
void onDelete(ActivityOfUser activityObj) async {
if (await _utile.deleteFileOnBDD(
Provider.of<User>(context, listen: false).token,
activityObj.fileUuid)) {
if (!Provider.of<User>(context, listen: false)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid)) {
Provider.of<User>(context, listen: false)
.managerSelectedActivity
.removeSelectedActivity(activityObj.fileUuid);
}
Provider.of<User>(context, listen: false).removeActivity(activityObj);
}
}
bool isSelected(ActivityOfUser activityObj) {
return !Provider.of<User>(context)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid);
}
return Material( return Material(
color: Colors.transparent, color: Colors.transparent,
child: ListView.builder( child: ListView.builder(
@ -34,57 +77,28 @@ class _ListActivityWidget extends State<ListActivityWidget> {
// -- Si categorie == marche // -- Si categorie == marche
if (activityObj.category == managerFile.marche) { if (activityObj.category == managerFile.marche) {
activityMap = activityObj.toMapWalking(); activityMap = activityObj.toMapWalking();
return InkWell(
onTap: () {},
child: WorkoutRowWalking(
wObj: activityMap,
onDelete: () => onDelete(activityObj),
onClick: () => onClick(activityObj),
isSelected: isSelected(activityObj),
),
);
} else { } else {
// -- Default -- // // -- Default -- //
activityMap = activityObj.toMapGeneric(); activityMap = activityObj.toMapGeneric();
}
return InkWell( return InkWell(
onTap: () {}, onTap: () {},
child: WorkoutRow( child: WorkoutRowGeneric(
wObj: activityMap, wObj: activityMap,
onDelete: () async { onDelete: () => onDelete(activityObj),
if (await _utile.deleteFileOnBDD( onClick: () => onClick(activityObj),
Provider.of<User>(context, listen: false).token, isSelected: isSelected(activityObj),
activityObj.fileUuid)) {
if (!Provider.of<User>(context, listen: false)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid)) {
Provider.of<User>(context, listen: false)
.managerSelectedActivity
.removeSelectedActivity(activityObj.fileUuid);
}
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
}
},
onClick: () async {
if (!Provider.of<User>(context, listen: false)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid)) {
Provider.of<User>(context, listen: false)
.managerSelectedActivity
.removeSelectedActivity(activityObj.fileUuid);
setState(() {});
return;
}
Tuple2<bool, String> result =
await _utile.getContentActivity(context, activityObj);
if (!result.item1) {
return;
}
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
Provider.of<User>(context, listen: false)
.insertActivity(0, activityObj);
},
isSelected: !Provider.of<User>(context)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid),
), ),
); );
}
}, },
), ),
); );

@ -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,
),
),
],
),
],
),
),
),
),
),
);
}
}

@ -1,14 +1,15 @@
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:flutter/material.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 Map wObj;
final bool isSelected; final bool isSelected;
final VoidCallback onDelete; final VoidCallback onDelete;
final VoidCallback onClick; final VoidCallback onClick;
const WorkoutRow({ const WorkoutRowWalking({
Key? key, Key? key,
required this.wObj, required this.wObj,
required this.onDelete, required this.onDelete,
@ -74,14 +75,14 @@ class WorkoutRow extends StatelessWidget {
), ),
), ),
Text( Text(
"Temps : ${wObj["time"].toString()}", "Temps : ${Convertisseur.secondeIntoMinute(wObj["time"]).toStringAsFixed(2)} m",
style: TextStyle( style: TextStyle(
color: TColor.black, color: TColor.black,
fontSize: 12, fontSize: 12,
), ),
), ),
Text( Text(
"Dénivelé positif : ${wObj["DenivelePositif"].toString()}", "Vitesse moyenne : ${Convertisseur.msIntoKmh(wObj["VitesseAvg"]).toStringAsFixed(2)} km/h",
style: TextStyle( style: TextStyle(
color: TColor.black, color: TColor.black,
fontSize: 12, fontSize: 12,

@ -3,7 +3,7 @@ import 'package:smartfit_app_mobile/modele/activity_info/activity_info.dart';
class ActivityOfUser { class ActivityOfUser {
final ActivityInfo _activityInfo; final ActivityInfo _activityInfo;
// A afficher // A afficher
final String _categorie; final String _category;
final String _fileUuid; final String _fileUuid;
final String _nameFile; final String _nameFile;
// ------------ // // ------------ //
@ -14,7 +14,7 @@ class ActivityOfUser {
String get fileUuid => _fileUuid; String get fileUuid => _fileUuid;
String get nameFile => _nameFile; String get nameFile => _nameFile;
String get category => _categorie; String get category => _category;
ActivityInfo get activityInfo => _activityInfo; ActivityInfo get activityInfo => _activityInfo;
Map<String, int> get enteteCSV => _enteteCSV; Map<String, int> get enteteCSV => _enteteCSV;
@ -29,9 +29,9 @@ class ActivityOfUser {
} }
ActivityOfUser( ActivityOfUser(
this._activityInfo, this._categorie, this._fileUuid, this._nameFile) { this._activityInfo, this._category, this._fileUuid, this._nameFile) {
// Mettre dans une fonction appart // Mettre dans une fonction appart
if (_categorie == "Walking") { if (_category == "Walking") {
_imageName = "assets/img/workout1.svg"; _imageName = "assets/img/workout1.svg";
} else { } else {
// Mettre des conditions pour d'autre type d'activité // Mettre des conditions pour d'autre type d'activité
@ -43,7 +43,7 @@ class ActivityOfUser {
Map<String, dynamic> toMapGeneric() { Map<String, dynamic> toMapGeneric() {
Map<String, dynamic> map = { Map<String, dynamic> map = {
'categorie': _categorie, 'categorie': _category,
'image': _imageName, 'image': _imageName,
'date': _activityInfo.startTime, 'date': _activityInfo.startTime,
'time': _activityInfo.timeOfActivity, 'time': _activityInfo.timeOfActivity,

@ -319,7 +319,9 @@ class ActivityInfo {
// -- Altitude -- // // -- Altitude -- //
"AltitudeMax": altitudeMax, "AltitudeMax": altitudeMax,
"AltitudeMin": altitudeMin, "AltitudeMin": altitudeMin,
"AltitudeAvg": altitudeAvg "AltitudeAvg": altitudeAvg,
// -- Vitesse -- //
"VitesseAvg": vitesseAvg
}; };
} }
@ -330,30 +332,106 @@ class ActivityInfo {
return; return;
} }
// -- Ligne session -- // // -- Ligne session -- //
try {
startTime = DateTime.parse(map["startTime"]); startTime = DateTime.parse(map["startTime"]);
timeOfActivity = map["timeOfActivity"].toDouble(); } catch (e) {
print("Impossible de recup -> startTime");
}
try {
timeOfActivity = map["timeOfActivity"];
} catch (e) {
print("Impossible de recup -> timeOfActivity");
}
try {
distance = map["distance"].toDouble(); distance = map["distance"].toDouble();
calories = map["calories"].toInt(); } catch (e) {
steps = map["steps"].toInt(); 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 -- // // -- BPM -- //
try {
bpmAvg = map["bpmAvg"]; bpmAvg = map["bpmAvg"];
} catch (e) {
print("Impossible de recup -> ");
}
try {
bpmMax = map["bpmMax"]; bpmMax = map["bpmMax"];
} catch (e) {
print("Impossible de recup -> ");
}
try {
bpmMin = map["bpmMin"]; bpmMin = map["bpmMin"];
} catch (e) {
print("Impossible de recup -> ");
}
// -- Denivelé -- // // -- Denivelé -- //
deniveleNegatif = map["deniveleNegatif"].toDouble(); try {
denivelePositif = map["denivelePositif"].toDouble(); deniveleNegatif = map["deniveleNegatif"];
} catch (e) {
print("Impossible de recup -> deniveleNegatif");
}
try {
denivelePositif = map["denivelePositif"];
} catch (e) {
print("Impossible de recup -> denivelePositif");
}
// -- Altitude -- // // -- Altitude -- //
altitudeMax = map["altitudeMax"].toDouble(); try {
altitudeMin = map["altitudeMin"].toDouble(); altitudeMax = map["altitudeMax"];
altitudeAvg = map["altitudeAvg"].toDouble(); } 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 -- // // -- Température -- //
temperatureMax = map["temperatureMax"].toInt(); try {
temperatureMin = map["temperatureMin"].toInt(); temperatureMax = map["temperatureMax"];
temperatureAvg = map["temperatureAvg"].toInt(); } 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 -- // // -- Vitesse -- //
try {
vitesseMax = map["vitesseMax"].toDouble(); vitesseMax = map["vitesseMax"].toDouble();
} catch (e) {
print("Impossible de recup -> vitesseMax");
}
try {
vitesseMin = map["vitesseMin"].toDouble(); vitesseMin = map["vitesseMin"].toDouble();
} catch (e) {
print("Impossible de recup -> vitesseMin");
}
try {
vitesseAvg = map["vitesseAvg"].toDouble(); vitesseAvg = map["vitesseAvg"].toDouble();
} catch (e) {
print("Impossible de recup -> vitesseAvg");
}
} }
// -- Ecriture -- // // -- Ecriture -- //
@ -379,7 +457,7 @@ class ActivityInfo {
'vitesseMin': vitesseMin, 'vitesseMin': vitesseMin,
'vitesseAvg': vitesseAvg, 'vitesseAvg': vitesseAvg,
// Ligne session // Ligne session
'startTime': startTime.toString(), 'startTime': startTime.toIso8601String(),
'timeOfActivity': timeOfActivity, 'timeOfActivity': timeOfActivity,
'distance': distance, 'distance': distance,
'calories': calories, 'calories': calories,

@ -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;
}
}

@ -113,7 +113,7 @@ class ManagerFile {
categorie = categorie =
_getCategoryById(int.parse(_getXfromListe(_sport, ligneSession))); _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) { switch (categorie) {
case (_marche): case (_marche):
fieldAllowed = allowedFieldWalking; fieldAllowed = allowedFieldWalking;
@ -143,7 +143,6 @@ class ManagerFile {
info.calories = int.parse(_getXfromListe(_totalCalories, ligneSession)); info.calories = int.parse(_getXfromListe(_totalCalories, ligneSession));
info.steps = int.parse(_getXfromListe(_totalStep, ligneSession)); info.steps = int.parse(_getXfromListe(_totalStep, ligneSession));
// ----------------------------------------------------- // // ----------------------------------------------------- //
// -- Extraire les données en fonction de la catégorie -- // // -- Extraire les données en fonction de la catégorie -- //
switch (categorie) { switch (categorie) {
case (_marche): case (_marche):
@ -154,6 +153,7 @@ class ManagerFile {
info.getDataGeneric(csvData); info.getDataGeneric(csvData);
} }
//print("Fin : ManagerFile -> convertBytesFitFileIntoCSVListAndGetInfo ");
return Tuple4(true, csvData, info, categorie); return Tuple4(true, csvData, info, categorie);
} }

@ -81,6 +81,8 @@ class ListActivityUtile {
resultData.item4, resultData.item4,
resultData.item3.startTime, resultData.item3.startTime,
resultData.item3); resultData.item3);
// resultData.item4 == category
// resultData.item3 == ActivityInfo
if (result.item1 == false) { if (result.item1 == false) {
return Tuple2(false, result.item2); return Tuple2(false, result.item2);
} }

Loading…
Cancel
Save