diff --git a/.gitignore b/.gitignore index d1369f0..bea03cd 100644 --- a/.gitignore +++ b/.gitignore @@ -106,6 +106,7 @@ unlinked_spec.ds # Coverage coverage/ +flutter/ # Symbols app.*.symbols diff --git a/assets/img/corbeille.png b/assets/img/corbeille.png new file mode 100644 index 0000000..f6c0d18 Binary files /dev/null and b/assets/img/corbeille.png differ diff --git a/assets/img/next_icon.png b/assets/img/next_icon.png new file mode 100644 index 0000000..a9d8774 Binary files /dev/null and b/assets/img/next_icon.png differ diff --git a/lib/common_widget/workout_row.dart b/lib/common_widget/workout_row.dart new file mode 100644 index 0000000..a2e3250 --- /dev/null +++ b/lib/common_widget/workout_row.dart @@ -0,0 +1,88 @@ +import 'package:flutter_svg/svg.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/View/activity/activity.dart'; +import 'package:smartfit_app_mobile/common/colo_extension.dart'; +import 'package:flutter/material.dart'; +import 'package:simple_animation_progress_bar/simple_animation_progress_bar.dart'; + +class WorkoutRow extends StatelessWidget { + final Map wObj; + final VoidCallback onDelete; + final VoidCallback onClick; + const WorkoutRow({Key? key, required this.wObj, required this.onDelete, required this.onClick}) : super(key: key); + + @override + Widget build(BuildContext context) { + var media = MediaQuery.of(context).size; + return Container( + margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 2), + padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 15), + decoration: BoxDecoration( + color: TColor.white, + borderRadius: BorderRadius.circular(20), + boxShadow: const [BoxShadow(color: Colors.black12, blurRadius: 2)], + ), + child: Row( + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(30), + child: SvgPicture.asset( + wObj["image"].toString(), + width: 60, + height: 60, + fit: BoxFit.cover, + ), + ), + const SizedBox(width: 15), + Expanded( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + wObj["nomActivite"].toString(), + 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( + // ici pour remove l'activité + onPressed: onDelete, + icon: Image.asset( + "assets/img/corbeille.png", + width: 30, + height: 30, + fit: BoxFit.contain, + ), + ), + ], + ), + ], + ), + ), + ], + ), + ); + } +} diff --git a/lib/main.dart b/lib/main.dart index 2aad57e..2266e89 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:smartfit_app_mobile/Modele/user.dart'; -import 'package:smartfit_app_mobile/View/login/signup_view.dart'; +import 'package:smartfit_app_mobile/modele/user.dart'; +import 'package:smartfit_app_mobile/view/activity/list_activity.dart'; +import 'package:smartfit_app_mobile/view/login/login_view.dart'; +import 'package:smartfit_app_mobile/view/login/signup_view.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart'; void main() { diff --git a/lib/modele/activity.dart b/lib/modele/activity.dart index 0b55431..1f14c19 100644 --- a/lib/modele/activity.dart +++ b/lib/modele/activity.dart @@ -1,13 +1,15 @@ import 'package:fl_chart/fl_chart.dart'; class ActivityOfUser { - final String _type = "Default"; - + late String _nomActivite; + late String _imageName; late List _contentActivity; List get contentActivity => _contentActivity; - ActivityOfUser(List listeDynamic) { + ActivityOfUser(String nom, List listeDynamic) { + _nomActivite = nom; + _imageName = "assets/img/workout1.svg"; _contentActivity = listeDynamic; } @@ -53,6 +55,26 @@ class ActivityOfUser { } return result; } + List getCalories() { + List result = List.empty(growable: true); + int firtTimeStamp = 0; + print("enzo"); + print(_contentActivity.length); + for (List ligne in _contentActivity) { + + if (ligne.length >= 39 && ligne[0] == "Data" && ligne[39] == "total_calories") { + print("enzo"); + print(ligne[39]); + if (firtTimeStamp == 0) { + firtTimeStamp = ligne[4]; + } + //result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[7].toInt()]); + result + .add(FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[40].toDouble())); + } + } + return result; + } List getAltitudeWithTime() { List result = List.empty(growable: true); @@ -107,4 +129,11 @@ class ActivityOfUser { } return result; } + + Map toMap() { + return { + 'nomActivite': _nomActivite, + 'image': _imageName, + }; + } } diff --git a/lib/modele/user.dart b/lib/modele/user.dart index e0adfcf..65163ff 100644 --- a/lib/modele/user.dart +++ b/lib/modele/user.dart @@ -1,9 +1,30 @@ import 'package:flutter/material.dart'; import 'package:smartfit_app_mobile/Modele/activity.dart'; + +import 'package:flutter/material.dart'; +import 'package:smartfit_app_mobile/Modele/activity.dart'; + class User extends ChangeNotifier { String? username; String? email; String? token; - List? listActivity; + List listActivity = []; + + + void addActivity(ActivityOfUser activity) { + listActivity.add(activity); + notifyListeners(); + } + + void removeActivity(ActivityOfUser activity) { + listActivity.remove(activity); + notifyListeners(); + } + + // Method to insert an activity at a specific position + void insertActivity(int index, ActivityOfUser activity) { + listActivity.insert(index, activity); + notifyListeners(); + } } diff --git a/lib/view/activity/list_activity.dart b/lib/view/activity/list_activity.dart new file mode 100644 index 0000000..c410942 --- /dev/null +++ b/lib/view/activity/list_activity.dart @@ -0,0 +1,256 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:crypto/crypto.dart'; +import 'package:dotted_dashed_line/dotted_dashed_line.dart'; +import 'package:file_picker/file_picker.dart'; +import 'package:provider/provider.dart'; +import 'package:smartfit_app_mobile/modele/api/i_data_strategy.dart'; +import 'package:smartfit_app_mobile/modele/api/request_api.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/view/home/home_view.dart'; +import 'package:smartfit_app_mobile/view/main_tab/main_tab_view.dart'; +import 'package:smartfit_app_mobile/common_widget/round_button.dart'; +import 'package:smartfit_app_mobile/common_widget/workout_row.dart'; +import 'package:fl_chart/fl_chart.dart'; +import 'package:flutter/material.dart'; +import 'package:simple_animation_progress_bar/simple_animation_progress_bar.dart'; +import 'package:simple_circular_progress_bar/simple_circular_progress_bar.dart'; +import 'package:tuple/tuple.dart'; +import '../../common/colo_extension.dart'; + +class ListActivity extends StatefulWidget { + const ListActivity({super.key}); + + @override + State createState() => _ListActivityState(); +} + +class _ListActivityState extends State { + FilePickerResult? result; + IDataStrategy strategy = RequestApi(); + + //late File x = File(file.path); + Future readFile(String nom) async { + ManagerFile x = ManagerFile(); + PlatformFile t = result!.files.single; + String? y = t.path; + if (t.path == null) { + print("t"); + } else { + List result = await x.readFitFile(y!); + print("test11"); + print(result); + print("test22"); + print(ActivityOfUser(nom, result).getHeartRateWithTime()); + print("test33"); + Provider.of(context, listen: false) + .addActivity(ActivityOfUser(nom, result)); + //print(x.getDistanceWithTime(ActivityOfUser(result))); + //print(x.getDistance(ActivityOfUser(result))); + //print(x.getAltitudeWithTime(ActivityOfUser(result))); + //print(x.getSpeedWithTime(ActivityOfUser(result))); + } + } + + Future createUser() async { + String mds = "1234"; + var byte = utf8.encode(mds); + var digest = sha256.convert(byte); + print(digest.toString()); + print("Appel"); + Tuple2 res = + await strategy.postUser("toto@gmail.com", digest.toString(), "toto"); + print(res.item1); + print(res.item2); + } + + Future login() async { + String mds = "1234"; + var byte = utf8.encode(mds); + var digest = sha256.convert(byte); + print(digest.toString()); + print("Appel"); + Tuple2 res = + await strategy.connexion("toto@gmail.com", digest.toString()); + print(res.item1); + print(res.item2); + } + + Future deleteUser() async { + String token = + "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiYjA3OThmMjAtN2ZiMy0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgyNDI3fQ.2_bnvEC7_pwchielF3Kpu9fFtXDv_KabdOU8T07UnWI"; + print("Appel"); + Tuple2 res = await strategy.deleteUser(token); + print(res.item1); + print(res.item2); + } + + Future getFiles() async { + String token = + "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgyNzk3fQ.b_zsOHj2C-Y28CrcozbSjEz8BUWL8kgjjx5CDhES8PI"; + print("Appel"); + Tuple2 res = await strategy.getFiles(token); + print(res.item1); + print(res.item2); + } + + Future modifAttribut() async { + String nameAtt = "username"; + String newValue = "toto2"; + String token = + "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgzMDM4fQ.umN7LmUDbKUOeIToLcsOUIioQ7u4wsReHggRDB68VPQ"; + print("Appel"); + Tuple2 res = await strategy.modifAttribut(token, nameAtt, newValue); + print(res.item1); + print(res.item2); + } + + Future uploadFile() async { + PlatformFile t = result!.files.single; + String token = + "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgzNjM5fQ.0TmfJ9eYnszw4_RkNwPkMzkJxvsIFs5BI9uhQ7qYb0g"; + String? lol = t.path!; + print("Appel"); + Tuple2 res = await strategy.uploadFile(token, File(lol)); + print(res.item1); + print(res.item2); + } + + Future getOneFile() async { + String ui = "fc6e234c-7fc6-11ee-bafd-02420a5a001f"; + String token = + "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgzOTE3fQ.TUdrGEo7A0auQlUfO5RQm874QWuGXFBSKbJ8qTGPF2M"; + print("Appel"); + Tuple2 res = await strategy.getFile(token, ui); + print(res.item1); + print(res.item2); + + ManagerFile x = ManagerFile(); + File file = File("${await x.localPath}/Walking_2023-11-08T10_57_28.fit"); + await file.create(); + await file.writeAsBytes(res.item2); + print(await x.localPath); + print("Save"); + + print(await x + .readFitFile("${await x.localPath}/Walking_2023-11-08T10_57_28.fit")); + } + + Future getInfoUser() async { + String token = + "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgzOTE3fQ.TUdrGEo7A0auQlUfO5RQm874QWuGXFBSKbJ8qTGPF2M"; + Tuple2 res = await strategy.getInfoUser(token); + print(res.item1); + print(res.item2); + } + + List lastWorkoutArr = []; + + @override + Widget build(BuildContext context) { + var media = MediaQuery.of(context).size; + + 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: 20), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "List Activités", + style: TextStyle( + color: TColor.black, + fontSize: 16, + fontWeight: FontWeight.w700), + ), + TextButton( + onPressed: () async { + result = await FilePicker.platform.pickFiles(); + if (result == null) { + print("No file selected"); + } else { + for (var element in result!.files) { + readFile(element.name); + print(element.name); + } + } + }, + child: Text( + "Ajouter", + style: TextStyle( + color: TColor.gray, + fontSize: 14, + fontWeight: FontWeight.w700), + ), + ) + ], + ), + Provider.of(context, listen: true).listActivity.isEmpty + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 20), + Text( + "Vous n'avez pas d'activités pour le moment, veuillez en ajouter.", + style: TextStyle( + color: TColor.gray, + fontSize: 11, + fontStyle: FontStyle.italic, + fontWeight: FontWeight.w400, + ), + ) + ]) + : ListView.builder( + padding: EdgeInsets.zero, + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: Provider.of(context, listen: true) + .listActivity + .length, + itemBuilder: (context, index) { + var activityObj = + Provider.of(context, listen: true) + .listActivity[index] as ActivityOfUser; + var activityMap = activityObj.toMap(); + return InkWell( + onTap: () { + Provider.of(context, listen: false) + .removeActivity(activityObj); + Provider.of(context, listen: false) + .insertActivity(0, activityObj); + }, + child: WorkoutRow( + wObj: activityMap, + onDelete: () { + Provider.of(context, listen: false) + .removeActivity(activityObj); + }, + onClick: () { + Provider.of(context, listen: false) + .removeActivity(activityObj); + Provider.of(context, listen: false) + .insertActivity(0, activityObj); + }, + )); + }), + SizedBox( + height: media.width * 0.1, + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/view/home/home_view.dart b/lib/view/home/home_view.dart index ea65d98..44bd240 100644 --- a/lib/view/home/home_view.dart +++ b/lib/view/home/home_view.dart @@ -1,4 +1,7 @@ -import 'package:dotted_dashed_line/dotted_dashed_line.dart'; + import 'package:dotted_dashed_line/dotted_dashed_line.dart'; +import 'package:provider/provider.dart'; +import 'package:smartfit_app_mobile/Modele/manager_file.dart'; +import 'package:smartfit_app_mobile/Modele/user.dart'; import 'package:smartfit_app_mobile/common_widget/round_button.dart'; import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; @@ -18,7 +21,34 @@ class HomeView extends StatefulWidget { State createState() => _HomeViewState(); } + + class _HomeViewState extends State { + List bpmSecondes = [FlSpot(0, 30)]; + List bpmSecondes2 = []; + double calories = 0.0; + List vitesseSecondes = [FlSpot(0, 30)]; + List altitudeSecondes = [FlSpot(0, 30)]; + + TextEditingController bpmController = TextEditingController(); + + void normaliserDeuxiemeElement(List liste) { + // Trouver le plus grand élément dans la liste + double maxElement = 0.0; + for (var spot in liste) { + if (spot.y > maxElement) { + maxElement = spot.y; + } + } + + // Calculer le facteur de normalisation + double normalisationFactor = maxElement != 0.0 ? 100 / maxElement : 1.0; + + // Mettre à jour tous les éléments de la liste + for (int i = 0; i < liste.length; i++) { + liste[i] = FlSpot(liste[i].x, liste[i].y * normalisationFactor); + } + } List lastWorkoutArr = [ { "name": "Full Body Workout", @@ -44,8 +74,6 @@ class _HomeViewState extends State { ]; List showingTooltipOnSpots = [0]; - List allSpots = [FlSpot(0, 20)]; - List waterArr = [ {"title": "6am - 8am", "subtitle": "600ml"}, {"title": "9am - 11am", "subtitle": "500ml"}, @@ -56,12 +84,36 @@ class _HomeViewState extends State { @override Widget build(BuildContext context) { + print("test1"); + + print("test2"); + var media = MediaQuery.of(context).size; + print("test3"); + + + + if (Provider.of(context, listen: true).listActivity.isNotEmpty) { + print("rempli"); + bpmSecondes = Provider.of(context).listActivity[0].getHeartRateWithTime(); + vitesseSecondes = Provider.of(context).listActivity[0].getSpeedWithTime(); + altitudeSecondes = Provider.of(context).listActivity[0].getAltitudeWithTime(); + calories = Provider.of(context).listActivity[0].getCalories()[0].y; + + normaliserDeuxiemeElement(vitesseSecondes); + normaliserDeuxiemeElement(altitudeSecondes); + bpmSecondes2 = List.from(bpmSecondes) ; + normaliserDeuxiemeElement(bpmSecondes2); + + } else { + print("vide"); + } + print("test4"); + final lineBarsData = [ LineChartBarData( - showingIndicators: showingTooltipOnSpots, - spots: allSpots, + spots: bpmSecondes, isCurved: false, barWidth: 2, belowBarData: BarAreaData( @@ -77,6 +129,7 @@ class _HomeViewState extends State { ), ), ]; + print("test5"); final tooltipsOnBar = lineBarsData[0]; @@ -276,31 +329,25 @@ class _HomeViewState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - "Graph 2 ( rhythme cardiaque )", + "Rythme cardiaque", style: TextStyle( color: TColor.black, fontSize: 16, fontWeight: FontWeight.w700), ), - ShaderMask( - blendMode: BlendMode.srcIn, - shaderCallback: (bounds) { - return LinearGradient( - colors: TColor.primaryG, - begin: Alignment.centerLeft, - end: Alignment.centerRight) - .createShader(Rect.fromLTRB( - 0, 0, bounds.width, bounds.height)); - }, - child: Text( - "78 BPM", - style: TextStyle( + TextField( + controller: bpmController, + readOnly: true, + style: TextStyle( color: - TColor.primaryColor1.withOpacity(0.7), + TColor.primaryColor1.withOpacity(0.8), fontWeight: FontWeight.w700, fontSize: 18), + decoration: InputDecoration( + border: InputBorder.none, // Ajoutez cette ligne pour supprimer la bordure + ), ), - ), + ], ), ), @@ -367,12 +414,12 @@ class _HomeViewState extends State { touchTooltipData: LineTouchTooltipData( tooltipBgColor: TColor.secondaryColor1, tooltipRoundedRadius: 20, - getTooltipItems: - (List lineBarsSpot) { + getTooltipItems: (List lineBarsSpot) { return lineBarsSpot.map((lineBarSpot) { + bpmController.text = "${lineBarSpot.y} BPM"; return LineTooltipItem( - "il y a ${lineBarSpot.x.toInt()} minutes", - const TextStyle( + "Seconde ${lineBarSpot.x.toInt() / 10}", + TextStyle( color: Colors.white, fontSize: 10, fontWeight: FontWeight.bold, @@ -383,8 +430,8 @@ class _HomeViewState extends State { ), ), lineBarsData: lineBarsData, - minY: 0, - maxY: 130, + minY: 50, + maxY: 250, titlesData: FlTitlesData( show: false, ), @@ -654,7 +701,7 @@ class _HomeViewState extends State { 0, 0, bounds.width, bounds.height)); }, child: Text( - "760 kCal", + '${calories.toString()} kCal', style: TextStyle( color: TColor.white.withOpacity(0.7), fontWeight: FontWeight.w700, @@ -682,7 +729,7 @@ class _HomeViewState extends State { ), child: FittedBox( child: Text( - "230kCal\nrestantes", + '${200-calories.toInt()} kCal\n restantes', textAlign: TextAlign.center, style: TextStyle( color: TColor.white, @@ -695,7 +742,7 @@ class _HomeViewState extends State { backStrokeWidth: 10, progressColors: TColor.primaryG, backColor: Colors.grey.shade100, - valueNotifier: ValueNotifier(50), + valueNotifier: ValueNotifier(calories/200*100), startAngle: -180, ), ], @@ -715,41 +762,12 @@ class _HomeViewState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - "graph 5", + "Rythme cardique et vitesse", style: TextStyle( color: TColor.black, fontSize: 16, fontWeight: FontWeight.w700), ), - Container( - height: 30, - padding: const EdgeInsets.symmetric(horizontal: 8), - decoration: BoxDecoration( - gradient: LinearGradient(colors: TColor.primaryG), - borderRadius: BorderRadius.circular(15), - ), - child: DropdownButtonHideUnderline( - child: DropdownButton( - items: ["Semaine", "Mois"] - .map((name) => DropdownMenuItem( - value: name, - child: Text( - name, - style: TextStyle( - color: TColor.gray, fontSize: 14), - ), - )) - .toList(), - onChanged: (value) {}, - icon: Icon(Icons.expand_more, color: TColor.white), - hint: Text( - "Semaine", - textAlign: TextAlign.center, - style: - TextStyle(color: TColor.white, fontSize: 12), - ), - ), - )), ], ), SizedBox( @@ -824,7 +842,7 @@ class _HomeViewState extends State { getTooltipItems: (List lineBarsSpot) { return lineBarsSpot.map((lineBarSpot) { return LineTooltipItem( - "il y a ${lineBarSpot.x.toInt()} minutes", + "Seconde ${lineBarSpot.x.toInt()/10} ", const TextStyle( color: Colors.white, fontSize: 10, @@ -836,15 +854,13 @@ class _HomeViewState extends State { ), ), lineBarsData: lineBarsData1, - minY: -0.5, + minY: 0, maxY: 110, titlesData: FlTitlesData( show: true, leftTitles: AxisTitles(), topTitles: AxisTitles(), - bottomTitles: AxisTitles( - sideTitles: bottomTitles, - ), + bottomTitles: AxisTitles(), rightTitles: AxisTitles( sideTitles: rightTitles, )), @@ -882,11 +898,7 @@ class _HomeViewState extends State { ); } - void updateChartData(List newData) { - setState(() { - allSpots = newData; - }); - } + List showingSections() { return List.generate( @@ -947,15 +959,7 @@ class _HomeViewState extends State { isStrokeCapRound: true, dotData: FlDotData(show: false), belowBarData: BarAreaData(show: false), - spots: const [ - FlSpot(1, 35), - FlSpot(2, 70), - FlSpot(3, 40), - FlSpot(4, 80), - FlSpot(5, 25), - FlSpot(6, 70), - FlSpot(7, 35), - ], + spots: vitesseSecondes, ); LineChartBarData get lineChartBarData1_2 => LineChartBarData( @@ -970,15 +974,8 @@ class _HomeViewState extends State { belowBarData: BarAreaData( show: false, ), - spots: const [ - FlSpot(1, 80), - FlSpot(2, 50), - FlSpot(3, 90), - FlSpot(4, 40), - FlSpot(5, 80), - FlSpot(6, 35), - FlSpot(7, 60), - ], + spots: bpmSecondes2 + , ); SideTitles get rightTitles => SideTitles( @@ -1023,8 +1020,8 @@ class _HomeViewState extends State { SideTitles get bottomTitles => SideTitles( showTitles: true, - reservedSize: 32, - interval: 1, + reservedSize: 50, + interval:1, getTitlesWidget: bottomTitleWidgets, ); diff --git a/lib/view/login/login_view.dart b/lib/view/login/login_view.dart index 5696e8d..afd7883 100644 --- a/lib/view/login/login_view.dart +++ b/lib/view/login/login_view.dart @@ -5,6 +5,7 @@ import 'package:provider/provider.dart'; import 'package:smartfit_app_mobile/Modele/Api/i_data_strategy.dart'; import 'package:smartfit_app_mobile/Modele/Api/request_api.dart'; import 'package:smartfit_app_mobile/Modele/user.dart'; +import 'package:smartfit_app_mobile/View/activity/list_activity.dart'; import 'package:smartfit_app_mobile/View/page_test.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common_widget/round_button.dart'; @@ -153,7 +154,7 @@ class _LoginViewState extends State { Navigator.push( context, MaterialPageRoute( - builder: (context) => const TestPage())); + builder: (context) => const ListActivity())); } } else { setState(() { diff --git a/lib/view/main_tab/main_tab_view.dart b/lib/view/main_tab/main_tab_view.dart index 85e45f1..d45f62b 100644 --- a/lib/view/main_tab/main_tab_view.dart +++ b/lib/view/main_tab/main_tab_view.dart @@ -1,3 +1,4 @@ +import 'package:smartfit_app_mobile/View/activity/list_activity.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common_widget/tab_button.dart'; import 'package:smartfit_app_mobile/view/activity/activity.dart'; @@ -29,8 +30,8 @@ class _MainTabViewState extends State { height: 70, child: InkWell( onTap: () { - selectTab = 0; - currentTab = const TestPage(); + selectTab = 4; + currentTab = const ListActivity(); if (mounted) { setState(() {}); } diff --git a/lib/view/page_test.dart b/lib/view/page_test.dart index ac26eab..ff46054 100644 --- a/lib/view/page_test.dart +++ b/lib/view/page_test.dart @@ -1,4 +1,4 @@ -import 'dart:convert'; +/*import 'dart:convert'; import 'package:crypto/crypto.dart'; import 'package:flutter/material.dart'; @@ -73,7 +73,12 @@ class _TestPage extends State { print("t"); } else { List result = await x.readFitFile(y!); - //print(x.getHeartRateWithTime(ActivityOfUser(result))); + print("test11"); + print(result); + print("test22"); + print(ActivityOfUser(result).getHeartRateWithTime()); + print("test33"); + Provider.of(context, listen: false).addActivity(ActivityOfUser(result)); //print(x.getDistanceWithTime(ActivityOfUser(result))); //print(x.getDistance(ActivityOfUser(result))); //print(x.getAltitudeWithTime(ActivityOfUser(result))); @@ -205,6 +210,8 @@ class _TestPage extends State { onPressed: createUser, child: const Text("Create User")), ElevatedButton( onPressed: deleteUser, child: const Text("Delete User")), + ElevatedButton( + onPressed: readFile, child: const Text("ReadFile")), ElevatedButton(onPressed: getFiles, child: const Text("getFiles")), ElevatedButton( onPressed: modifAttribut, child: const Text("modif attribut")), @@ -380,4 +387,4 @@ class _MyHomePageState extends State { ); } } -*/ \ No newline at end of file +*/*/ \ No newline at end of file