diff --git a/assets/img/bpm2-icon.svg b/assets/img/bpm2-icon.svg new file mode 100644 index 0000000..5f0f5be --- /dev/null +++ b/assets/img/bpm2-icon.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/distance2-icon.svg b/assets/img/distance2-icon.svg new file mode 100644 index 0000000..8791f12 --- /dev/null +++ b/assets/img/distance2-icon.svg @@ -0,0 +1,531 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/img/time-icon2.svg b/assets/img/time-icon2.svg new file mode 100644 index 0000000..1d793f3 --- /dev/null +++ b/assets/img/time-icon2.svg @@ -0,0 +1,703 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/img/vitesse2-icon.svg b/assets/img/vitesse2-icon.svg new file mode 100644 index 0000000..ec7f96c --- /dev/null +++ b/assets/img/vitesse2-icon.svg @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/common_widget/container/workout_row/workout_row.dart b/lib/common_widget/container/workout_row/workout_row.dart new file mode 100644 index 0000000..491809d --- /dev/null +++ b/lib/common_widget/container/workout_row/workout_row.dart @@ -0,0 +1,58 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:simple_animation_progress_bar/simple_animation_progress_bar.dart'; +import 'package:smartfit_app_mobile/common/colo_extension.dart'; + +class WorkoutRow extends StatelessWidget { + final Map wObj; + const WorkoutRow({super.key, required this.wObj}); + + @override + Widget build(BuildContext context) { + 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: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + wObj["name"].toString(), + style: TextStyle( + color: TColor.black, + fontSize: 15, + fontWeight: FontWeight.bold), + ), + + Text( + "${ wObj["value"].toString()}", + style: TextStyle( + color: TColor.gray, + fontSize: 12,), + ), + + const SizedBox(height: 4,), + ], + )), + + ], + )); + } +} \ No newline at end of file diff --git a/lib/modele/local_db/objectbox.dart b/lib/modele/local_db/objectbox.dart index 8245880..1254879 100644 --- a/lib/modele/local_db/objectbox.dart +++ b/lib/modele/local_db/objectbox.dart @@ -1,10 +1,9 @@ import 'dart:convert'; import 'dart:io'; - +import 'package:objectbox/objectbox.dart'; import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/modele/activity.dart'; import 'package:smartfit_app_mobile/modele/activity_info/activity_info.dart'; -import 'package:smartfit_app_mobile/objectbox.g.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; import 'package:smartfit_app_mobile/modele/local_db/model.dart' as db; diff --git a/lib/view/home/prediction_view.dart b/lib/view/home/prediction_view.dart new file mode 100644 index 0000000..71c0641 --- /dev/null +++ b/lib/view/home/prediction_view.dart @@ -0,0 +1,147 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:smartfit_app_mobile/common/colo_extension.dart'; +import 'package:smartfit_app_mobile/common_widget/button/round_button.dart'; +import 'package:smartfit_app_mobile/common_widget/container/workout_row/workout_row.dart'; + +class Prediction extends StatefulWidget { + const Prediction({Key? key}) : super(key: key); + + @override + State createState() => _PredictionState(); +} + +class _PredictionState extends State { + List> lastWorkoutArr = [ + { + "name": "Temps", + "image": "assets/img/time-icon2.svg", + "value": "200 s", + }, + { + "name": "Rythme cardiaque", + "image": "assets/img/bpm2-icon.svg", + "value": "120 BPM", + }, + { + "name": "Vitesse", + "image": "assets/img/vitesse2-icon.svg", + "value": "3 m/s", + }, + { + "name": "Distance", + "image": "assets/img/distance2-icon.svg", + "value": "300 m", + } + ]; + + @override + Widget build(BuildContext context) { + var media = MediaQuery.of(context).size; + + return Scaffold( + body: Padding( + padding: EdgeInsets.symmetric(horizontal: 20.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 40), + Text( + "Prédiction", + style: TextStyle( + color: TColor.black, + fontSize: 22, + fontWeight: FontWeight.w700, + ), + ), + SizedBox(height: 20), + Row( + children: [ + + ], + ), + Container( + decoration: BoxDecoration( + color: TColor.lightGray, + boxShadow: [ + BoxShadow( + color: Color.fromARGB(255, 234, 234, 234).withOpacity(0.9), + spreadRadius: 2, + blurRadius: 5, + offset: Offset(0, 2), + ), + ], + borderRadius: BorderRadius.circular(15), + ), + child: Row( + children: [ + Container( + alignment: Alignment.center, + width: 50, + height: 50, + padding: const EdgeInsets.symmetric(horizontal: 15), + child: SvgPicture.asset( + "assets/img/Profile_tab.svg", + width: 20, + height: 20, + fit: BoxFit.contain, + ), + ), + Expanded( + child: DropdownButtonHideUnderline( + child: DropdownButton( + items: ["Walking", "Cycling"] + .map((name) => DropdownMenuItem( + value: name, + child: Text( + name, + style: TextStyle( + color: TColor.gray, + fontSize: 14, + ), + ), + )) + .toList(), + onChanged: (value) {}, + isExpanded: true, + hint: Text( + "Choisir type d'activité", + style: TextStyle( + color: TColor.gray, + fontSize: 12, + ), + ), + ), + ), + ), + // Bouton "Valider" prenant 30% de la largeur du parent + + ], + ), + ), + SizedBox(height: 20), + RoundButton( + title: "Valider", + onPressed: () async { + setState(() {}); + }), + SizedBox(height: 20), + ListView.builder( + padding: EdgeInsets.zero, + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: lastWorkoutArr.length, + itemBuilder: (context, index) { + var wObj = + lastWorkoutArr[index] as Map ?? {}; + return InkWell( + child: WorkoutRow(wObj: wObj), + ); + }, + ), + ], + ), + ), + ); + } +} diff --git a/lib/view/main_tab/mobile/mobile_main_tab_view.dart b/lib/view/main_tab/mobile/mobile_main_tab_view.dart index 7b42663..11b381e 100644 --- a/lib/view/main_tab/mobile/mobile_main_tab_view.dart +++ b/lib/view/main_tab/mobile/mobile_main_tab_view.dart @@ -4,6 +4,7 @@ import 'package:smartfit_app_mobile/common_widget/button/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/home/prediction_view.dart'; import 'package:smartfit_app_mobile/view/map/my_map.dart'; import 'package:smartfit_app_mobile/view/profile/profile_view.dart'; import 'package:smartfit_app_mobile/view/volumes/volumes_view.dart'; @@ -109,7 +110,7 @@ class _MobileMainTabViewState extends State { isActive: selectTab == 3, onTap: () { selectTab = 3; - currentTab = const MyMap(); + currentTab = const Prediction(); if (mounted) { setState(() {}); } diff --git a/lib/view/main_tab/web/web_main_tab_view.dart b/lib/view/main_tab/web/web_main_tab_view.dart index 8db932e..133ab4f 100644 --- a/lib/view/main_tab/web/web_main_tab_view.dart +++ b/lib/view/main_tab/web/web_main_tab_view.dart @@ -4,6 +4,7 @@ import 'package:smartfit_app_mobile/common_widget/button/tab_button.dart'; import 'package:smartfit_app_mobile/view/activity/list_activity.dart'; import 'package:smartfit_app_mobile/view/activity/activity.dart'; import 'package:smartfit_app_mobile/view/home/home_view.dart'; +import 'package:smartfit_app_mobile/view/home/prediction_view.dart'; import 'package:smartfit_app_mobile/view/map/my_map.dart'; import 'package:smartfit_app_mobile/view/profile/profile_view.dart'; import 'package:smartfit_app_mobile/view/volumes/volumes_view.dart'; @@ -86,7 +87,7 @@ class _WebMainTabViewState extends State { icon: "assets/img/prediction.svg", selectIcon: "assets/img/prediction_selected.svg", index: 3, - onTap: () => updateTab(3, const MyMap()), + onTap: () => updateTab(3, const Prediction()), ), sideBarButton( icon: "assets/img/mapIcon.svg",