methode calcul csv

pull/4/head
Enzo 1 year ago
parent b99b62dc2f
commit 5cdd70de5b

@ -4,4 +4,4 @@ enzo@gmail.com
toto
toto@gmail.com
1234
toto

@ -9,7 +9,8 @@ class Info extends StatelessWidget {
Widget build(BuildContext context) {
String distance = Provider.of<User>(context, listen: false)
.listActivity[0]
.getTotalDistance();
.getTotalDistance()
.toString();
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,

@ -17,7 +17,8 @@ class Stats extends StatelessWidget {
.toString();
String time = Provider.of<User>(context, listen: false)
.listActivity[0]
.getTotalTime();
.getTotalTime()
.toString();
return Column(
children: [

@ -9,7 +9,8 @@ class Steps extends StatelessWidget {
Widget build(BuildContext context) {
String steps = Provider.of<User>(context, listen: false)
.listActivity[0]
.getTotalSteps();
.getTotalSteps()
.toString();
return Padding(
padding: const EdgeInsets.symmetric(vertical: 20),
child: Column(

@ -11,15 +11,15 @@ class ActivityOfUser {
late String _nameFile;
// ------------ //
late String _imageName;
late List<List<String>> _contentActivity;
late List<List<dynamic>> _contentActivity;
Map<String, int> enteteCSV = {};
// ManagerFile for the field
final ManagerFile _managerFile = ManagerFile();
// -- Getter/Setter -- //
List<List<String>> get contentActivity => _contentActivity;
set contentActivity(List<List<String>> content) {
List<List<dynamic>> get contentActivity => _contentActivity;
set contentActivity(List<List<dynamic>> content) {
_contentActivity = content;
for (int i = 0; i < content.first.length; i++) {
enteteCSV.addAll({content.first[i]: i});
@ -46,8 +46,41 @@ class ActivityOfUser {
}
}
// ----------------- BPM ------------------ //
// -- func utile -- //
bool notNull(int ligne, int colonne) {
if (_contentActivity[ligne][colonne] == "null") {
return false;
}
return true;
}
// ----------------- X WithTime ------------ //
List<FlSpot> getXWithTime(String field) {
List<FlSpot> result = List.empty(growable: true);
int firstTimestamp = 0;
for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_$field"]!)) {
if (firstTimestamp == 0) {
firstTimestamp = contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!];
}
result.add(FlSpot(
(((contentActivity[i][enteteCSV[
"Value_${_managerFile.fieldTimeStamp}"]!]) -
firstTimestamp) ~/
100)
.toDouble(),
contentActivity[i][enteteCSV["Value_$field"]!].toDouble()));
}
}
return result;
}
// ----------------- BPM ------------------ //
/*
// Retourne le Temps+BPM (Fichier CSV)
List<FlSpot> getHeartRateWithTime() {
List<FlSpot> result = List.empty(growable: true);
@ -70,7 +103,7 @@ class ActivityOfUser {
[enteteCSV["Value_${_managerFile.fielBPM}"]!])));
}
return result;
}
}*/
/*
List<FlSpot> getHeartRateWithTime() {
@ -101,16 +134,17 @@ class ActivityOfUser {
// Retourne le BPM Max (Fichier CSV)
int getMaxBpm() {
int max = int.parse(
contentActivity.first[enteteCSV["Value_${_managerFile.fielBPM}"]!]);
for (int i = 1; i < contentActivity.length; i++) {
int valueTmp = int.parse(
contentActivity[i][enteteCSV["Value_${_managerFile.fielBPM}"]!]);
if (valueTmp > max) {
max = valueTmp;
int max = 0;
for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_${_managerFile.fielBPM}"]!)) {
int valueTmp =
contentActivity[i][enteteCSV["Value_${_managerFile.fielBPM}"]!];
if (valueTmp > max) {
max = valueTmp;
}
}
}
return 0;
return max;
}
/*
@ -122,7 +156,22 @@ class ActivityOfUser {
}
return 0;
}*/
// Retourne le BPM Min (Fichier CSV)
int getMinBpm() {
int min = 300;
for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_${_managerFile.fielBPM}"]!)) {
int valueTmp =
contentActivity[i][enteteCSV["Value_${_managerFile.fielBPM}"]!];
if (valueTmp < min) {
min = valueTmp;
}
}
}
return min;
}
/*
int getMinBpm() {
for (int i = 0; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "min_heart_rate") {
@ -130,8 +179,22 @@ class ActivityOfUser {
}
}
return 0;
}*/
// Retourne le BPM avg (Fichier CSV)
int getAvgBpm() {
int somme = 0;
int nb = 0;
for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_${_managerFile.fielBPM}"]!)) {
somme += contentActivity[i][enteteCSV["Value_${_managerFile.fielBPM}"]!]
as int;
nb++;
}
}
return somme ~/ nb;
}
/*
int getAvgBpm() {
for (int i = 0; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "avg_heart_rate") {
@ -139,7 +202,7 @@ class ActivityOfUser {
}
}
return 0;
}
}*/
// -------------------------- FIN BPM ---------------------- //
/*
// ---------------------- Distance ---------------------- //
@ -159,16 +222,23 @@ class ActivityOfUser {
}
return result;
}
String getTotalDistance() {
for (int i = 0; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "total_distance") {
return _contentActivity[_dataSession][i + 1].toString();
*/
double getTotalDistance() {
double max = 0;
for (int i = contentActivity.length - 1; i != 0; i--) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldDistance}"]!)) {
double valueTmp = contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldDistance}"]!];
if (valueTmp > max) {
max = valueTmp;
}
}
}
return "null";
return max;
}
/*
// ---------------------- FIN Distance ---------------------- //
// ---------------------- Calories ---------------------- //
@ -188,8 +258,8 @@ class ActivityOfUser {
}
}
return result;
}
}*/
/*
String getTotalCalorie() {
for (int i = 0; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "total_calories") {
@ -197,11 +267,16 @@ class ActivityOfUser {
}
}
return "null";
}*/
String getTotalCalorie() {
return "NULL";
}
// ---------------------- FIN Calories ---------------------- //
// ---------------------- Step ------------------------------//
/*
String getTotalSteps() {
for (int i = 0; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "total_strides") {
@ -209,10 +284,21 @@ class ActivityOfUser {
}
}
return "null";
}*/
int getTotalSteps() {
for (int i = contentActivity.length; i != 0; i--) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldTotalStep}"]!)) {
return contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldTotalStep}"]!];
}
}
return 0;
}
// ----------------------- FIN Step ------------------------ //
// ------------------------- Time ----------------------------- //
/*
String getTotalTime() {
for (int i = 0; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "total_elapsed_time") {
@ -220,10 +306,21 @@ class ActivityOfUser {
}
}
return "null";
}*/
int getTotalTime() {
for (int i = contentActivity.length - 1; i != 0; i--) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!)) {
return contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!];
}
}
return 0;
}
// ---------------------------- FIN time -------------------- //
// ---------------------------------------- Altitude -------------------- //
/*
List<FlSpot> getAltitudeWithTime() {
List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0;
@ -239,8 +336,23 @@ class ActivityOfUser {
}
}
return result;
}
}*/
// --- Fichier CSV --- //
double getMaxAltitude() {
double max = 0;
for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) {
double valueTmp = contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldAltitude}"]!];
if (valueTmp > max) {
max = valueTmp;
}
}
}
return max;
}
/*
double getMaxAltitude() {
for (int i = 4; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "max_altitude") {
@ -248,8 +360,23 @@ class ActivityOfUser {
}
}
return 0.0;
}
}*/
// --- Fichier CSV --- //
double getMinAltitude() {
double min = 5000;
for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldAltitude}"]!)) {
double valueTmp = contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldAltitude}"]!];
if (valueTmp < min) {
min = valueTmp;
}
}
}
return min;
}
/*
double getMinAltitude() {
for (int i = 4; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "min_altitude") {
@ -257,7 +384,9 @@ class ActivityOfUser {
}
}
return 0.0;
}
}*/
/*
// -------------------------- FIN altitude ---------------------- //
// -------------------------- Speed ---------------------- //
@ -283,8 +412,33 @@ class ActivityOfUser {
}
}
return result;
}
}*/
// -- CSV -- //
List<DataPoint> getSpeedWithTimeActivity() {
List<DataPoint> result = List.empty(growable: true);
int firstTimestamp = 0;
for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!) &&
notNull(i, enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) {
if (firstTimestamp == 0) {
firstTimestamp = contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!];
}
result.add(DataPoint(
(((contentActivity[i][enteteCSV[
"Value_${_managerFile.fieldTimeStamp}"]!]) -
firstTimestamp) ~/
100)
.toDouble(),
contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldSpeed}"]!]));
}
}
return result;
}
/*
List<DataPoint> getSpeedWithTimeActivity() {
List<DataPoint> result = List.empty(growable: true);
int firtTimeStamp = 0;
@ -308,8 +462,23 @@ class ActivityOfUser {
}
}
return result;
}
}*/
// Retourne la Speed Max (Fichier CSV)
double getMaxSpeed() {
double max = 0.00;
for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) {
double valueTmp =
contentActivity[i][enteteCSV["Value_${_managerFile.fieldSpeed}"]!];
if (valueTmp > max) {
max = valueTmp;
}
}
}
return max;
}
/*
double getMaxSpeed() {
for (int i = 4; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "max_speed") {
@ -317,8 +486,22 @@ class ActivityOfUser {
}
}
return 0.0;
}
}*/
// Retourne avg Max (Fichier CSV)
double getAvgSpeed() {
double somme = 0;
int nb = 0;
for (int i = 0; i < contentActivity.length; i++) {
if (notNull(i, enteteCSV["Value_${_managerFile.fieldSpeed}"]!)) {
somme +=
contentActivity[i][enteteCSV["Value_${_managerFile.fieldSpeed}"]!];
nb++;
}
}
return somme / nb;
}
/*
double getAvgSpeed() {
for (int i = 4; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "avg_speed") {
@ -326,12 +509,31 @@ class ActivityOfUser {
}
}
return 0.0;
}
}*/
// -------------------------- FIN Speed ---------------------- //
// -------------------------- Localisation ------------------- //
// Retourne les positions (Fichier CSV)
List<LatLng> getPosition() {
List<LatLng> list = List.empty(growable: true);
for (int i = 0; i < contentActivity.length; i++) {
if (notNull(
i, enteteCSV["Value_${_managerFile.fieldPositionLatitude}"]!) &&
notNull(
i, enteteCSV["Value_${_managerFile.fieldPositionLongitude}"]!)) {
list.add(LatLng(
contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldPositionLatitude}"]!],
contentActivity[i]
[enteteCSV["Value_${_managerFile.fieldPositionLongitude}"]!]));
}
}
return list;
}
/*
List<LatLng> getPosition() {
List<LatLng> list = List.empty(growable: true);

@ -11,12 +11,18 @@ class ManagerFile {
final String _fieldPositionLongitude = "position_long";
final String _fieldDistance = "distance";
final String _fieldBPM = "heart_rate";
final String _fieldSpeed = "speed";
final String _fieldAltitude = "altitude";
final String _fieldTotalStep = "total_strides";
// -- Getter field
String get fieldTimeStamp => _fieldTimestamp;
String get fieldPositionLatitude => _fieldPositionLatitue;
String get fieldPositionLongitude => _fieldPositionLongitude;
String get fieldDistance => _fieldDistance;
String get fielBPM => _fieldBPM;
String get fieldSpeed => _fieldSpeed;
String get fieldAltitude => _fieldAltitude;
String get fieldTotalStep => _fieldTotalStep;
List<String> allowedFieldWalking = List.empty(growable: true);
@ -26,7 +32,10 @@ class ManagerFile {
_fieldPositionLatitue,
_fieldPositionLongitude,
_fieldDistance,
_fieldBPM
_fieldBPM,
_fieldSpeed,
_fieldAltitude,
_fieldTotalStep
];
}
@ -92,7 +101,7 @@ class ManagerFile {
}
// -- Read the byte of file CSV -- //
List<List<String>> convertByteIntoCSV(Uint8List bytes) {
List<List<dynamic>> convertByteIntoCSV(Uint8List bytes) {
return const CsvToListConverter().convert(utf8.decode(bytes));
}

@ -2,16 +2,23 @@ import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.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/home_view/data_home_view.dart';
class HomeViewUtil {
DataHomeView initData(BuildContext context) {
ActivityOfUser activity = Provider.of<User>(context).listActivity[0];
ManagerFile _managerFile = ManagerFile();
List<FlSpot> bpmSecondes = activity.getHeartRateWithTime();
List<FlSpot> vitesseSecondes = activity.getSpeedWithTime();
List<FlSpot> altitudeSeconde = activity.getAltitudeWithTime();
ActivityOfUser activity = Provider.of<User>(context).listActivity[0];
//List<FlSpot> bpmSecondes = activity.getHeartRateWithTime();
List<FlSpot> bpmSecondes = activity.getXWithTime(_managerFile.fielBPM);
//List<FlSpot> vitesseSecondes = activity.getSpeedWithTime();
List<FlSpot> vitesseSecondes =
activity.getXWithTime(_managerFile.fieldSpeed);
//List<FlSpot> altitudeSeconde = activity.getAltitudeWithTime();
List<FlSpot> altitudeSeconde =
activity.getXWithTime(_managerFile.fieldAltitude);
List<FlSpot> bpmSecondes2 = List.from(bpmSecondes);

@ -28,8 +28,9 @@ class ListActivityUtile {
Provider.of<User>(context, listen: false).listActivity[0].contentActivity =
await _managerFile.readFitFileWhithFile(file);
*/
Provider.of<User>(context, listen: false).listActivity[0].contentActivity =
_managerFile.convertByteIntoCSV(result.item2);
List.from(_managerFile.convertByteIntoCSV(result.item2));
}
Future<void> getContentOnTheFirstFileWeb(BuildContext context) async {
@ -41,7 +42,8 @@ class ListActivityUtile {
//print(result);
return;
}
/*
Provider.of<User>(context, listen: false).listActivity[0].contentActivity =
_managerFile.convertByteIntoCSV(result.item2);
_managerFile.convertByteIntoCSV(result.item2);*/
}
}

@ -70,14 +70,12 @@ class _MobileListActivity extends State<MobileListActivity> {
String csvString = const ListToCsvConverter().convert(csv);
Uint8List byteCSV = Uint8List.fromList(utf8.encode(csvString));
// --- Save Local
// --- Api
String categoryActivity = filename.split("_").first.toLowerCase();
String dateActivity = filename.split("_")[1].split("T").first;
Tuple2<bool, String> result = await _strategy.uploadFileByte(
token, byteCSV, filename, categoryActivity, dateActivity);
if (result.item1 == false) {
// Afficher msg d'erreur
print("Upload - ${result.item2}");
@ -87,7 +85,9 @@ class _MobileListActivity extends State<MobileListActivity> {
}
void getFiles(String token) async {
bool check = false;
Tuple2 result = await _strategy.getFiles(token);
if (result.item1 == false) {
print("GetFiles - ${result.item2}");
// Afficher une message d'erreur
@ -101,8 +101,11 @@ class _MobileListActivity extends State<MobileListActivity> {
element["category"].toString(),
element["uuid"].toString(),
element["filename"].toString()));
check = true;
}
if (check) {
await _utile.getContentOnTheFirstFileMobile(context);
}
await _utile.getContentOnTheFirstFileMobile(context);
return;
}

@ -25,6 +25,8 @@ class _WebListActivityState extends State<WebListActivity> {
IDataStrategy strategy = RequestApi();
final ListActivityUtile _utile = ListActivityUtile();
int firstActivityIndex = 0;
final IDataStrategy _strategy = RequestApi();
/*
void readFile(html.File file) async {
ManagerFile x = ManagerFile();
@ -44,6 +46,17 @@ class _WebListActivityState extends State<WebListActivity> {
});
}*/
Future<bool> deleteFileOnBDD(String token, String fileUuid) async {
Tuple2<bool, String> result = await _strategy.deleteFile(token, fileUuid);
if (!result.item1) {
print(fileUuid);
print("msg d'erreur");
print(result.item2);
return false;
}
return true;
}
void addFile(html.File file) async {
final reader = html.FileReader();
reader.readAsArrayBuffer(file);
@ -74,6 +87,7 @@ class _WebListActivityState extends State<WebListActivity> {
// -- On doit garder cet fonction dans la page pour pouvoir afficher les msg -- //
void getFiles() async {
bool check = false;
Tuple2 result = await strategy
.getFiles(Provider.of<User>(context, listen: false).token);
if (result.item1 == false) {
@ -89,15 +103,17 @@ class _WebListActivityState extends State<WebListActivity> {
element["category"].toString(),
element["uuid"].toString(),
element["filename"].toString()));
check = true;
}
if (check) {
await _utile.getContentOnTheFirstFileWeb(context);
}
await _utile.getContentOnTheFirstFileWeb(context);
return;
}
@override
Widget build(BuildContext context) {
var media = MediaQuery.of(context).size;
print("tttt");
return Scaffold(
backgroundColor: TColor.white,
body: SingleChildScrollView(
@ -194,9 +210,14 @@ class _WebListActivityState extends State<WebListActivity> {
},
child: WorkoutRow(
wObj: activityMap,
onDelete: () {
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
onDelete: () async {
if (await deleteFileOnBDD(
Provider.of<User>(context, listen: false)
.token,
activityObj.fileUuid)) {
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
}
},
onClick: () {
Provider.of<User>(context, listen: false)

@ -28,6 +28,7 @@ class _MobileHomeView extends State<MobileHomeView> {
int maxBpm = context.watch<User>().listActivity[0].getMaxBpm();
int minBpm = context.watch<User>().listActivity[0].getMinBpm();
int avgBpm = context.watch<User>().listActivity[0].getAvgBpm();
// -- Altitude -- //
double minAltitude = context.watch<User>().listActivity[0].getMinAltitude();
double maxAltitude = context.watch<User>().listActivity[0].getMaxAltitude();
@ -35,7 +36,6 @@ class _MobileHomeView extends State<MobileHomeView> {
// -- Speed -- //
double maxSpeed = context.watch<User>().listActivity[0].getMaxSpeed();
double avgSpeed = context.watch<User>().listActivity[0].getAvgSpeed();
data = HomeViewUtil().initData(context);
return Scaffold(

Loading…
Cancel
Save