merge master

pull/4/head
remrem 2 years ago
commit 76b32e69ff

@ -40,5 +40,5 @@ steps:
- unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/
- export PATH=$SONAR_SCANNER_HOME/bin:$PATH
- export SONAR_SCANNER_OPTS="-server"
- sonar-scanner -D sonar.projectKey=SmartFit_Mobile -D sonar.sources=. -D sonar.host.url=https://codefirst.iut.uca.fr/sonar -D sonar.login=$${SONAR_TOKEN}
- sonar-scanner -D sonar.projectKey=SmartFit_Mobile -D sonar.sources=./lib -D sonar.host.url=https://codefirst.iut.uca.fr/sonar -D sonar.login=$${SONAR_TOKEN}
depends_on: [ build-apk, build-web ]

@ -0,0 +1,81 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/common_widget/container/workout_row.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/modele/utile/list_activity/list_activity_utile.dart';
import 'package:tuple/tuple.dart';
class ListActivity extends StatefulWidget {
const ListActivity({Key? key}) : super(key: key);
@override
State<ListActivity> createState() => _ListActivity();
}
class _ListActivity extends State<ListActivity> {
final ListActivityUtile _utile = ListActivityUtile();
@override
Widget build(BuildContext context) {
return Material(
color: Colors.transparent,
child: ListView.builder(
padding: EdgeInsets.zero,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: Provider.of<User>(context, listen: true).listActivity.length,
itemBuilder: (context, index) {
var activityObj =
Provider.of<User>(context, listen: true).listActivity[index];
var activityMap = activityObj.toMap();
return InkWell(
onTap: () {},
child: WorkoutRow(
wObj: activityMap,
onDelete: () async {
if (await _utile.deleteFileOnBDD(
Provider.of<User>(context, listen: false).token,
activityObj.fileUuid)) {
if (!Provider.of<User>(context, listen: false)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid)) {
Provider.of<User>(context, listen: false)
.managerSelectedActivity
.removeSelectedActivity(activityObj.fileUuid);
}
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
}
},
onClick: () async {
if (!Provider.of<User>(context, listen: false)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid)) {
Provider.of<User>(context, listen: false)
.managerSelectedActivity
.removeSelectedActivity(activityObj.fileUuid);
return;
}
Tuple2<bool, String> result =
await _utile.getContentActivity(context, activityObj);
if (!result.item1) {
return;
}
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
Provider.of<User>(context, listen: false)
.insertActivity(0, activityObj);
},
isSelected: !Provider.of<User>(context)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid),
),
);
},
),
);
}
}

@ -0,0 +1,75 @@
import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/setting_row.dart';
import 'package:smartfit_app_mobile/view/profile/change_email.dart';
import 'package:smartfit_app_mobile/view/profile/change_password.dart';
import 'package:smartfit_app_mobile/view/profile/change_username.dart';
class ProfileCompte extends StatelessWidget {
const ProfileCompte(this.accountArr, {super.key});
final List accountArr;
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 15),
decoration: BoxDecoration(
color: TColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: const [BoxShadow(color: Colors.black12, blurRadius: 2)]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Compte",
style: TextStyle(
color: TColor.black,
fontSize: 16,
fontWeight: FontWeight.w700,
),
),
const SizedBox(
height: 8,
),
ListView.builder(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: accountArr.length,
itemBuilder: (context, index) {
var iObj = accountArr[index];
return SettingRow(
icon: iObj["image"]!,
title: iObj["name"]!,
onPressed: () {
if (iObj["tag"] == "1") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ChangeUsernameView(),
),
);
} else if (iObj["tag"] == "2") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ChangePasswordView(),
),
);
} else {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ChangeEmailView(),
),
);
}
},
);
},
),
],
),
);
}
}

@ -0,0 +1,62 @@
import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/button/round_button.dart';
class ProfileEntete extends StatelessWidget {
const ProfileEntete(this.username, {super.key});
final String username;
@override
Widget build(BuildContext context) {
return Row(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(30),
child: Image.asset(
"assets/img/u1.png",
width: 50,
height: 50,
fit: BoxFit.cover,
),
),
const SizedBox(
width: 15,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
username,
style: TextStyle(
color: TColor.black,
fontSize: 14,
fontWeight: FontWeight.w500,
),
),
Text(
"Course à pied",
style: TextStyle(
color: TColor.gray,
fontSize: 12,
),
)
],
),
),
SizedBox(
width: 70,
height: 25,
child: RoundButton(
title: "Editer",
type: RoundButtonType.bgGradient,
fontSize: 12,
fontWeight: FontWeight.w400,
onPressed: () {},
),
)
],
);
}
}

@ -0,0 +1,38 @@
import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/common_widget/title_subtitle_cell.dart';
class ProfileInfoUser extends StatelessWidget {
const ProfileInfoUser({super.key});
@override
Widget build(BuildContext context) {
return const Row(
children: [
Expanded(
child: TitleSubtitleCell(
title: "??? cm",
subtitle: "Taille",
),
),
SizedBox(
width: 15,
),
Expanded(
child: TitleSubtitleCell(
title: "?? kg",
subtitle: "Poids",
),
),
SizedBox(
width: 15,
),
Expanded(
child: TitleSubtitleCell(
title: "?? ans",
subtitle: "Age",
),
),
],
);
}
}

@ -0,0 +1,117 @@
import 'package:animated_toggle_switch/animated_toggle_switch.dart';
import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
class ProfileNotification extends StatefulWidget {
const ProfileNotification(this.positive, {Key? key}) : super(key: key);
final bool positive;
@override
State<ProfileNotification> createState() => _ProfileNotification();
}
class _ProfileNotification extends State<ProfileNotification> {
@override
Widget build(BuildContext context) {
bool check = widget.positive;
return Container(
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 15),
decoration: BoxDecoration(
color: TColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: const [BoxShadow(color: Colors.black12, blurRadius: 2)]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Notification",
style: TextStyle(
color: TColor.black,
fontSize: 16,
fontWeight: FontWeight.w700,
),
),
const SizedBox(
height: 8,
),
SizedBox(
height: 30,
child:
Row(crossAxisAlignment: CrossAxisAlignment.center, children: [
Image.asset("assets/img/p_notification.png",
height: 15, width: 15, fit: BoxFit.contain),
const SizedBox(
width: 15,
),
Expanded(
child: Text(
"Push Notifications",
style: TextStyle(
color: TColor.black,
fontSize: 12,
),
),
),
CustomAnimatedToggleSwitch<bool>(
current: check,
values: const [false, true],
spacing: 0.0,
indicatorSize: const Size.square(25.0),
animationDuration: const Duration(milliseconds: 200),
animationCurve: Curves.linear,
onChanged: (b) => setState(() => check = b),
iconBuilder: (context, local, global) {
return const SizedBox();
},
cursors: const ToggleCursors(
defaultCursor: SystemMouseCursors.click),
onTap: (_) => setState(() => check = !check),
iconsTappable: false,
wrapperBuilder: (context, global, child) {
return Stack(
alignment: Alignment.center,
children: [
Positioned(
left: 10.0,
right: 10.0,
height: 20.0,
child: DecoratedBox(
decoration: BoxDecoration(
gradient:
LinearGradient(colors: TColor.secondaryG),
borderRadius:
const BorderRadius.all(Radius.circular(50.0)),
),
)),
child,
],
);
},
foregroundIndicatorBuilder: (context, global) {
return SizedBox.fromSize(
size: const Size(5, 5),
child: DecoratedBox(
decoration: BoxDecoration(
color: TColor.white,
borderRadius:
const BorderRadius.all(Radius.circular(50.0)),
boxShadow: const [
BoxShadow(
color: Colors.black38,
spreadRadius: 0.05,
blurRadius: 1.1,
offset: Offset(0.0, 0.8))
],
),
),
);
},
),
]),
)
],
),
);
}
}

@ -0,0 +1,70 @@
import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/setting_row.dart';
import 'package:smartfit_app_mobile/view/profile/contact_us_view.dart';
import 'package:smartfit_app_mobile/view/profile/policy_view.dart';
class ProfileOther extends StatelessWidget {
const ProfileOther(this.otherArr, {super.key});
final List otherArr;
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 15),
decoration: BoxDecoration(
color: TColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: const [BoxShadow(color: Colors.black12, blurRadius: 2)]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Autre",
style: TextStyle(
color: TColor.black,
fontSize: 16,
fontWeight: FontWeight.w700,
),
),
const SizedBox(
height: 8,
),
ListView.builder(
physics: const NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,
shrinkWrap: true,
itemCount: otherArr.length,
itemBuilder: (context, index) {
var iObj = otherArr[index] as Map? ?? {};
return SettingRow(
icon: iObj["image"].toString(),
title: iObj["name"].toString(),
onPressed: () {
if (iObj["tag"] == "6") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const PrivacyPolicyView(),
),
);
} else if (iObj["tag"] == "5") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ContactUsView(),
),
);
} else {
// Autre logique si nécessaire pour d'autres éléments de la liste
}
},
);
},
)
],
),
);
}
}

@ -1,11 +1,7 @@
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:responsive_builder/responsive_builder.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/graph/mobile/mobile_altitude_by_time.dart';
import 'package:smartfit_app_mobile/common_widget/graph/web/web_altitude_by_time.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 {
@ -20,11 +16,11 @@ class GraphAltitudeByTime extends StatefulWidget {
}
class _GraphAltitudeByTime extends State<GraphAltitudeByTime> {
@override
@override
Widget build(BuildContext context) {
return ScreenTypeLayout.builder(
mobile: (_) => MobileGraphAltitudeByTime(widget.media, widget.data),
desktop: (_) => WebGraphAltitudeByTime(widget.media, widget.data),
mobile: (_) => MobileGraphAltitudeByTime(widget.media, widget.data),
desktop: (_) => WebGraphAltitudeByTime(widget.media, widget.data),
);
}
}
}

@ -1,7 +1,6 @@
import 'package:fl_chart/fl_chart.dart';
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/graph/data_for_graph/func_bpm_and_speed_by_time.dart';
import 'package:smartfit_app_mobile/common_widget/graph/mobile/mobile_bpm_and_speed_by_time.dart';
import 'package:smartfit_app_mobile/common_widget/graph/web/web_bpm_and_speed_by_time.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';
@ -18,11 +17,15 @@ class GraphBpmAndSpeedByTime extends StatefulWidget {
}
class _GraphBpmAndSpeedByTime extends State<GraphBpmAndSpeedByTime> {
@override
@override
Widget build(BuildContext context) {
final FuncBpmAndSpeedByTime func = FuncBpmAndSpeedByTime(widget.data);
return ScreenTypeLayout.builder(
mobile: (_) => MobileGraphBpmAndSpeedByTime(widget.media, widget.data),
desktop: (_) => WebGraphBpmAndSpeedByTime(widget.media, widget.data),
mobile: (_) =>
MobileGraphBpmAndSpeedByTime(widget.media, widget.data, func),
desktop: (_) =>
WebGraphBpmAndSpeedByTime(widget.media, widget.data, func),
);
}
}
}

@ -0,0 +1,105 @@
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';
class FuncBpmAndSpeedByTime {
final DataHomeView data;
FuncBpmAndSpeedByTime(this.data);
List<int> showingTooltipOnSpots = [0];
SideTitles get rightTitles => SideTitles(
getTitlesWidget: rightTitleWidgets,
showTitles: true,
interval: 20,
reservedSize: 40,
);
late final lineBarsData = [
LineChartBarData(
spots: data.bpmSecondes,
isCurved: false,
barWidth: 2,
belowBarData: BarAreaData(
show: true,
gradient: LinearGradient(colors: [
TColor.secondaryColor1.withOpacity(0.4),
TColor.secondaryColor2.withOpacity(0.1),
], begin: Alignment.topCenter, end: Alignment.bottomCenter),
),
dotData: const FlDotData(show: false),
gradient: LinearGradient(
colors: TColor.secondaryG,
),
),
];
late final tooltipsOnBar = lineBarsData[0];
Widget rightTitleWidgets(double value, TitleMeta meta) {
String text;
switch (value.toInt()) {
case 0:
text = '0%';
break;
case 20:
text = '20%';
break;
case 40:
text = '40%';
break;
case 60:
text = '60%';
break;
case 80:
text = '80%';
break;
case 100:
text = '100%';
break;
default:
return Container();
}
return Text(text,
style: TextStyle(
color: TColor.gray,
fontSize: 12,
),
textAlign: TextAlign.center);
}
List<LineChartBarData> get lineBarsData1 => [
lineChartBarData1_1,
lineChartBarData1_2,
];
LineChartBarData get lineChartBarData1_1 => LineChartBarData(
isCurved: true,
gradient: LinearGradient(colors: [
TColor.primaryColor2.withOpacity(0.5),
TColor.primaryColor1.withOpacity(0.5),
]),
barWidth: 4,
isStrokeCapRound: true,
dotData: const FlDotData(show: false),
belowBarData: BarAreaData(show: false),
spots: data.vitesseSecondes,
);
LineChartBarData get lineChartBarData1_2 => LineChartBarData(
isCurved: true,
gradient: LinearGradient(colors: [
TColor.secondaryColor2.withOpacity(0.5),
TColor.secondaryColor1.withOpacity(0.5),
]),
barWidth: 2,
isStrokeCapRound: true,
dotData: const FlDotData(show: false),
belowBarData: BarAreaData(
show: false,
),
spots: data.bpmSecondes2,
);
}

@ -1,15 +1,16 @@
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/common_widget/graph/data_for_graph/func_bpm_and_speed_by_time.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';
class MobileGraphBpmAndSpeedByTime extends StatefulWidget {
final Size media;
final DataHomeView data;
final FuncBpmAndSpeedByTime func;
const MobileGraphBpmAndSpeedByTime(this.media, this.data, {Key? key})
const MobileGraphBpmAndSpeedByTime(this.media, this.data, this.func,
{Key? key})
: super(key: key);
@override
@ -21,81 +22,6 @@ class _MobileGraphBpmAndSpeedByTime
extends State<MobileGraphBpmAndSpeedByTime> {
TextEditingController bpmController = TextEditingController();
List<int> showingTooltipOnSpots = [0];
SideTitles get rightTitles => SideTitles(
getTitlesWidget: rightTitleWidgets,
showTitles: true,
interval: 20,
reservedSize: 40,
);
Widget rightTitleWidgets(double value, TitleMeta meta) {
String text;
switch (value.toInt()) {
case 0:
text = '0%';
break;
case 20:
text = '20%';
break;
case 40:
text = '40%';
break;
case 60:
text = '60%';
break;
case 80:
text = '80%';
break;
case 100:
text = '100%';
break;
default:
return Container();
}
return Text(text,
style: TextStyle(
color: TColor.gray,
fontSize: 12,
),
textAlign: TextAlign.center);
}
List<LineChartBarData> get lineBarsData1 => [
lineChartBarData1_1,
lineChartBarData1_2,
];
LineChartBarData get lineChartBarData1_1 => LineChartBarData(
isCurved: true,
gradient: LinearGradient(colors: [
TColor.primaryColor2.withOpacity(0.5),
TColor.primaryColor1.withOpacity(0.5),
]),
barWidth: 4,
isStrokeCapRound: true,
dotData: const FlDotData(show: false),
belowBarData: BarAreaData(show: false),
spots: widget.data.vitesseSecondes,
);
LineChartBarData get lineChartBarData1_2 => LineChartBarData(
isCurved: true,
gradient: LinearGradient(colors: [
TColor.secondaryColor2.withOpacity(0.5),
TColor.secondaryColor1.withOpacity(0.5),
]),
barWidth: 2,
isStrokeCapRound: true,
dotData: const FlDotData(show: false),
belowBarData: BarAreaData(
show: false,
),
spots: widget.data.bpmSecondes2,
);
@override
Widget build(BuildContext context) {
final double maxY = widget.data.maxBPM + 2;
@ -103,25 +29,6 @@ class _MobileGraphBpmAndSpeedByTime
final double maxX =
widget.data.bpmSecondes[widget.data.bpmSecondes.length - 1].x;
const double minX = 0.0;
final lineBarsData = [
LineChartBarData(
spots: widget.data.bpmSecondes,
isCurved: false,
barWidth: 2,
belowBarData: BarAreaData(
show: true,
gradient: LinearGradient(colors: [
TColor.secondaryColor1.withOpacity(0.4),
TColor.secondaryColor2.withOpacity(0.1),
], begin: Alignment.topCenter, end: Alignment.bottomCenter),
),
dotData: const FlDotData(show: false),
gradient: LinearGradient(
colors: TColor.secondaryG,
),
),
];
final tooltipsOnBar = lineBarsData[0];
return Container(
padding: const EdgeInsets.only(left: 15),
@ -129,12 +36,13 @@ class _MobileGraphBpmAndSpeedByTime
width: double.maxFinite,
child: LineChart(
LineChartData(
showingTooltipIndicators: showingTooltipOnSpots.map((index) {
showingTooltipIndicators:
widget.func.showingTooltipOnSpots.map((index) {
return ShowingTooltipIndicators([
LineBarSpot(
tooltipsOnBar,
lineBarsData.indexOf(tooltipsOnBar),
tooltipsOnBar.spots[index],
widget.func.tooltipsOnBar,
widget.func.lineBarsData.indexOf(widget.func.tooltipsOnBar),
widget.func.tooltipsOnBar.spots[index],
),
]);
}).toList(),
@ -147,9 +55,9 @@ class _MobileGraphBpmAndSpeedByTime
}
if (event is FlTapUpEvent) {
final spotIndex = response.lineBarSpots!.first.spotIndex;
showingTooltipOnSpots.clear();
widget.func.showingTooltipOnSpots.clear();
setState(() {
showingTooltipOnSpots.add(spotIndex);
widget.func.showingTooltipOnSpots.add(spotIndex);
});
}
},
@ -197,7 +105,7 @@ class _MobileGraphBpmAndSpeedByTime
},
),
),
lineBarsData: lineBarsData1,
lineBarsData: widget.func.lineBarsData1,
minY: 0,
maxY: 110,
titlesData: FlTitlesData(

@ -1,8 +1,6 @@
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 MobileBpmByTime extends StatefulWidget {

@ -1,15 +1,15 @@
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/common_widget/graph/data_for_graph/func_bpm_and_speed_by_time.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';
class WebGraphBpmAndSpeedByTime extends StatefulWidget {
final Size media;
final DataHomeView data;
final FuncBpmAndSpeedByTime func;
const WebGraphBpmAndSpeedByTime(this.media, this.data, {Key? key})
const WebGraphBpmAndSpeedByTime(this.media, this.data, this.func, {Key? key})
: super(key: key);
@override
@ -20,81 +20,6 @@ class WebGraphBpmAndSpeedByTime extends StatefulWidget {
class _WebGraphBpmAndSpeedByTime extends State<WebGraphBpmAndSpeedByTime> {
TextEditingController bpmController = TextEditingController();
List<int> showingTooltipOnSpots = [0];
SideTitles get rightTitles => SideTitles(
getTitlesWidget: rightTitleWidgets,
showTitles: true,
interval: 20,
reservedSize: 40,
);
Widget rightTitleWidgets(double value, TitleMeta meta) {
String text;
switch (value.toInt()) {
case 0:
text = '0%';
break;
case 20:
text = '20%';
break;
case 40:
text = '40%';
break;
case 60:
text = '60%';
break;
case 80:
text = '80%';
break;
case 100:
text = '100%';
break;
default:
return Container();
}
return Text(text,
style: TextStyle(
color: TColor.gray,
fontSize: 12,
),
textAlign: TextAlign.center);
}
List<LineChartBarData> get lineBarsData1 => [
lineChartBarData1_1,
lineChartBarData1_2,
];
LineChartBarData get lineChartBarData1_1 => LineChartBarData(
isCurved: true,
gradient: LinearGradient(colors: [
TColor.primaryColor2.withOpacity(0.5),
TColor.primaryColor1.withOpacity(0.5),
]),
barWidth: 4,
isStrokeCapRound: true,
dotData: const FlDotData(show: false),
belowBarData: BarAreaData(show: false),
spots: widget.data.vitesseSecondes,
);
LineChartBarData get lineChartBarData1_2 => LineChartBarData(
isCurved: true,
gradient: LinearGradient(colors: [
TColor.secondaryColor2.withOpacity(0.5),
TColor.secondaryColor1.withOpacity(0.5),
]),
barWidth: 2,
isStrokeCapRound: true,
dotData: const FlDotData(show: false),
belowBarData: BarAreaData(
show: false,
),
spots: widget.data.bpmSecondes2,
);
@override
Widget build(BuildContext context) {
final double maxY = widget.data.maxBPM + 2;
@ -103,38 +28,19 @@ class _WebGraphBpmAndSpeedByTime extends State<WebGraphBpmAndSpeedByTime> {
widget.data.bpmSecondes[widget.data.bpmSecondes.length - 1].x;
const double minX = 0.0;
final lineBarsData = [
LineChartBarData(
spots: widget.data.bpmSecondes,
isCurved: false,
barWidth: 2,
belowBarData: BarAreaData(
show: true,
gradient: LinearGradient(colors: [
TColor.secondaryColor1.withOpacity(0.4),
TColor.secondaryColor2.withOpacity(0.1),
], begin: Alignment.topCenter, end: Alignment.bottomCenter),
),
dotData: const FlDotData(show: false),
gradient: LinearGradient(
colors: TColor.secondaryG,
),
),
];
final tooltipsOnBar = lineBarsData[0];
return Container(
padding: const EdgeInsets.only(left: 15),
height: widget.media.width * 0.20,
width: widget.media.width * 0.35,
child: LineChart(
LineChartData(
showingTooltipIndicators: showingTooltipOnSpots.map((index) {
showingTooltipIndicators:
widget.func.showingTooltipOnSpots.map((index) {
return ShowingTooltipIndicators([
LineBarSpot(
tooltipsOnBar,
lineBarsData.indexOf(tooltipsOnBar),
tooltipsOnBar.spots[index],
widget.func.tooltipsOnBar,
widget.func.lineBarsData.indexOf(widget.func.tooltipsOnBar),
widget.func.tooltipsOnBar.spots[index],
),
]);
}).toList(),
@ -147,9 +53,9 @@ class _WebGraphBpmAndSpeedByTime extends State<WebGraphBpmAndSpeedByTime> {
}
if (event is FlTapUpEvent) {
final spotIndex = response.lineBarSpots!.first.spotIndex;
showingTooltipOnSpots.clear();
widget.func.showingTooltipOnSpots.clear();
setState(() {
showingTooltipOnSpots.add(spotIndex);
widget.func.showingTooltipOnSpots.add(spotIndex);
});
}
},
@ -197,13 +103,13 @@ class _WebGraphBpmAndSpeedByTime extends State<WebGraphBpmAndSpeedByTime> {
},
),
),
lineBarsData: lineBarsData1,
lineBarsData: widget.func.lineBarsData1,
minY: 0,
maxY: 110,
titlesData: FlTitlesData(
show: true,
leftTitles: AxisTitles(
sideTitles: rightTitles,
sideTitles: widget.func.rightTitles,
),
topTitles: const AxisTitles(),
bottomTitles: AxisTitles(

@ -24,7 +24,7 @@ class _WebBpmByTime extends State<WebBpmByTime> {
context.watch<User>().managerSelectedActivity.getMinBpm() - 2;
final double maxX =
widget.data.bpmSecondes[widget.data.bpmSecondes.length - 1].x;
final double minX = 0.0;
const double minX = 0.0;
final lineBarsData = [
LineChartBarData(
spots: widget.data.bpmSecondes,

@ -22,11 +22,11 @@ class Info extends StatelessWidget {
}
class Stats extends StatelessWidget {
String value;
String unit;
String label;
final String value;
final String unit;
final String label;
Stats({
const Stats({
Key? key,
required this.value,
required this.unit,
@ -50,7 +50,7 @@ class Stats extends StatelessWidget {
const TextSpan(text: ' '),
TextSpan(
text: unit,
style: TextStyle(
style: const TextStyle(
fontSize: 10,
fontWeight: FontWeight.w500,
),

@ -1,9 +1,7 @@
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/manager_file.dart';
import 'package:smartfit_app_mobile/modele/manager_selected_activity.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';

@ -1,4 +1,5 @@
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:csv/csv.dart';
import 'package:flutter/material.dart';
@ -77,4 +78,27 @@ class ListActivityUtile {
}
return const Tuple2(true, "Yeah");
}
Future<bool> deleteFileOnBDD(String token, String fileUuid) async {
Tuple2<bool, String> result = await _strategy.deleteFile(token, fileUuid);
if (!result.item1) {
return false;
}
return true;
}
void addFileMobile(
String path, String token, String filename, BuildContext context) async {
Tuple2<bool, String> resultAdd =
await addFile(await File(path).readAsBytes(), filename, token);
if (!resultAdd.item1) {
//print("Message error");
return;
}
Tuple2<bool, String> resultGet = await getFiles(token, context);
if (!resultGet.item1) {
//print("Message error");
return;
}
}
}

@ -5,12 +5,12 @@ import 'package:smartfit_app_mobile/modele/user.dart';
class MapUtil {
Set<Polyline> initPolines(BuildContext context, int largueur, Color couleur) {
Set<Polyline> _polylines = {};
_polylines.add(Polyline(
Set<Polyline> polylines = {};
polylines.add(Polyline(
polylineId: const PolylineId("Polyline"),
color: couleur,
points: context.watch<User>().managerSelectedActivity.getPosition(),
width: largueur));
return _polylines;
return polylines;
}
}

@ -1,14 +1,10 @@
import 'dart:io';
import 'package:file_picker/file_picker.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/api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/modele/api/request_api.dart';
import 'package:smartfit_app_mobile/common_widget/container/list/list_activity.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/common_widget/container/workout_row.dart';
import 'package:smartfit_app_mobile/modele/utile/list_activity/list_activity_utile.dart';
import 'package:tuple/tuple.dart';
class MobileListActivity extends StatefulWidget {
const MobileListActivity({Key? key}) : super(key: key);
@ -19,31 +15,8 @@ class MobileListActivity extends StatefulWidget {
class _MobileListActivity extends State<MobileListActivity> {
FilePickerResult? result;
final IDataStrategy _strategy = RequestApi();
final ListActivityUtile _utile = ListActivityUtile();
Future<bool> deleteFileOnBDD(String token, String fileUuid) async {
Tuple2<bool, String> result = await _strategy.deleteFile(token, fileUuid);
if (!result.item1) {
return false;
}
return true;
}
void addFileMobile(String path, String token, String filename) async {
Tuple2<bool, String> resultAdd =
await _utile.addFile(await File(path).readAsBytes(), filename, token);
if (!resultAdd.item1) {
//print("Message error");
return;
}
Tuple2<bool, String> resultGet = await _utile.getFiles(token, context);
if (!resultGet.item1) {
//print("Message error");
return;
}
}
@override
Widget build(BuildContext context) {
var media = MediaQuery.of(context).size;
@ -82,10 +55,12 @@ class _MobileListActivity extends State<MobileListActivity> {
FilePickerResult? result =
await FilePicker.platform.pickFiles();
if (result != null) {
addFileMobile(
// ignore: use_build_context_synchronously
_utile.addFileMobile(
result.files.single.path!,
Provider.of<User>(context, listen: false).token,
result.files.single.name);
result.files.single.name,
context);
} else {
print("Picker");
// msg d'erreur
@ -117,75 +92,7 @@ class _MobileListActivity extends State<MobileListActivity> {
),
)
])
: Material(
color: Colors.transparent,
child: ListView.builder(
padding: EdgeInsets.zero,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: Provider.of<User>(context, listen: true)
.listActivity
.length,
itemBuilder: (context, index) {
var activityObj =
Provider.of<User>(context, listen: true)
.listActivity[index];
var activityMap = activityObj.toMap();
return InkWell(
onTap: () {},
child: WorkoutRow(
wObj: activityMap,
onDelete: () async {
// Attention toute modif peut amener à une surchage mémoire !!
if (await deleteFileOnBDD(
Provider.of<User>(context, listen: false)
.token,
activityObj.fileUuid)) {
if (!Provider.of<User>(context,
listen: false)
.managerSelectedActivity
.fileNotSelected(
activityObj.fileUuid)) {
Provider.of<User>(context, listen: false)
.managerSelectedActivity
.removeSelectedActivity(
activityObj.fileUuid);
}
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
}
},
onClick: () async {
if (!Provider.of<User>(context, listen: false)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid)) {
Provider.of<User>(context, listen: false)
.managerSelectedActivity
.removeSelectedActivity(
activityObj.fileUuid);
return;
}
Tuple2<bool, String> result = await _utile
.getContentActivity(context, activityObj);
if (!result.item1) {
return;
}
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
Provider.of<User>(context, listen: false)
.insertActivity(0, activityObj);
},
isSelected: !Provider.of<User>(context)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid),
),
);
},
),
),
: const ListActivity(),
SizedBox(
height: media.width * 0.1,
),

@ -1,6 +1,7 @@
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/modele/utile/list_activity/list_activity_utile.dart';
import 'package:smartfit_app_mobile/view/activity/list_activity.dart';
import 'package:tuple/tuple.dart';
import 'package:universal_html/html.dart' as html;
@ -10,7 +11,6 @@ import 'package:smartfit_app_mobile/common/colo_extension.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/common_widget/container/workout_row.dart';
class WebListActivity extends StatefulWidget {
const WebListActivity({super.key});
@ -23,18 +23,6 @@ class _WebListActivityState extends State<WebListActivity> {
FilePickerResult? result;
IDataStrategy strategy = RequestApi();
final ListActivityUtile _utile = ListActivityUtile();
final IDataStrategy _strategy = RequestApi();
Future<bool> deleteFileOnBDD(String token, String fileUuid) async {
Tuple2<bool, String> result = await _strategy.deleteFile(token, fileUuid);
if (!result.item1) {
//print(fileUuid);
//print("msg d'erreur");
//print(result.item2);
return false;
}
return true;
}
void addFileWeb(html.File file, String token) async {
final reader = html.FileReader();
@ -130,58 +118,7 @@ class _WebListActivityState extends State<WebListActivity> {
),
)
])
: Material(
color: Colors.transparent,
child: ListView.builder(
padding: EdgeInsets.zero,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: Provider.of<User>(context, listen: true)
.listActivity
.length,
itemBuilder: (context, index) {
var activityObj =
Provider.of<User>(context, listen: true)
.listActivity[index];
var activityMap = activityObj.toMap();
return InkWell(
onTap: () {
/*
setState(() {
firstActivityIndex = index;
});
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
Provider.of<User>(context, listen: false)
.insertActivity(0, activityObj);*/
},
child: WorkoutRow(
wObj: activityMap,
onDelete: () async {
if (await deleteFileOnBDD(
Provider.of<User>(context, listen: false)
.token,
activityObj.fileUuid)) {
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
}
},
onClick: () {
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
Provider.of<User>(context, listen: false)
.insertActivity(0, activityObj);
_utile.getContentActivity(
context, activityObj);
},
isSelected: Provider.of<User>(context)
.managerSelectedActivity
.fileNotSelected(activityObj.fileUuid),
),
);
},
),
),
: const ListActivity(),
SizedBox(
height: media.width * 0.1,
),

@ -1,430 +0,0 @@
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import '../../common/colo_extension.dart';
import '../../common_widget/today_target_cell.dart';
class ActivityTrackerView extends StatefulWidget {
const ActivityTrackerView({super.key});
@override
State<ActivityTrackerView> createState() => _ActivityTrackerViewState();
}
class _ActivityTrackerViewState extends State<ActivityTrackerView> {
int touchedIndex = -1;
List latestArr = [
{
"image": "assets/img/workout1.svg",
"title": "Drinking 300ml Water",
"time": "About 1 minutes ago"
},
{
"image": "assets/img/workout1.svg",
"title": "Eat Snack (Fitbar)",
"time": "About 3 hours ago"
},
];
@override
Widget build(BuildContext context) {
var media = MediaQuery.of(context).size;
return Scaffold(
appBar: AppBar(
backgroundColor: TColor.white,
centerTitle: true,
elevation: 0,
leading: InkWell(
onTap: () {
Navigator.pop(context);
},
child: Container(
margin: const EdgeInsets.all(8),
height: 40,
width: 40,
alignment: Alignment.center,
decoration: BoxDecoration(
color: TColor.lightGray,
borderRadius: BorderRadius.circular(10)),
child: Image.asset(
"assets/img/black_btn.png",
width: 15,
height: 15,
fit: BoxFit.contain,
),
),
),
title: Text(
"Suivi d'activité",
style: TextStyle(
color: TColor.black, fontSize: 16, fontWeight: FontWeight.w700),
),
actions: [
InkWell(
onTap: () {},
child: Container(
margin: const EdgeInsets.all(8),
height: 40,
width: 40,
alignment: Alignment.center,
decoration: BoxDecoration(
color: TColor.lightGray,
borderRadius: BorderRadius.circular(10)),
child: Image.asset(
"assets/img/more_btn.png",
width: 15,
height: 15,
fit: BoxFit.contain,
),
),
)
],
),
backgroundColor: TColor.white,
body: SingleChildScrollView(
child: Container(
padding: const EdgeInsets.symmetric(vertical: 25, horizontal: 25),
child: Column(
children: [
Container(
padding:
const EdgeInsets.symmetric(vertical: 15, horizontal: 15),
decoration: BoxDecoration(
gradient: LinearGradient(colors: [
TColor.primaryColor2.withOpacity(0.3),
TColor.primaryColor1.withOpacity(0.3)
]),
borderRadius: BorderRadius.circular(15),
),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"Objectif d'aujourd'hui",
style: TextStyle(
color: TColor.black,
fontSize: 14,
fontWeight: FontWeight.w700),
),
SizedBox(
width: 30,
height: 30,
child: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: TColor.primaryG,
),
borderRadius: BorderRadius.circular(10),
),
child: MaterialButton(
onPressed: () {},
padding: EdgeInsets.zero,
height: 30,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(25)),
textColor: TColor.primaryColor1,
minWidth: double.maxFinite,
elevation: 0,
color: Colors.transparent,
child: const Icon(
Icons.add,
color: Colors.white,
size: 15,
)),
),
)
],
),
const SizedBox(
height: 15,
),
const Row(
children: [
Expanded(
child: TodayTargetCell(
icon: "assets/img/workout1.svg",
value: "800",
title: "Calories",
),
),
SizedBox(
width: 15,
),
Expanded(
child: TodayTargetCell(
icon: "assets/img/workout1.svg",
value: "2400",
title: "Nombre pas",
),
),
],
)
],
),
),
SizedBox(
height: media.width * 0.1,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"Activité journalière",
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(
height: media.width * 0.05,
),
Container(
height: media.width * 0.5,
padding:
const EdgeInsets.symmetric(vertical: 15, horizontal: 0),
decoration: BoxDecoration(
color: TColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: const [
BoxShadow(color: Colors.black12, blurRadius: 3)
]),
child: BarChart(BarChartData(
barTouchData: BarTouchData(
touchTooltipData: BarTouchTooltipData(
tooltipBgColor: Colors.grey,
tooltipHorizontalAlignment: FLHorizontalAlignment.right,
tooltipMargin: 10,
getTooltipItem: (group, groupIndex, rod, rodIndex) {
String weekDay;
switch (group.x) {
case 0:
weekDay = 'Monday';
break;
case 1:
weekDay = 'Tuesday';
break;
case 2:
weekDay = 'Wednesday';
break;
case 3:
weekDay = 'Thursday';
break;
case 4:
weekDay = 'Friday';
break;
case 5:
weekDay = 'Saturday';
break;
case 6:
weekDay = 'Sunday';
break;
default:
throw Error();
}
return BarTooltipItem(
'$weekDay\n',
const TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 14,
),
children: <TextSpan>[
TextSpan(
text: (rod.toY - 1).toString(),
style: TextStyle(
color: TColor.white,
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
],
);
},
),
touchCallback: (FlTouchEvent event, barTouchResponse) {
setState(() {
if (!event.isInterestedForInteractions ||
barTouchResponse == null ||
barTouchResponse.spot == null) {
touchedIndex = -1;
return;
}
touchedIndex =
barTouchResponse.spot!.touchedBarGroupIndex;
});
},
),
titlesData: FlTitlesData(
show: true,
rightTitles: AxisTitles(
sideTitles: SideTitles(showTitles: false),
),
topTitles: AxisTitles(
sideTitles: SideTitles(showTitles: false),
),
bottomTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
getTitlesWidget: getTitles,
reservedSize: 38,
),
),
leftTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: false,
),
),
),
borderData: FlBorderData(
show: false,
),
barGroups: showingGroups(),
gridData: FlGridData(show: false),
)),
),
SizedBox(
height: media.width * 0.05,
),
SizedBox(
height: media.width * 0.1,
),
],
),
),
),
);
}
Widget getTitles(double value, TitleMeta meta) {
var style = TextStyle(
color: TColor.gray,
fontWeight: FontWeight.w500,
fontSize: 12,
);
Widget text;
switch (value.toInt()) {
case 0:
text = Text('Dim', style: style);
break;
case 1:
text = Text('Lun', style: style);
break;
case 2:
text = Text('Mar', style: style);
break;
case 3:
text = Text('Mer', style: style);
break;
case 4:
text = Text('Jeu', style: style);
break;
case 5:
text = Text('Ven', style: style);
break;
case 6:
text = Text('Sam', style: style);
break;
default:
text = Text('', style: style);
break;
}
return SideTitleWidget(
axisSide: meta.axisSide,
space: 16,
child: text,
);
}
List<BarChartGroupData> showingGroups() => List.generate(7, (i) {
switch (i) {
case 0:
return makeGroupData(0, 5, TColor.primaryG,
isTouched: i == touchedIndex);
case 1:
return makeGroupData(1, 10.5, TColor.secondaryG,
isTouched: i == touchedIndex);
case 2:
return makeGroupData(2, 5, TColor.primaryG,
isTouched: i == touchedIndex);
case 3:
return makeGroupData(3, 7.5, TColor.secondaryG,
isTouched: i == touchedIndex);
case 4:
return makeGroupData(4, 15, TColor.primaryG,
isTouched: i == touchedIndex);
case 5:
return makeGroupData(5, 5.5, TColor.secondaryG,
isTouched: i == touchedIndex);
case 6:
return makeGroupData(6, 8.5, TColor.primaryG,
isTouched: i == touchedIndex);
default:
return throw Error();
}
});
BarChartGroupData makeGroupData(
int x,
double y,
List<Color> barColor, {
bool isTouched = false,
double width = 22,
List<int> showTooltips = const [],
}) {
return BarChartGroupData(
x: x,
barRods: [
BarChartRodData(
toY: isTouched ? y + 1 : y,
gradient: LinearGradient(
colors: barColor,
begin: Alignment.topCenter,
end: Alignment.bottomCenter),
width: width,
borderSide: isTouched
? const BorderSide(color: Colors.green)
: const BorderSide(color: Colors.white, width: 0),
backDrawRodData: BackgroundBarChartRodData(
show: true,
toY: 20,
color: TColor.lightGray,
),
),
],
showingTooltipIndicators: showTooltips,
);
}
}

@ -1,14 +1,7 @@
import 'package:responsive_builder/responsive_builder.dart';
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/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/main_tab/mobile/mobile_main_tab_view.dart';
import 'package:smartfit_app_mobile/view/main_tab/web/web_main_tab_view.dart';
import 'package:smartfit_app_mobile/view/map/my_map.dart';
import 'package:smartfit_app_mobile/view/profile/profile_view.dart';
class MainTabView extends StatefulWidget {
const MainTabView({super.key});
@ -18,11 +11,11 @@ class MainTabView extends StatefulWidget {
}
class _MainTabViewState extends State<MainTabView> {
@override
@override
Widget build(BuildContext context) {
return ScreenTypeLayout.builder(
mobile: (_) => const MobileMainTabView(),
desktop: (_) => const WebMainTabView(),
);
}
}
}

@ -1,60 +0,0 @@
//import '../sleep_tracker/sleep_tracker_view.dart';
/*
class SelectView extends StatelessWidget {
const SelectView({super.key});
@override
Widget build(BuildContext context) {
// var media = MediaQuery.of(context).size;
return Scaffold(
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
RoundButton(
title: "Workout Tracker",
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const BlankView(),
),
);
}),
const SizedBox(
height: 15,
),
RoundButton(
title: "Meal Planner",
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const BlankView(),
),
);
}),
const SizedBox(
height: 15,
),
RoundButton(
title: "Sleep Tracker",
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const BlankView(),
),
);
})
],
),
),
);
}
}
*/

File diff suppressed because it is too large Load Diff

@ -1,131 +0,0 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:location/location.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
class MobileMyMaps extends StatefulWidget {
const MobileMyMaps({super.key});
@override
State<MobileMyMaps> createState() => _MobileMyMaps();
}
class _MobileMyMaps extends State<MobileMyMaps> {
Completer<GoogleMapController> _googleMapController = Completer();
CameraPosition? _cameraPosition;
Location? _location;
LocationData? _currentLocation;
List<LatLng> _polylineCoordinates = [];
Set<Polyline> _polylines = {};
Set<Marker> _markers = {}; // Add a set to store markers
@override
void initState() {
_init();
super.initState();
}
_init() async {
_location = Location();
_cameraPosition = const CameraPosition(
target: LatLng(
0, 0), // this is just the example lat and lng for initializing
zoom: 20);
_initLocation();
}
//function to listen when we move position
_initLocation() {
_location?.getLocation().then((location) {
_currentLocation = location;
});
_location?.onLocationChanged.listen((newLocation) {
setState(() {
_currentLocation = newLocation;
_polylineCoordinates.add(LatLng(
_currentLocation?.latitude ?? 0,
_currentLocation?.longitude ?? 0,
));
_updatePolyline();
});
moveToPosition(LatLng(
_currentLocation?.latitude ?? 0, _currentLocation?.longitude ?? 0));
});
}
_updatePolyline() {
setState(() {
_polylines.clear();
_polylines.add(Polyline(
polylineId: PolylineId("polyline"),
color: TColor.primaryColor1,
points: _polylineCoordinates,
width: 10,
));
});
}
/*
// Updated _updateMarker to use the custom marker
_updateMarker(LatLng position) async {
final markerId = MarkerId('marker');
final marker = Marker(markerId: markerId, position: position);
_markers.clear();
_markers.add(marker);
}*/
moveToPosition(LatLng latLng) async {
GoogleMapController mapController = await _googleMapController.future;
mapController.animateCamera(CameraUpdate.newCameraPosition(
CameraPosition(target: latLng, zoom: 15)));
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: _getMap(),
);
}
Widget _getMarker() {
return Container(
width: 25,
height: 25,
padding: EdgeInsets.all(2),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(100),
boxShadow: [
BoxShadow(
color: Colors.grey,
offset: Offset(0, 3),
spreadRadius: 4,
blurRadius: 6)
]),
child: ClipOval(child: Image.asset("assets/img/u1.png")),
);
}
Widget _getMap() {
return Stack(
children: [
GoogleMap(
initialCameraPosition: _cameraPosition!,
mapType: MapType.normal,
onMapCreated: (GoogleMapController controller) {
if (!_googleMapController.isCompleted) {
_googleMapController.complete(controller);
}
},
polylines: _polylines,
markers: _markers,
),
Positioned.fill(
child: Align(alignment: Alignment.center, child: _getMarker()))
],
);
}
}

@ -0,0 +1,89 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/container/profile/profile_compte.dart';
import 'package:smartfit_app_mobile/common_widget/container/profile/profile_entete.dart';
import 'package:smartfit_app_mobile/common_widget/container/profile/profile_info_user.dart';
import 'package:smartfit_app_mobile/common_widget/container/profile/profile_notification.dart';
import 'package:smartfit_app_mobile/common_widget/container/profile/profile_other.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
class ProfileViewAllPlatforme extends StatefulWidget {
const ProfileViewAllPlatforme(this.positive, this.accountArr, this.otherArr,
{super.key});
final bool positive;
final List accountArr;
final List otherArr;
@override
State<ProfileViewAllPlatforme> createState() => _ProfileViewAllPlatforme();
}
class _ProfileViewAllPlatforme extends State<ProfileViewAllPlatforme> {
@override
Widget build(BuildContext context) {
String username = context.watch<User>().username;
return Scaffold(
appBar: AppBar(
backgroundColor: TColor.white,
centerTitle: true,
elevation: 0,
leadingWidth: 0,
title: Text(
"Profile",
style: TextStyle(
color: TColor.black, fontSize: 16, fontWeight: FontWeight.w700),
),
actions: [
InkWell(
onTap: () {},
child: Container(
margin: const EdgeInsets.all(8),
height: 20,
width: 20,
alignment: Alignment.center,
decoration: BoxDecoration(
color: TColor.lightGray,
borderRadius: BorderRadius.circular(10)),
child: Image.asset(
"assets/img/more_btn.png",
width: 15,
height: 15,
fit: BoxFit.contain,
),
),
)
],
),
backgroundColor: TColor.white,
body: SingleChildScrollView(
child: Container(
padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 25),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
ProfileEntete(username),
const SizedBox(
height: 15,
),
const ProfileInfoUser(),
const SizedBox(
height: 25,
),
ProfileCompte(widget.accountArr),
const SizedBox(
height: 25,
),
ProfileNotification(widget.positive),
const SizedBox(
height: 25,
),
ProfileOther(widget.otherArr)
],
),
),
),
);
}
}

@ -1,13 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:responsive_builder/responsive_builder.dart';
import 'package:smartfit_app_mobile/common_widget/button/round_button.dart';
import 'package:smartfit_app_mobile/common_widget/text_field/round_text_field.dart';
import 'package:smartfit_app_mobile/view/profile/mobile/mobile_change_password.dart';
import 'package:smartfit_app_mobile/view/profile/web/web_change_password.dart';
import '../../common/colo_extension.dart';
class ChangePasswordView extends StatefulWidget {
const ChangePasswordView({super.key});
@ -16,7 +11,7 @@ class ChangePasswordView extends StatefulWidget {
}
class _ChangePasswordViewState extends State<ChangePasswordView> {
@override
@override
Widget build(BuildContext context) {
return ScreenTypeLayout.builder(
mobile: (_) => const MobileChangePasswordView(),

@ -1,13 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:responsive_builder/responsive_builder.dart';
import 'package:smartfit_app_mobile/common_widget/button/round_button.dart';
import 'package:smartfit_app_mobile/common_widget/text_field/round_text_field.dart';
import 'package:smartfit_app_mobile/view/profile/mobile/mobile_change_username.dart';
import 'package:smartfit_app_mobile/view/profile/web/web_change_username.dart';
import '../../common/colo_extension.dart';
class ChangeUsernameView extends StatefulWidget {
const ChangeUsernameView({super.key});
@ -16,7 +11,7 @@ class ChangeUsernameView extends StatefulWidget {
}
class _ChangeUsernameViewState extends State<ChangeUsernameView> {
@override
@override
Widget build(BuildContext context) {
return ScreenTypeLayout.builder(
mobile: (_) => const MobileChangeUsernameView(),

@ -1,16 +1,5 @@
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:flutter/material.dart';
import 'package:animated_toggle_switch/animated_toggle_switch.dart';
import 'package:provider/provider.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/setting_row.dart';
import 'package:smartfit_app_mobile/common_widget/title_subtitle_cell.dart';
import 'package:smartfit_app_mobile/view/profile/change_password.dart';
import 'package:smartfit_app_mobile/view/profile/change_email.dart';
import 'package:smartfit_app_mobile/view/profile/change_username.dart';
import 'package:smartfit_app_mobile/view/profile/contact_us_view.dart';
import 'package:smartfit_app_mobile/view/profile/policy_view.dart';
import 'package:smartfit_app_mobile/view/profile/all_platforme/profile_view_allplatforme.dart';
class MobileProfileView extends StatefulWidget {
const MobileProfileView({super.key});
@ -50,375 +39,6 @@ class _MobileProfileView extends State<MobileProfileView> {
];
@override
Widget build(BuildContext context) {
String username = context.watch<User>().username;
return Scaffold(
appBar: AppBar(
backgroundColor: TColor.white,
centerTitle: true,
elevation: 0,
leadingWidth: 0,
title: Text(
"Profile",
style: TextStyle(
color: TColor.black, fontSize: 16, fontWeight: FontWeight.w700),
),
actions: [
InkWell(
onTap: () {},
child: Container(
margin: const EdgeInsets.all(8),
height: 20,
width: 20,
alignment: Alignment.center,
decoration: BoxDecoration(
color: TColor.lightGray,
borderRadius: BorderRadius.circular(10)),
child: Image.asset(
"assets/img/more_btn.png",
width: 15,
height: 15,
fit: BoxFit.contain,
),
),
)
],
),
backgroundColor: TColor.white,
body: SingleChildScrollView(
child: Container(
padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 25),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Row(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(30),
child: Image.asset(
"assets/img/u1.png",
width: 50,
height: 50,
fit: BoxFit.cover,
),
),
const SizedBox(
width: 15,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
username,
style: TextStyle(
color: TColor.black,
fontSize: 14,
fontWeight: FontWeight.w500,
),
),
Text(
"Course à pied",
style: TextStyle(
color: TColor.gray,
fontSize: 12,
),
)
],
),
),
SizedBox(
width: 70,
height: 25,
child: RoundButton(
title: "Editer",
type: RoundButtonType.bgGradient,
fontSize: 12,
fontWeight: FontWeight.w400,
onPressed: () {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => const ActivityTrackerView(),
// ),
// );
},
),
)
],
),
const SizedBox(
height: 15,
),
const Row(
children: [
Expanded(
child: TitleSubtitleCell(
title: "??? cm",
subtitle: "Taille",
),
),
SizedBox(
width: 15,
),
Expanded(
child: TitleSubtitleCell(
title: "?? kg",
subtitle: "Poids",
),
),
SizedBox(
width: 15,
),
Expanded(
child: TitleSubtitleCell(
title: "?? ans",
subtitle: "Age",
),
),
],
),
const SizedBox(
height: 25,
),
Container(
padding:
const EdgeInsets.symmetric(vertical: 10, horizontal: 15),
decoration: BoxDecoration(
color: TColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: const [
BoxShadow(color: Colors.black12, blurRadius: 2)
]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Compte",
style: TextStyle(
color: TColor.black,
fontSize: 16,
fontWeight: FontWeight.w700,
),
),
const SizedBox(
height: 8,
),
ListView.builder(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: accountArr.length,
itemBuilder: (context, index) {
var iObj = accountArr[index];
return SettingRow(
icon: iObj["image"]!,
title: iObj["name"]!,
onPressed: () {
if (iObj["tag"] == "1") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const ChangeUsernameView(),
),
);
} else if (iObj["tag"] == "2") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const ChangePasswordView(),
),
);
} else {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ChangeEmailView(),
),
);
}
},
);
},
),
],
),
),
const SizedBox(
height: 25,
),
Container(
padding:
const EdgeInsets.symmetric(vertical: 10, horizontal: 15),
decoration: BoxDecoration(
color: TColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: const [
BoxShadow(color: Colors.black12, blurRadius: 2)
]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Notification",
style: TextStyle(
color: TColor.black,
fontSize: 16,
fontWeight: FontWeight.w700,
),
),
const SizedBox(
height: 8,
),
SizedBox(
height: 30,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.asset("assets/img/p_notification.png",
height: 15, width: 15, fit: BoxFit.contain),
const SizedBox(
width: 15,
),
Expanded(
child: Text(
"Push Notifications",
style: TextStyle(
color: TColor.black,
fontSize: 12,
),
),
),
CustomAnimatedToggleSwitch<bool>(
current: positive,
values: const [false, true],
spacing: 0.0,
indicatorSize: const Size.square(25.0),
animationDuration:
const Duration(milliseconds: 200),
animationCurve: Curves.linear,
onChanged: (b) => setState(() => positive = b),
iconBuilder: (context, local, global) {
return const SizedBox();
},
cursors: const ToggleCursors(
defaultCursor: SystemMouseCursors.click),
onTap: (_) =>
setState(() => positive = !positive),
iconsTappable: false,
wrapperBuilder: (context, global, child) {
return Stack(
alignment: Alignment.center,
children: [
Positioned(
left: 10.0,
right: 10.0,
height: 20.0,
child: DecoratedBox(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: TColor.secondaryG),
borderRadius:
const BorderRadius.all(
Radius.circular(50.0)),
),
)),
child,
],
);
},
foregroundIndicatorBuilder: (context, global) {
return SizedBox.fromSize(
size: const Size(5, 5),
child: DecoratedBox(
decoration: BoxDecoration(
color: TColor.white,
borderRadius: const BorderRadius.all(
Radius.circular(50.0)),
boxShadow: const [
BoxShadow(
color: Colors.black38,
spreadRadius: 0.05,
blurRadius: 1.1,
offset: Offset(0.0, 0.8))
],
),
),
);
},
),
]),
)
],
),
),
const SizedBox(
height: 25,
),
Container(
padding:
const EdgeInsets.symmetric(vertical: 10, horizontal: 15),
decoration: BoxDecoration(
color: TColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: const [
BoxShadow(color: Colors.black12, blurRadius: 2)
]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Autre",
style: TextStyle(
color: TColor.black,
fontSize: 16,
fontWeight: FontWeight.w700,
),
),
const SizedBox(
height: 8,
),
ListView.builder(
physics: const NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,
shrinkWrap: true,
itemCount: otherArr.length,
itemBuilder: (context, index) {
var iObj = otherArr[index] as Map? ?? {};
return SettingRow(
icon: iObj["image"].toString(),
title: iObj["name"].toString(),
onPressed: () {
if (iObj["tag"] == "6") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const PrivacyPolicyView(),
),
);
} else if (iObj["tag"] == "5") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ContactUsView(),
),
);
} else {
// Autre logique si nécessaire pour d'autres éléments de la liste
}
},
);
},
)
],
),
)
],
),
),
),
);
return ProfileViewAllPlatforme(positive, accountArr, otherArr);
}
}

@ -1,16 +1,5 @@
import 'package:flutter/material.dart';
import 'package:animated_toggle_switch/animated_toggle_switch.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/common_widget/button/round_button.dart';
import 'package:smartfit_app_mobile/common_widget/setting_row.dart';
import 'package:smartfit_app_mobile/common_widget/title_subtitle_cell.dart';
import 'package:smartfit_app_mobile/view/profile/change_password.dart';
import 'package:smartfit_app_mobile/view/profile/change_email.dart';
import 'package:smartfit_app_mobile/view/profile/change_username.dart';
import 'package:smartfit_app_mobile/view/profile/contact_us_view.dart';
import 'package:smartfit_app_mobile/view/profile/policy_view.dart';
import 'package:smartfit_app_mobile/view/profile/all_platforme/profile_view_allplatforme.dart';
class WebProfileView extends StatefulWidget {
const WebProfileView({super.key});
@ -25,23 +14,27 @@ class _WebProfileView extends State<WebProfileView> {
List accountArr = [
{
"image": "assets/img/p_personal.png",
"name": "Changer son pseudo",
"name": "Changer son pseudo ",
"tag": "1"
},
{
"image": "assets/img/p_personal.png",
"name": "Changer son email",
"name": "Changer son email ",
"tag": "3"
},
{
"image": "assets/img/p_personal.png",
"name": "Changer son mot de passe",
"name": "Changer son mot de passe ",
"tag": "2"
},
];
List otherArr = [
{"image": "assets/img/p_contact.png", "name": "Nous contacter", "tag": "5"},
{
"image": "assets/img/p_contact.png",
"name": "Nous contacter !!",
"tag": "5"
},
{
"image": "assets/img/p_privacy.png",
"name": "Politique de confidentialité",
@ -50,375 +43,6 @@ class _WebProfileView extends State<WebProfileView> {
];
@override
Widget build(BuildContext context) {
String username = context.watch<User>().username;
return Scaffold(
appBar: AppBar(
backgroundColor: TColor.white,
centerTitle: true,
elevation: 0,
leadingWidth: 0,
title: Text(
"Profile",
style: TextStyle(
color: TColor.black, fontSize: 16, fontWeight: FontWeight.w700),
),
actions: [
InkWell(
onTap: () {},
child: Container(
margin: const EdgeInsets.all(8),
height: 20,
width: 20,
alignment: Alignment.center,
decoration: BoxDecoration(
color: TColor.lightGray,
borderRadius: BorderRadius.circular(10)),
child: Image.asset(
"assets/img/more_btn.png",
width: 15,
height: 15,
fit: BoxFit.contain,
),
),
)
],
),
backgroundColor: TColor.white,
body: SingleChildScrollView(
child: Container(
padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 25),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Row(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(30),
child: Image.asset(
"assets/img/u1.png",
width: 50,
height: 50,
fit: BoxFit.cover,
),
),
const SizedBox(
width: 15,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
username,
style: TextStyle(
color: TColor.black,
fontSize: 14,
fontWeight: FontWeight.w500,
),
),
Text(
"Course à pied",
style: TextStyle(
color: TColor.gray,
fontSize: 12,
),
)
],
),
),
SizedBox(
width: 70,
height: 25,
child: RoundButton(
title: "Editer",
type: RoundButtonType.bgGradient,
fontSize: 12,
fontWeight: FontWeight.w400,
onPressed: () {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => const ActivityTrackerView(),
// ),
// );
},
),
)
],
),
const SizedBox(
height: 15,
),
const Row(
children: [
Expanded(
child: TitleSubtitleCell(
title: "??? cm",
subtitle: "Taille",
),
),
SizedBox(
width: 15,
),
Expanded(
child: TitleSubtitleCell(
title: "?? kg",
subtitle: "Poids",
),
),
SizedBox(
width: 15,
),
Expanded(
child: TitleSubtitleCell(
title: "?? ans",
subtitle: "Age",
),
),
],
),
const SizedBox(
height: 25,
),
Container(
padding:
const EdgeInsets.symmetric(vertical: 10, horizontal: 15),
decoration: BoxDecoration(
color: TColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: const [
BoxShadow(color: Colors.black12, blurRadius: 2)
]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Compte",
style: TextStyle(
color: TColor.black,
fontSize: 16,
fontWeight: FontWeight.w700,
),
),
const SizedBox(
height: 8,
),
ListView.builder(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: accountArr.length,
itemBuilder: (context, index) {
var iObj = accountArr[index];
return SettingRow(
icon: iObj["image"]!,
title: iObj["name"]!,
onPressed: () {
if (iObj["tag"] == "1") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const ChangeUsernameView(),
),
);
} else if (iObj["tag"] == "2") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const ChangePasswordView(),
),
);
} else {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ChangeEmailView(),
),
);
}
},
);
},
),
],
),
),
const SizedBox(
height: 25,
),
Container(
padding:
const EdgeInsets.symmetric(vertical: 10, horizontal: 15),
decoration: BoxDecoration(
color: TColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: const [
BoxShadow(color: Colors.black12, blurRadius: 2)
]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Notification",
style: TextStyle(
color: TColor.black,
fontSize: 16,
fontWeight: FontWeight.w700,
),
),
const SizedBox(
height: 8,
),
SizedBox(
height: 30,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.asset("assets/img/p_notification.png",
height: 15, width: 15, fit: BoxFit.contain),
const SizedBox(
width: 15,
),
Expanded(
child: Text(
"Push Notifications",
style: TextStyle(
color: TColor.black,
fontSize: 12,
),
),
),
CustomAnimatedToggleSwitch<bool>(
current: positive,
values: const [false, true],
spacing: 0.0,
indicatorSize: const Size.square(25.0),
animationDuration:
const Duration(milliseconds: 200),
animationCurve: Curves.linear,
onChanged: (b) => setState(() => positive = b),
iconBuilder: (context, local, global) {
return const SizedBox();
},
cursors: const ToggleCursors(
defaultCursor: SystemMouseCursors.click),
onTap: (_) =>
setState(() => positive = !positive),
iconsTappable: false,
wrapperBuilder: (context, global, child) {
return Stack(
alignment: Alignment.center,
children: [
Positioned(
left: 10.0,
right: 10.0,
height: 20.0,
child: DecoratedBox(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: TColor.secondaryG),
borderRadius:
const BorderRadius.all(
Radius.circular(50.0)),
),
)),
child,
],
);
},
foregroundIndicatorBuilder: (context, global) {
return SizedBox.fromSize(
size: const Size(5, 5),
child: DecoratedBox(
decoration: BoxDecoration(
color: TColor.white,
borderRadius: const BorderRadius.all(
Radius.circular(50.0)),
boxShadow: const [
BoxShadow(
color: Colors.black38,
spreadRadius: 0.05,
blurRadius: 1.1,
offset: Offset(0.0, 0.8))
],
),
),
);
},
),
]),
)
],
),
),
const SizedBox(
height: 25,
),
Container(
padding:
const EdgeInsets.symmetric(vertical: 10, horizontal: 15),
decoration: BoxDecoration(
color: TColor.white,
borderRadius: BorderRadius.circular(15),
boxShadow: const [
BoxShadow(color: Colors.black12, blurRadius: 2)
]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Autre",
style: TextStyle(
color: TColor.black,
fontSize: 16,
fontWeight: FontWeight.w700,
),
),
const SizedBox(
height: 8,
),
ListView.builder(
physics: const NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,
shrinkWrap: true,
itemCount: otherArr.length,
itemBuilder: (context, index) {
var iObj = otherArr[index] as Map? ?? {};
return SettingRow(
icon: iObj["image"].toString(),
title: iObj["name"].toString(),
onPressed: () {
if (iObj["tag"] == "6") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const PrivacyPolicyView(),
),
);
} else if (iObj["tag"] == "5") {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ContactUsView(),
),
);
} else {
// Autre logique si nécessaire pour d'autres éléments de la liste
}
},
);
},
)
],
),
)
],
),
),
),
);
return ProfileViewAllPlatforme(positive, accountArr, otherArr);
}
}

@ -1,16 +1,13 @@
import 'dart:convert';
import 'package:crypto/crypto.dart';
import 'package:csv/csv.dart';
import 'package:fit_tool/fit_tool.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';
@ -19,8 +16,9 @@ import 'package:tuple/tuple.dart';
// Dossier de l'application
Future<String> get _localPath async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
//final directory = await getApplicationDocumentsDirectory();
//return directory.path;
return "PATH";
}
// Uri du fichier
@ -81,11 +79,9 @@ class _TestPage extends State<TestPage> {
FilePickerResult? result;
IDataStrategy strategy = RequestApi();
String platforme = getPlatforme();
final ManagerFile _managerFile = ManagerFile();
//late File x = File(file.path);
Future<void> readFile() async {
ManagerFile x = ManagerFile();
PlatformFile t = result!.files.single;
String? y = t.path;
if (t.path == null) {
@ -169,7 +165,7 @@ class _TestPage extends State<TestPage> {
}
csvData.insert(0, enteteCSV);
final csv = const ListToCsvConverter().convert(csvData);
//final csv = const ListToCsvConverter().convert(csvData);
//await outFile.writeAsString(csv);
// ------- FIN --------------- //
@ -261,7 +257,6 @@ class _TestPage extends State<TestPage> {
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);
@ -307,9 +302,7 @@ class _TestPage extends State<TestPage> {
if (result == null) {
print("No file selected");
} else {
for (var element in result!.files) {
readFile();
}
readFile();
}
},
child: const Text("File - ")),

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html>
<html xml:lang>
<head>
<!--
If you are serving your web app in a path other than the root, change the
@ -26,7 +26,7 @@
<meta name="apple-mobile-web-app-title" content="smartfit_app_mobile">
<link rel="apple-touch-icon" href="icons/Icon-192.png">
<!-- MAP GOOGLE-->
<!-- MAP GOOGLE -->
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyD2Jgh9NXhtKaH8qRyGfkCeMDusBJ4xcRY"></script>
<!-- Favicon -->

Loading…
Cancel
Save