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(
TextSpan(
text: value,
style: TextStyle(
style: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.w900,
),
children: [
TextSpan(text: ' '),
const TextSpan(text: ' '),
TextSpan(
text: unit,
style: TextStyle(
@ -56,10 +56,10 @@ class Stats extends StatelessWidget {
),
]),
),
SizedBox(height: 6),
const SizedBox(height: 6),
Text(
label,
style: TextStyle(
style: const TextStyle(
fontSize: 10,
fontWeight: FontWeight.w500,
),

@ -133,6 +133,7 @@ class ActivityOfUser {
return "null";
}
// ---------------------------------------- Altitude -------------------- //
List<FlSpot> getAltitudeWithTime() {
List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0;
@ -150,6 +151,25 @@ class ActivityOfUser {
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> result = List.empty(growable: true);
int firtTimeStamp = 0;

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

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

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

@ -1,6 +1,7 @@
import 'package:fl_chart/fl_chart.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/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_by_time.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,
),
const LigneContainerStats("1", "2", "3", "s", "s", "s"),
Container(
padding: const EdgeInsets.only(left: 15),
height: media.width * 0.5,
width: double.maxFinite,
child: LineChart(LineChartData()))
GraphAltitudeByTime(media, data)
],
),
),

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

Loading…
Cancel
Save