graph altitude

profile
Enzo 1 year ago
parent 8fe9101600
commit ae4610ec41

@ -0,0 +1,67 @@
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';
class GraphAltitudeByTime extends StatefulWidget {
final Size media;
final DataHomeView data;
const GraphAltitudeByTime(this.media, this.data, {Key? key})
: super(key: key);
@override
State<GraphAltitudeByTime> createState() => _GraphAltitudeByTime();
}
class _GraphAltitudeByTime extends State<GraphAltitudeByTime> {
@override
Widget build(BuildContext context) {
final double maxY =
context.watch<User>().listActivity[0].getMaxAltitude() + 2;
final double minY =
context.watch<User>().listActivity[0].getMinAltitude() - 2;
final lineBarsData = [
LineChartBarData(
spots: widget.data.altitudeSeconde,
isCurved: false,
dotData: const FlDotData(show: false))
];
return Container(
padding: const EdgeInsets.only(left: 15),
height: widget.media.width * 0.5,
width: double.maxFinite,
child: LineChart(LineChartData(
lineBarsData: lineBarsData,
borderData: FlBorderData(show: false),
maxY: maxY,
minY: minY,
gridData: FlGridData(
drawVerticalLine: false,
drawHorizontalLine: true,
horizontalInterval: 1,
getDrawingHorizontalLine: (value) {
return FlLine(
color: TColor.gray.withOpacity(0.15),
strokeWidth: 2,
);
}),
titlesData: FlTitlesData(
leftTitles: const AxisTitles(),
topTitles: const AxisTitles(),
bottomTitles: const AxisTitles(),
rightTitles: AxisTitles(
sideTitles: SideTitles(
reservedSize: 50,
showTitles: true,
getTitlesWidget: (value, meta) {
return Text("${value.toInt()} m");
},
)),
))));
}
}

@ -41,12 +41,12 @@ class Stats extends StatelessWidget {
Text.rich( Text.rich(
TextSpan( TextSpan(
text: value, text: value,
style: TextStyle( style: const TextStyle(
fontSize: 20, fontSize: 20,
fontWeight: FontWeight.w900, fontWeight: FontWeight.w900,
), ),
children: [ children: [
TextSpan(text: ' '), const TextSpan(text: ' '),
TextSpan( TextSpan(
text: unit, text: unit,
style: TextStyle( style: TextStyle(
@ -56,10 +56,10 @@ class Stats extends StatelessWidget {
), ),
]), ]),
), ),
SizedBox(height: 6), const SizedBox(height: 6),
Text( Text(
label, label,
style: TextStyle( style: const TextStyle(
fontSize: 10, fontSize: 10,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
), ),

@ -133,6 +133,7 @@ class ActivityOfUser {
return "null"; return "null";
} }
// ---------------------------------------- Altitude -------------------- //
List<FlSpot> getAltitudeWithTime() { List<FlSpot> getAltitudeWithTime() {
List<FlSpot> result = List.empty(growable: true); List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0; int firtTimeStamp = 0;
@ -150,6 +151,25 @@ class ActivityOfUser {
return result; return result;
} }
double getMaxAltitude() {
for (int i = 4; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "max_altitude") {
return _contentActivity[_dataSession][i + 1];
}
}
return 0.0;
}
double getMinAltitude() {
for (int i = 4; i < _contentActivity[_dataSession].length; i++) {
if (_contentActivity[_dataSession][i] == "min_altitude") {
return _contentActivity[_dataSession][i + 1];
}
}
return 0.0;
}
// -------------------------- FIN altitude ---------------------- //
List<FlSpot> getSpeedWithTime() { List<FlSpot> getSpeedWithTime() {
List<FlSpot> result = List.empty(growable: true); List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0; int firtTimeStamp = 0;

@ -4,10 +4,8 @@ class DataHomeView {
late List<FlSpot> bpmSecondes; late List<FlSpot> bpmSecondes;
late List<FlSpot> bpmSecondes2; late List<FlSpot> bpmSecondes2;
late List<FlSpot> vitesseSecondes; late List<FlSpot> vitesseSecondes;
late List<FlSpot> altitudeSeconde;
DataHomeView( DataHomeView(this.bpmSecondes, this.bpmSecondes2, this.vitesseSecondes,
this.bpmSecondes, this.altitudeSeconde);
this.bpmSecondes2,
this.vitesseSecondes,
);
} }

@ -1,21 +1,22 @@
import 'package:fl_chart/fl_chart.dart'; import 'package:fl_chart/fl_chart.dart';
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/modele/activity.dart';
import 'package:smartfit_app_mobile/modele/user.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/data_home_view.dart';
class HomeViewUtil { class HomeViewUtil {
DataHomeView initData(BuildContext context) { DataHomeView initData(BuildContext context) {
List<FlSpot> bpmSecondes = ActivityOfUser activity = Provider.of<User>(context).listActivity[0];
Provider.of<User>(context).listActivity[0].getHeartRateWithTime();
List<FlSpot> vitesseSecondes = List<FlSpot> bpmSecondes = activity.getHeartRateWithTime();
Provider.of<User>(context).listActivity[0].getSpeedWithTime(); List<FlSpot> vitesseSecondes = activity.getSpeedWithTime();
List<FlSpot> altitudeSeconde = activity.getAltitudeWithTime();
List<FlSpot> bpmSecondes2 = List.from(bpmSecondes); List<FlSpot> bpmSecondes2 = List.from(bpmSecondes);
return DataHomeView(
bpmSecondes, return DataHomeView(bpmSecondes, normaliserDeuxiemeElement(bpmSecondes2),
normaliserDeuxiemeElement(bpmSecondes2), normaliserDeuxiemeElement(vitesseSecondes), altitudeSeconde);
normaliserDeuxiemeElement(vitesseSecondes));
} }
List<FlSpot> normaliserDeuxiemeElement(List<FlSpot> liste) { List<FlSpot> normaliserDeuxiemeElement(List<FlSpot> liste) {

@ -2,7 +2,6 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'dart:html' as html; // Importation des fonctionnalités HTML
import 'package:crypto/crypto.dart'; import 'package:crypto/crypto.dart';
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
@ -30,8 +29,10 @@ class _WebListActivityState extends State<WebListActivity> {
//late File x = File(file.path); //late File x = File(file.path);
List<String> parseFile(Uint8List bytes) { List<String> parseFile(Uint8List bytes) {
String csvString = utf8.decode(bytes); // Convertit les bytes en chaîne UTF-8 String csvString =
List<String> lines = LineSplitter.split(csvString).toList(); // Sépare les lignes utf8.decode(bytes); // Convertit les bytes en chaîne UTF-8
List<String> lines =
LineSplitter.split(csvString).toList(); // Sépare les lignes
for (String line in lines) { for (String line in lines) {
print(line); // Affiche chaque ligne du fichier print(line); // Affiche chaque ligne du fichier
@ -40,18 +41,19 @@ class _WebListActivityState extends State<WebListActivity> {
return lines; // Ou retournez les lignes du fichier return lines; // Ou retournez les lignes du fichier
} }
void readFile(html.File file) async { void readFile() async {
/*
ManagerFile x = ManagerFile(); ManagerFile x = ManagerFile();
final reader = html.FileReader(); final reader = html.FileReader();
reader.readAsArrayBuffer(file); reader.readAsArrayBuffer(file);
reader.onLoadEnd.listen((event) { reader.onLoadEnd.listen((event) {
if (reader.readyState == html.FileReader.DONE) { if (reader.readyState == html.FileReader.DONE) {
Uint8List bytes = reader.result as Uint8List; Uint8List bytes = reader.result as Uint8List;
List<dynamic> result = x.readFitFileWeb(bytes) ; List<dynamic> result = x.readFitFileWeb(bytes);
Provider.of<User>(context, listen: false) Provider.of<User>(context, listen: false)
.addActivity(ActivityOfUser(file.name, result )); .addActivity(ActivityOfUser(file.name, result));
} }
}); });*/
} }
List lastWorkoutArr = []; List lastWorkoutArr = [];
@ -82,15 +84,18 @@ class _WebListActivityState extends State<WebListActivity> {
), ),
TextButton( TextButton(
onPressed: () async { onPressed: () async {
html.FileUploadInputElement uploadInput = html.FileUploadInputElement(); /*
html.FileUploadInputElement uploadInput =
html.FileUploadInputElement();
uploadInput.click(); uploadInput.click();
uploadInput.onChange.listen((e) { uploadInput.onChange.listen((e) {
final files = uploadInput.files; final files = uploadInput.files;
if (files != null && files.isNotEmpty) { if (files != null && files.isNotEmpty) {
readFile(files[0]); // Lecture du fichier sélectionné readFile(
files[0]); // Lecture du fichier sélectionné
} }
}); });*/
}, },
child: Text( child: Text(
"Ajouter", "Ajouter",
@ -160,6 +165,4 @@ class _WebListActivityState extends State<WebListActivity> {
), ),
); );
} }
} }

@ -1,6 +1,7 @@
import 'package:fl_chart/fl_chart.dart'; import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/common_widget/container/ligne_container_stats.dart'; import 'package:smartfit_app_mobile/common_widget/container/ligne_container_stats.dart';
import 'package:smartfit_app_mobile/common_widget/graph/altitude_by_time.dart';
import 'package:smartfit_app_mobile/common_widget/graph/bpm_and_speed_by_time.dart'; import 'package:smartfit_app_mobile/common_widget/graph/bpm_and_speed_by_time.dart';
import 'package:smartfit_app_mobile/common_widget/graph/bpm_by_time.dart'; 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_widget/other/entete_home_view.dart';
@ -73,11 +74,7 @@ class _MobileHomeView extends State<MobileHomeView> {
height: media.width * 0.05, height: media.width * 0.05,
), ),
const LigneContainerStats("1", "2", "3", "s", "s", "s"), const LigneContainerStats("1", "2", "3", "s", "s", "s"),
Container( GraphAltitudeByTime(media, data)
padding: const EdgeInsets.only(left: 15),
height: media.width * 0.5,
width: double.maxFinite,
child: LineChart(LineChartData()))
], ],
), ),
), ),

@ -1,6 +1,7 @@
import 'package:fl_chart/fl_chart.dart'; import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/common_widget/container/ligne_container_stats.dart'; import 'package:smartfit_app_mobile/common_widget/container/ligne_container_stats.dart';
import 'package:smartfit_app_mobile/common_widget/graph/altitude_by_time.dart';
import 'package:smartfit_app_mobile/common_widget/graph/bpm_and_speed_by_time.dart'; import 'package:smartfit_app_mobile/common_widget/graph/bpm_and_speed_by_time.dart';
import 'package:smartfit_app_mobile/common_widget/graph/bpm_by_time.dart'; 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_widget/other/entete_home_view.dart';
@ -82,11 +83,7 @@ class _WebHomeView extends State<WebHomeView> {
SizedBox( SizedBox(
height: media.width * 0.05, height: media.width * 0.05,
), ),
Container( GraphAltitudeByTime(media, data)
padding: const EdgeInsets.only(left: 15),
height: media.width * 0.5,
width: double.maxFinite,
child: LineChart(LineChartData()))
], ],
), ),
), ),

Loading…
Cancel
Save