diff --git a/lib/common_widget/container/container_stats_activities.dart b/lib/common_widget/container/container_stats_activities.dart new file mode 100644 index 0000000..dfd5b1c --- /dev/null +++ b/lib/common_widget/container/container_stats_activities.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:responsive_builder/responsive_builder.dart'; +import 'package:smartfit_app_mobile/common/colo_extension.dart'; +import 'package:smartfit_app_mobile/common_widget/container/mobile/mobile_container_stats_activities.dart'; +import 'package:smartfit_app_mobile/common_widget/container/web/web_container_stats_activities.dart'; +import 'package:smartfit_app_mobile/common_widget/stats.dart'; + +class ContainerStatsActivities extends StatelessWidget { + const ContainerStatsActivities( + this.value, + this.designation, + this.icon, { + Key? key, + }) : super(key: key); + + final String value; + final String designation; + final IconData icon; + + @override + Widget build(BuildContext context) { + return ScreenTypeLayout.builder( + mobile: (_) => MobileContainerStatsActivities(this.value, this.designation, this.icon), + desktop: (_) => WebContainerStatsActivities(this.value, this.designation, this.icon), + ); + } +} diff --git a/lib/common_widget/container/mobile/mobile_container_stats.dart b/lib/common_widget/container/mobile/mobile_container_stats.dart index 355f624..e8350d8 100644 --- a/lib/common_widget/container/mobile/mobile_container_stats.dart +++ b/lib/common_widget/container/mobile/mobile_container_stats.dart @@ -36,6 +36,7 @@ class MobileContainerStats extends StatelessWidget { icon: icon, iconColor: TColor.white, iconBackground: TColor.secondaryColor1, + sizeIcon: 12, ), Align( alignment: Alignment.bottomLeft, diff --git a/lib/common_widget/container/mobile/mobile_container_stats_activities.dart b/lib/common_widget/container/mobile/mobile_container_stats_activities.dart new file mode 100644 index 0000000..b21114d --- /dev/null +++ b/lib/common_widget/container/mobile/mobile_container_stats_activities.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:smartfit_app_mobile/common/colo_extension.dart'; +import 'package:smartfit_app_mobile/common_widget/stats.dart'; + +class MobileContainerStatsActivities extends StatelessWidget { + const MobileContainerStatsActivities( + this.value, + this.designation, + this.icon, { + Key? key, + }) : super(key: key); + + final String value; + final String designation; + final IconData icon; + + @override + Widget build(BuildContext context) { + var media = MediaQuery.of(context).size; + + return Container( + height: media.width * 0.4, + width: media.width * 0.27, + padding: const EdgeInsets.all(8), + margin: const EdgeInsets.symmetric(vertical: 5), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + border: Border.all( + color: const Color(0xffe1e1e1), + ), + boxShadow: const [ + BoxShadow( + color: Colors.black12, + offset: Offset(3, 3), + blurRadius: 3, + ), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, // Centrer horizontalement + mainAxisAlignment: MainAxisAlignment.center, + + children: [ + StatIcon( + icon: icon, + iconColor: TColor.white, + iconBackground: TColor.secondaryColor1, + sizeIcon: 30.0, + ), + SizedBox(height: 20), // Espacement entre l'icône et le texte + Text( + designation, + style: const TextStyle(fontSize: 12), + textAlign: TextAlign.center, + ), + Text( + value, + style: const TextStyle( + fontSize: 17 , + fontWeight: FontWeight.w800, + ), + textAlign: TextAlign.center, + ), + ], + ), + ); + } +} diff --git a/lib/common_widget/container/web/web_container_stats.dart b/lib/common_widget/container/web/web_container_stats.dart index 89aa241..638940b 100644 --- a/lib/common_widget/container/web/web_container_stats.dart +++ b/lib/common_widget/container/web/web_container_stats.dart @@ -13,7 +13,7 @@ class WebContainerStats extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - height: 70, + height: 80, width: 70, padding: const EdgeInsets.all(8), margin: const EdgeInsets.symmetric(vertical: 5), @@ -36,6 +36,7 @@ class WebContainerStats extends StatelessWidget { icon: icon, iconColor: TColor.white, iconBackground: TColor.secondaryColor1, + sizeIcon: 8.0, ), Align( alignment: Alignment.bottomLeft, diff --git a/lib/common_widget/container/web/web_container_stats_activities.dart b/lib/common_widget/container/web/web_container_stats_activities.dart new file mode 100644 index 0000000..2e5a7d2 --- /dev/null +++ b/lib/common_widget/container/web/web_container_stats_activities.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:smartfit_app_mobile/common/colo_extension.dart'; +import 'package:smartfit_app_mobile/common_widget/stats.dart'; + +class WebContainerStatsActivities extends StatelessWidget { + const WebContainerStatsActivities( + this.value, + this.designation, + this.icon, { + Key? key, + }) : super(key: key); + + final String value; + final String designation; + final IconData icon; + + @override + Widget build(BuildContext context) { + var media = MediaQuery.of(context).size; + + return Container( + height: media.width * 0.2, + width: media.width * 0.3, + padding: const EdgeInsets.all(8), + margin: const EdgeInsets.symmetric(vertical: 5), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + border: Border.all( + color: const Color(0xffe1e1e1), + ), + boxShadow: const [ + BoxShadow( + color: Colors.black12, + offset: Offset(3, 3), + blurRadius: 3, + ), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, // Centrer horizontalement + mainAxisAlignment: MainAxisAlignment.center, + + children: [ + StatIcon( + icon: icon, + iconColor: TColor.white, + iconBackground: TColor.secondaryColor1, + sizeIcon: 40.0, + ), + SizedBox(height: 40), // Espacement entre l'icône et le texte + Text( + designation, + style: const TextStyle(fontSize: 15), + textAlign: TextAlign.center, + ), + Text( + value, + style: const TextStyle( + fontSize: 20 , + fontWeight: FontWeight.w800, + ), + textAlign: TextAlign.center, + ), + ], + ), + ); + } +} diff --git a/lib/common_widget/graph/mobile/mobile_altitude_by_time.dart b/lib/common_widget/graph/mobile/mobile_altitude_by_time.dart index da7691c..cc5bc31 100644 --- a/lib/common_widget/graph/mobile/mobile_altitude_by_time.dart +++ b/lib/common_widget/graph/mobile/mobile_altitude_by_time.dart @@ -57,7 +57,15 @@ class _MobileGraphAltitudeByTime extends State { titlesData: FlTitlesData( leftTitles: const AxisTitles(), topTitles: const AxisTitles(), - bottomTitles: const AxisTitles(), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + reservedSize: 20, + showTitles: true, + getTitlesWidget: (value, meta) { + return Text( + "${double.parse((value / 10).toStringAsFixed(2))}s"); + }, + )), rightTitles: AxisTitles( sideTitles: SideTitles( reservedSize: 60, diff --git a/lib/common_widget/graph/mobile/mobile_bpm_and_speed_by_time.dart b/lib/common_widget/graph/mobile/mobile_bpm_and_speed_by_time.dart index a7ad501..50725df 100644 --- a/lib/common_widget/graph/mobile/mobile_bpm_and_speed_by_time.dart +++ b/lib/common_widget/graph/mobile/mobile_bpm_and_speed_by_time.dart @@ -94,7 +94,7 @@ class _MobileGraphBpmAndSpeedByTime getTooltipItems: (List lineBarsSpot) { return lineBarsSpot.map((lineBarSpot) { return LineTooltipItem( - "Seconde ${lineBarSpot.x.toInt()} ", + "Seconde ${lineBarSpot.x.toInt() / 10} ", const TextStyle( color: Colors.white, fontSize: 10, @@ -110,9 +110,19 @@ class _MobileGraphBpmAndSpeedByTime maxY: 110, titlesData: FlTitlesData( show: true, - leftTitles: const AxisTitles(), + leftTitles: AxisTitles( + sideTitles: rightTitles, + ), topTitles: const AxisTitles(), - bottomTitles: const AxisTitles(), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + reservedSize: 20, + showTitles: true, + getTitlesWidget: (value, meta) { + return Text( + "${double.parse((value / 10).toStringAsFixed(2))}s"); + }, + )), rightTitles: AxisTitles( sideTitles: SideTitles( reservedSize: 70, diff --git a/lib/common_widget/graph/mobile/mobile_bpm_by_time.dart b/lib/common_widget/graph/mobile/mobile_bpm_by_time.dart index d14962c..9190259 100644 --- a/lib/common_widget/graph/mobile/mobile_bpm_by_time.dart +++ b/lib/common_widget/graph/mobile/mobile_bpm_by_time.dart @@ -61,7 +61,7 @@ class _MobileBpmByTime extends State { reservedSize: 20, showTitles: true, getTitlesWidget: (value, meta) { - return Text("${double.parse(value.toStringAsFixed(2))}s"); + return Text("${double.parse((value/10).toStringAsFixed(2))}s"); }, )), rightTitles: AxisTitles( diff --git a/lib/common_widget/stats.dart b/lib/common_widget/stats.dart index dc6f72c..0d1e922 100644 --- a/lib/common_widget/stats.dart +++ b/lib/common_widget/stats.dart @@ -1,3 +1,4 @@ + import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:smartfit_app_mobile/modele/user.dart'; @@ -127,6 +128,7 @@ class InfoStat extends StatelessWidget { icon: icon, iconColor: iconColor, iconBackground: iconBackground, + sizeIcon: 8.0, ), Align( alignment: Alignment.bottomLeft, @@ -160,11 +162,13 @@ class StatIcon extends StatelessWidget { required this.icon, required this.iconColor, required this.iconBackground, + required this.sizeIcon, }) : super(key: key); final IconData icon; final Color iconColor; final Color iconBackground; + final double? sizeIcon; @override Widget build(BuildContext context) { @@ -174,7 +178,7 @@ class StatIcon extends StatelessWidget { color: iconBackground, borderRadius: BorderRadius.circular(9), ), - child: Icon(icon, size: 8, color: iconColor), + child: Icon(icon, size: sizeIcon, color: iconColor), ); } } diff --git a/lib/main.dart b/lib/main.dart index 9452bdc..9c78002 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart'; +import 'package:smartfit_app_mobile/view/home/stats_activities_view.dart'; import 'package:smartfit_app_mobile/view/login/signup_view.dart'; void main() { diff --git a/lib/modele/manager_file.dart b/lib/modele/manager_file.dart index a4178d2..292f32c 100644 --- a/lib/modele/manager_file.dart +++ b/lib/modele/manager_file.dart @@ -14,6 +14,9 @@ class ManagerFile { final String _fieldAltitude = "altitude"; final String _fieldTotalStep = "total_strides"; final String _fieldTotalCalorie = "total_calories"; + final String _fieldTemperature = "temperature"; + + // -- Getter field String get fieldTimeStamp => _fieldTimestamp; String get fieldPositionLatitude => _fieldPositionLatitue; @@ -24,6 +27,8 @@ class ManagerFile { String get fieldAltitude => _fieldAltitude; String get fieldTotalStep => _fieldTotalStep; String get fieldTotalCalories => _fieldTotalCalorie; + String get fieldTemperature => _fieldTemperature; + List allowedFieldWalking = List.empty(growable: true); @@ -37,7 +42,8 @@ class ManagerFile { _fieldSpeed, _fieldAltitude, _fieldTotalStep, - _fieldTotalCalorie + _fieldTotalCalorie, + _fieldTemperature ]; } diff --git a/lib/modele/manager_selected_activity.dart b/lib/modele/manager_selected_activity.dart index dba67e2..40510e8 100644 --- a/lib/modele/manager_selected_activity.dart +++ b/lib/modele/manager_selected_activity.dart @@ -41,6 +41,7 @@ class ManagerSelectedActivity { return true; } + bool _notNull(int indexActivitySelected, int ligne, int colonne) { if (activitySelected[indexActivitySelected].contentActivity[ligne] [colonne] == @@ -138,6 +139,83 @@ class ManagerSelectedActivity { } return somme ~/ nb; } + double getAvgAltitude() { + double somme = 0; + int nb = 0; + 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}"]!)) { + somme += activitySelected[c].contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldAltitude}"]!] ; + nb++; + } + } + } + double average = somme / nb; + return double.parse(average.toStringAsFixed(2)); + } + + double getAvgTemperature() { + double somme = 0; + int nb = 0; + 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.fieldTemperature}"]!)) { + somme += activitySelected[c].contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldTemperature}"]!]; + nb++; + } + } + } + double average = somme / nb; + return double.parse(average.toStringAsFixed(2)); + } + + double getMaxTemperature() { + double max = 0; + 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.fieldTemperature}"]!)) { + double valueTmp = activitySelected[c].contentActivity[i] + [activitySelected[c].enteteCSV["Value_${_managerFile.fieldTemperature}"]!]; + if (valueTmp > max) { + max = valueTmp; + } + } + } + } + + return max; + } + + double getMinTemperature() { + double min = 5000; + 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.fieldTemperature}"]!)) { + double valueTmp = activitySelected[c] + .contentActivity[i][activitySelected[c] + .enteteCSV["Value_${_managerFile.fieldTemperature}"]!] + .toDouble(); + if (valueTmp < min) { + min = valueTmp; + } + } + } + } + return min; + } + + + + // -------------------------- FIN BPM ---------------------- // @@ -216,22 +294,36 @@ class ManagerSelectedActivity { // ------------------------- Time ----------------------------- // - int getTotalTime() { - for (int c = 0; c < activitySelected.length; c++) { - for (int i = activitySelected[c].contentActivity.length - 1; - i != 0; - i--) { + double getTotalTime() { + int timestampMax = 0; + int timestampMin = 0; + + for (int i = 0; i < activitySelected[0].contentActivity.length; i++) { if (_notNull( - c, + 0, i, - activitySelected[c] + activitySelected[0] .enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!)) { - return activitySelected[c].contentActivity[i][activitySelected[c] - .enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!]; + timestampMin = activitySelected[0].contentActivity[i][ + activitySelected[0] + .enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!]; + break; } + } + + for (int i = activitySelected[0].contentActivity.length - 1; i != 0; i--) { + if (_notNull( + 0, + i, + activitySelected[0] + .enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!)) { + timestampMax = activitySelected[0].contentActivity[i][ + activitySelected[0] + .enteteCSV["Value_${_managerFile.fieldTimeStamp}"]!]; + break; } } - return 0; + return (timestampMax - timestampMin) / 1000; } // ---------------------------- FIN time -------------------- // @@ -350,6 +442,28 @@ class ManagerSelectedActivity { return max; } + double getMinSpeed() { + double min = 5000; + 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 < min) { + min = valueTmp; + } + } + } + } + return min; + } + // Retourne avg Max (Fichier CSV) double getAvgSpeed() { double somme = 0; @@ -369,7 +483,8 @@ class ManagerSelectedActivity { } } - return somme / nb; + double average = somme / nb; + return double.parse(average.toStringAsFixed(2)); } // -------------------------- FIN Speed ---------------------- // diff --git a/lib/view/home/home_view.dart b/lib/view/home/home_view.dart index 637a004..544841b 100644 --- a/lib/view/home/home_view.dart +++ b/lib/view/home/home_view.dart @@ -5,10 +5,11 @@ import 'package:smartfit_app_mobile/modele/activity.dart'; import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/view/home/mobile/mobile_homeview.dart'; import 'package:smartfit_app_mobile/view/home/no_activity_view.dart'; +import 'package:smartfit_app_mobile/view/home/stats_activities_view.dart'; import 'package:smartfit_app_mobile/view/home/web/web_homeview.dart'; class HomeView extends StatefulWidget { - const HomeView({super.key}); + const HomeView({Key? key}); @override State createState() => _HomeViewState(); @@ -17,25 +18,21 @@ class HomeView extends StatefulWidget { class _HomeViewState extends State { @override Widget build(BuildContext context) { - List listSelected = - context.watch().managerSelectedActivity.activitySelected; - if (listSelected.isEmpty) { - return ScreenTypeLayout.builder( - mobile: (_) => const NoActivityView("Pas d'activité sélectionnée"), - desktop: (_) => const NoActivityView("Pas d'activité sélectionnée"), - ); - } - if (listSelected.length > 1) { - return ScreenTypeLayout.builder( - mobile: (_) => const NoActivityView( - "Qu'une seule activité doit être sélectionner"), - desktop: (_) => const NoActivityView( - "Qu'une seule activité doit être sélectionner"), - ); - } - return ScreenTypeLayout.builder( - mobile: (_) => const MobileHomeView(), - desktop: (_) => const WebHomeView(), - ); + final selectedActivitiesCount = + context.watch().managerSelectedActivity.activitySelected.length; + + return selectedActivitiesCount == 1 + ? ScreenTypeLayout.builder( + mobile: (_) => const MobileHomeView(), + desktop: (_) => const WebHomeView(), + ) + : selectedActivitiesCount > 1 + ? const StatAtivities() + : ScreenTypeLayout.builder( + mobile: (_) => + const NoActivityView("Pas d'activité sélectionnée"), + desktop: (_) => + const NoActivityView("Pas d'activité sélectionnée"), + ); } } diff --git a/lib/view/home/stats_activities_view.dart b/lib/view/home/stats_activities_view.dart new file mode 100644 index 0000000..a9916e2 --- /dev/null +++ b/lib/view/home/stats_activities_view.dart @@ -0,0 +1,152 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:smartfit_app_mobile/common_widget/container/container_stats_activities.dart'; +import 'package:smartfit_app_mobile/common_widget/other/entete_home_view.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'; +import 'package:smartfit_app_mobile/modele/utile/home_view/home_view_util.dart'; + +class StatAtivities extends StatefulWidget { + const StatAtivities({super.key}); + + @override + State createState() => _StatAtivities(); +} + +class _StatAtivities extends State { + late DataHomeView data; + TextEditingController bpmController = TextEditingController(); + + @override + Widget build(BuildContext context) { + var media = MediaQuery.of(context).size; + data = HomeViewUtil().initData(context); + int maxBpm = context.watch().managerSelectedActivity.getMaxBpm(); + int avgBpm = context.watch().managerSelectedActivity.getAvgBpm(); + double getTotalDistance = context.watch().managerSelectedActivity.getTotalDistance(); + int totalSteps = context.watch().managerSelectedActivity.getTotalSteps(); + double totalTime = context.watch().managerSelectedActivity.getTotalTime(); + int totalCalories = context.watch().managerSelectedActivity.getCalorie(); + double avgSpeed = context.watch().managerSelectedActivity.getAvgSpeed(); + double avgAltitude = context.watch().managerSelectedActivity.getAvgAltitude(); + double avgTemperature = context.watch().managerSelectedActivity.getAvgTemperature(); + double maxAltitude = context.watch().managerSelectedActivity.getAvgTemperature(); + double maxTemperature = context.watch().managerSelectedActivity.getMaxTemperature(); + double maxSpeed = context.watch().managerSelectedActivity.getMaxSpeed(); + double minSpeed = context.watch().managerSelectedActivity.getMinSpeed(); + double minAltitude = context.watch().managerSelectedActivity.getMinAltitude(); + double minTemperature = context.watch().managerSelectedActivity.getMinTemperature(); + int minBpm = context.watch().managerSelectedActivity.getMinBpm(); + + + + print(avgTemperature); + print(avgAltitude); + + + + + return Scaffold( + backgroundColor: TColor.white, + body: SingleChildScrollView( + child: SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 15), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: media.width * 0.03, + ), + const EnteteHomeView(), + SizedBox( + height: media.width * 0.05, + ), + Text( + "Status d'activité", + style: TextStyle( + color: TColor.black, + fontSize: 16, + fontWeight: FontWeight.w700), + ), + SizedBox( + height: media.width * 0.03, + ), + + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ContainerStatsActivities("$avgBpm BPM","Moyenne Bpm", Icons.favorite), + SizedBox(width: media.width *0.03,), + ContainerStatsActivities("$maxBpm BPM","Maximum Bpm", Icons.trending_up), + SizedBox(width: media.width *0.03,), + ContainerStatsActivities("$minBpm BPM","Minimum Bpm", Icons.trending_down) + ],), + SizedBox( + height: media.width * 0.03, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ContainerStatsActivities("$avgSpeed m/s","Moyenne vitesse", Icons.bolt), + SizedBox(width: media.width *0.03,), + ContainerStatsActivities("$maxSpeed m/s","Maximum vitesse", Icons.trending_up), + SizedBox(width: media.width *0.03,), + ContainerStatsActivities("$minSpeed m/s","Minimum vitesse", Icons.trending_down) + ],), + SizedBox( + height: media.width * 0.03, + ), + + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ContainerStatsActivities("$avgTemperature °C","Moyenne Temperature", Icons.thermostat), + SizedBox(width: media.width *0.03,), + ContainerStatsActivities("$maxTemperature °C","Maximum Temperature", Icons.trending_up), + SizedBox(width: media.width *0.03,), + ContainerStatsActivities("$minTemperature °C","Minimum Temperature", Icons.trending_down) + ],), + SizedBox( + height: media.width * 0.03, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ContainerStatsActivities("$avgAltitude m","Moyenne Altitude", Icons.landscape), + SizedBox(width: media.width *0.03,), + ContainerStatsActivities("$maxAltitude m","Maximum Altitude", Icons.trending_up), + SizedBox(width: media.width *0.03,), + ContainerStatsActivities("$minAltitude m","Minimum Altitude", Icons.trending_down) + ],), + SizedBox( + height: media.width * 0.03, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ContainerStatsActivities("$getTotalDistance m","Distance Totale", Icons.double_arrow), + SizedBox(width: media.width *0.03,), + ContainerStatsActivities("$totalSteps","Total Pas", Icons.do_not_step_rounded), + ],), + SizedBox( + height: media.width * 0.03, + ),Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ContainerStatsActivities("$totalTime s","Temps Total", Icons.timer), + SizedBox(width: media.width *0.03,), + ContainerStatsActivities("$totalCalories kCal","Calories Dépensées", Icons.local_fire_department), + ],), + SizedBox( + height: media.width * 0.03, + ), + ], + ), + ), + ), + ), + ); + } +}