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..0ad0460 --- /dev/null +++ b/lib/common_widget/workout_row.dart @@ -0,0 +1,93 @@ +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 c48104b..2266e89 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,8 +1,10 @@ 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/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() { runApp(ChangeNotifierProvider( 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 fa7da89..220e119 100644 --- a/lib/modele/user.dart +++ b/lib/modele/user.dart @@ -1,9 +1,26 @@ import 'package:flutter/material.dart'; import 'package:smartfit_app_mobile/modele/activity.dart'; +import 'package:smartfit_app_mobile/view/activity/list_activity.dart'; class User extends ChangeNotifier { String username = "VOID"; String email = "VOID"; String token = "VOID"; - List? listActivity; + List listActivity = List.empty(); + + 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..34e7bd5 --- /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/blank_view.dart b/lib/view/home/blank_view.dart new file mode 100644 index 0000000..427d01a --- /dev/null +++ b/lib/view/home/blank_view.dart @@ -0,0 +1,19 @@ + +import 'package:smartfit_app_mobile/common/colo_extension.dart'; +import 'package:flutter/material.dart'; + +class BlankView extends StatefulWidget { + const BlankView({super.key}); + + @override + State createState() => _BlankViewState(); +} + +class _BlankViewState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: TColor.white, + ); + } +} \ No newline at end of file diff --git a/lib/view/login/web/web_login_view.dart b/lib/view/login/web/web_login_view.dart index fd034c4..4cf8cd2 100644 --- a/lib/view/login/web/web_login_view.dart +++ b/lib/view/login/web/web_login_view.dart @@ -2,6 +2,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:smartfit_app_mobile/modele/utile/login_user.dart'; import 'package:smartfit_app_mobile/view/main_tab/main_tab_view.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/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'; import 'package:smartfit_app_mobile/common_widget/round_text_field.dart'; diff --git a/lib/view/main_tab/main_tab_view.dart b/lib/view/main_tab/main_tab_view.dart index a7bacf6..c5a46bf 100644 --- a/lib/view/main_tab/main_tab_view.dart +++ b/lib/view/main_tab/main_tab_view.dart @@ -1,9 +1,9 @@ -import 'package:smartfit_app_mobile/view/test/page_test.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'; import 'package:smartfit_app_mobile/view/home/home_view.dart'; import 'package:flutter/material.dart'; +import 'package:smartfit_app_mobile/view/activity/list_activity.dart'; import 'package:smartfit_app_mobile/view/map/my_map.dart'; import 'package:smartfit_app_mobile/view/profile/profile_view.dart'; @@ -29,8 +29,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 new file mode 100644 index 0000000..bc644d8 --- /dev/null +++ b/lib/view/page_test.dart @@ -0,0 +1,408 @@ +/*import 'dart:convert'; + +import 'package:crypto/crypto.dart'; +import 'package:flutter/foundation.dart' show kIsWeb; +import 'package:flutter/material.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:file_picker/file_picker.dart'; +import 'package:provider/provider.dart'; +import 'dart:io'; +import 'package:smartfit_app_mobile/modele/api/i_data_strategy.dart'; +import 'package:smartfit_app_mobile/modele/manager_file.dart'; +import 'package:smartfit_app_mobile/modele/user.dart'; +import 'package:smartfit_app_mobile/modele/api/request_api.dart'; +import 'package:tuple/tuple.dart'; + +// ----------- File --------------- // + +// Dossier de l'application +Future get _localPath async { + final directory = await getApplicationDocumentsDirectory(); + return directory.path; +} + +// Uri du fichier +Future get _localFile async { + final path = await _localPath; + return File('$path/counter.txt'); +} + +Future writeCounter(int counter) async { + final file = await _localFile; + // Write the file + return file.writeAsString('$counter'); +} + +Future readCounter() async { + try { + final file = await _localFile; + + // Read the file + final contents = await file.readAsString(); + + return int.parse(contents); + } catch (e) { + // If encountering an error, return 0 + return 0; + } +} + +String getPlatforme() { + if (kIsWeb) { + return "Web"; + } + if (Platform.isAndroid) { + return "Android"; + } + if (Platform.isWindows) { + return "Windows"; + } + if (Platform.isMacOS) { + return "MacOS"; + } + return "Null"; +} + +// File picker + +// ------------------------------------------------- // + +class TestPage extends StatefulWidget { + const TestPage({Key? key}) : super(key: key); + + @override + State createState() => _TestPage(); +} + +class _TestPage extends State { + // Lire un fichier avec picker + FilePickerResult? result; + IDataStrategy strategy = RequestApi(); + String platforme = getPlatforme(); + + //late File x = File(file.path); + Future readFile() 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(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))); + //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("1234", 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.eyJ1dWlkIjoiOGJiNDdmMDAtODJkNi0xMWVlLTkzMTMtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA1MjI4MTUyfQ.9ADC65f2rNI_llytvhA6tX0NM9_O3-2RlwPXqV0yYcI"; + 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.eyJ1dWlkIjoiOGJiNDdmMDAtODJkNi0xMWVlLTkzMTMtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA1MjI4MTUyfQ.9ADC65f2rNI_llytvhA6tX0NM9_O3-2RlwPXqV0yYcI"; + 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); + } + + @override + Widget build(BuildContext context) { + User w = context.watch(); + + return Scaffold( + body: Column( + children: [ + const Text('A random AWESOME idea:'), + const Text("User"), + + // ↓ Add this. + ElevatedButton( + onPressed: () { + print('button pressed!'); + }, + child: Text('Next'), + ), + ElevatedButton( + onPressed: () async { + result = await FilePicker.platform.pickFiles(); + if (result == null) { + print("No file selected"); + } else { + for (var element in result!.files) { + print(element.name); + } + } + }, + child: const Text("File - ")), + ElevatedButton(onPressed: login, child: const Text("Connexion")), + ElevatedButton( + 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")), + ElevatedButton( + onPressed: uploadFile, child: const Text("Upload File")), + ElevatedButton( + onPressed: getOneFile, child: const Text("Get One File")), + ElevatedButton( + onPressed: getInfoUser, child: const Text("Get info User")), + Text(platforme), + Text(w.email), + Text(context.watch().username), + Text(Provider.of(context).username) + ], + ), + ); + } +} + + +class MyHomePage extends StatefulWidget { + const MyHomePage({super.key, required this.title}); + + // This widget is the home page of your application. It is stateful, meaning + // that it has a State object (defined below) that contains fields that affect + // how it looks. + + // This class is the configuration for the state. It holds the values (in this + // case the title) provided by the parent (in this case the App widget) and + // used by the build method of the State. Fields in a Widget subclass are + // always marked "final". + + final String title; + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + int _counter = 0; + + void _incrementCounter() { + setState(() { + // This call to setState tells the Flutter framework that something has + // changed in this State, which causes it to rerun the build method below + // so that the display can reflect the updated values. If we changed + // _counter without calling setState(), then the build method would not be + // called again, and so nothing would appear to happen. + _counter++; + }); + } + + void _updateText(String text) { + setState(() { + test = text; + }); + } + + IDataStrategy tmp = RequestApi(); + //late Future val = tmp.GetFile("x", "x"); + late Future val = tmp.test(); + final TextEditingController _controller = TextEditingController(); + String test = "Null"; + + @override + Widget build(BuildContext context) { + // This method is rerun every time setState is called, for instance as done + // by the _incrementCounter method above. + // + // The Flutter framework has been optimized to make rerunning build methods + // fast, so that you can just rebuild anything that needs updating rather + // than having to individually change instances of widgets. + return Scaffold( + appBar: AppBar( + // TRY THIS: Try changing the color here to a specific color (to + // Colors.amber, perhaps?) and trigger a hot reload to see the AppBar + // change color while the other colors stay the same. + backgroundColor: Theme.of(context).colorScheme.inversePrimary, + // Here we take the value from the MyHomePage object that was created by + // the App.build method, and use it to set our appbar title. + title: Text(widget.title), + ), + + body: Center( + // Center is a layout widget. It takes a single child and positions it + // in the middle of the parent. + child: Column( + // Column is also a layout widget. It takes a list of children and + // arranges them vertically. By default, it sizes itself to fit its + // children horizontally, and tries to be as tall as its parent. + // + // Column has various properties to control how it sizes itself and + // how it positions its children. Here we use mainAxisAlignment to + // center the children vertically; the main axis here is the vertical + // axis because Columns are vertical (the cross axis would be + // horizontal). + // + // TRY THIS: Invoke "debug painting" (choose the "Toggle Debug Paint" + // action in the IDE, or press "p" in the console), to see the + // wireframe for each widget. + + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text('TEST'), + Text( + '$_counter', + style: Theme.of(context).textTheme.headlineMedium, + ), + FutureBuilder( + future: val, + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.done) { + if (snapshot.hasData) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [Text(snapshot.data!)], + ); + } + } else { + return const Text("FAIL"); + } + }, + ) + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: _incrementCounter, + tooltip: 'Increment', + child: const Icon(Icons.add), + ), // This trailing comma makes auto-formatting nicer for build methods. + body: Container( + alignment: Alignment.center, + padding: const EdgeInsets.all(8), + child: FutureBuilder( + future: val, + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.done) { + if (snapshot.hasData) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(snapshot.data!), + Text(test), + TextField( + controller: _controller, + decoration: const InputDecoration( + hintText: 'Enter Title', + ), + ), + ElevatedButton( + onPressed: () { + _updateText(_controller.text); + }, + child: const Text('Update Data'), + ), + ElevatedButton( + onPressed: () { + Navigator.of(context).push(MaterialPageRoute( + builder: (context) => const TestPage())); + }, + child: const Text("Changer de page")) + ], + ); + } else if (snapshot.hasError) { + return Text('${snapshot.error}'); + } + } + + return const CircularProgressIndicator(); + }, + ), + ), + ); + } +}*/ diff --git a/lib/view/test/page_test.dart b/lib/view/test/page_test.dart index 9ac922e..1101dfc 100644 --- a/lib/view/test/page_test.dart +++ b/lib/view/test/page_test.dart @@ -1,4 +1,4 @@ -import 'dart:convert'; +/*import 'dart:convert'; import 'package:crypto/crypto.dart'; import 'package:flutter/foundation.dart' show kIsWeb; @@ -89,7 +89,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))); @@ -223,6 +228,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")), @@ -401,4 +408,9 @@ class _MyHomePageState extends State { ), ); } +<<<<<<<< HEAD:lib/view/test/page_test.dart }*/ +======== +} +*/*/ +>>>>>>>> origin/master:lib/view/page_test.dart