graph axes correction mobile + map UI

pull/4/head
Othmane BENJELLOUN 2 years ago
parent a4f387e3cd
commit 5188fd6d95

@ -31,7 +31,7 @@ class ProfileInfoUser extends StatelessWidget {
Expanded( Expanded(
child: TitleSubtitleCell( child: TitleSubtitleCell(
title: title:
"${context.watch<User>().getTotalDenivelePositif().toString()} + m", "${context.watch<User>().getTotalDenivelePositif().toStringAsFixed(2)} + m",
subtitle: "Total dénivelé positif", subtitle: "Total dénivelé positif",
), ),
), ),
@ -41,7 +41,7 @@ class ProfileInfoUser extends StatelessWidget {
Expanded( Expanded(
child: TitleSubtitleCell( child: TitleSubtitleCell(
title: title:
"${context.watch<User>().getTotalDeniveleNegatif().toString()} - m", "${context.watch<User>().getTotalDeniveleNegatif().toStringAsFixed(2)} - m",
subtitle: "Total dénivelé négatif", subtitle: "Total dénivelé négatif",
), ),
), ),

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:responsive_builder/responsive_builder.dart'; import 'package:responsive_builder/responsive_builder.dart';
import 'package:smartfit_app_mobile/common_widget/graph/data_for_graph/func_bpm_by_time.dart';
import 'package:smartfit_app_mobile/common_widget/graph/mobile/mobile_altitude_by_time.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/common_widget/graph/web/web_altitude_by_time.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart'; import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';
@ -18,9 +19,10 @@ class GraphAltitudeByTime extends StatefulWidget {
class _GraphAltitudeByTime extends State<GraphAltitudeByTime> { class _GraphAltitudeByTime extends State<GraphAltitudeByTime> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final FuncBpmByTime funcBpm = FuncBpmByTime(widget.data);
return ScreenTypeLayout.builder( return ScreenTypeLayout.builder(
mobile: (_) => MobileGraphAltitudeByTime(widget.media, widget.data), mobile: (_) => MobileGraphAltitudeByTime(widget.media, widget.data, funcBpm),
desktop: (_) => WebGraphAltitudeByTime(widget.media, widget.data), desktop: (_) => WebGraphAltitudeByTime(widget.media, widget.data, funcBpm),
); );
} }
} }

@ -21,7 +21,7 @@ class _BpmByTime extends State<BpmByTime> {
final FuncBpmByTime funcBpm = FuncBpmByTime(widget.data); final FuncBpmByTime funcBpm = FuncBpmByTime(widget.data);
return ScreenTypeLayout.builder( return ScreenTypeLayout.builder(
mobile: (_) => MobileBpmByTime(widget.media, widget.data), mobile: (_) => MobileBpmByTime(widget.media, widget.data, funcBpm),
desktop: (_) => WebBpmByTime(widget.media, widget.data, funcBpm), desktop: (_) => WebBpmByTime(widget.media, widget.data, funcBpm),
); );
} }

@ -14,14 +14,14 @@ class FuncBpmAndSpeedByTime {
getTitlesWidget: rightTitleWidgets, getTitlesWidget: rightTitleWidgets,
showTitles: true, showTitles: true,
interval: 20, interval: 20,
reservedSize: 40, reservedSize: 42,
); );
SideTitles get leftTitles => SideTitles( SideTitles get leftTitles => SideTitles(
getTitlesWidget: leftTitleWidgets, getTitlesWidget: leftTitleWidgets,
showTitles: true, showTitles: true,
interval: 20, interval: 20,
reservedSize: 40, reservedSize: 42,
); );
SideTitles get bottomTitles => SideTitles( SideTitles get bottomTitles => SideTitles(
getTitlesWidget: bottomTitleWidgets, getTitlesWidget: bottomTitleWidgets,
@ -79,7 +79,7 @@ class FuncBpmAndSpeedByTime {
return Text(text, return Text(text,
style: TextStyle( style: TextStyle(
color: TColor.gray, color: TColor.gray,
fontSize: 12, fontSize: 8,
), ),
textAlign: TextAlign.center); textAlign: TextAlign.center);
} }
@ -113,7 +113,7 @@ class FuncBpmAndSpeedByTime {
return Text(text, return Text(text,
style: TextStyle( style: TextStyle(
color: TColor.gray, color: TColor.gray,
fontSize: 12, fontSize: 8,
), ),
textAlign: TextAlign.center); textAlign: TextAlign.center);
} }
@ -148,7 +148,7 @@ class FuncBpmAndSpeedByTime {
return Text(text, return Text(text,
style: TextStyle( style: TextStyle(
color: TColor.gray, color: TColor.gray,
fontSize: 12, fontSize: 8,
), ),
textAlign: TextAlign.center); textAlign: TextAlign.center);
} }

@ -67,19 +67,19 @@ class FuncBpmByTime {
text = '0 s'; text = '0 s';
break; break;
case 20: case 20:
text = "${(interval).toStringAsFixed(2)} s"; text = "${(interval).toStringAsFixed(0)} s";
break; break;
case 40: case 40:
text = "${(interval * 2).toStringAsFixed(2)} s"; text = "${(interval * 2).toStringAsFixed(0)} s";
break; break;
case 60: case 60:
text = "${(interval * 3).toStringAsFixed(2)} s"; text = "${(interval * 3).toStringAsFixed(0)} s";
break; break;
case 80: case 80:
text = "${(interval * 4).toStringAsFixed(2)} s"; text = "${(interval * 4).toStringAsFixed(0)} s";
break; break;
case 100: case 100:
text = "${(interval * 5).toStringAsFixed(2)} s"; text = "${(interval * 5).toStringAsFixed(0)} s";
break; break;
default: default:
return Container(); return Container();

@ -2,14 +2,16 @@ import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/graph/data_for_graph/func_bpm_by_time.dart';
import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart'; import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';
class MobileGraphAltitudeByTime extends StatefulWidget { class MobileGraphAltitudeByTime extends StatefulWidget {
final Size media; final Size media;
final DataHomeView data; final DataHomeView data;
final FuncBpmByTime func;
const MobileGraphAltitudeByTime(this.media, this.data, {Key? key}) const MobileGraphAltitudeByTime(this.media, this.data, this.func, {Key? key})
: super(key: key); : super(key: key);
@override @override
@ -70,20 +72,19 @@ class _MobileGraphAltitudeByTime extends State<MobileGraphAltitudeByTime> {
leftTitles: const AxisTitles(), leftTitles: const AxisTitles(),
topTitles: const AxisTitles(), topTitles: const AxisTitles(),
bottomTitles: AxisTitles( bottomTitles: AxisTitles(
sideTitles: SideTitles( sideTitles: widget.func.bottomTitles,
reservedSize: 20, ),
showTitles: true,
getTitlesWidget: (value, meta) {
return Text(
"${double.parse((value / 10).toStringAsFixed(2))}s");
},
)),
rightTitles: AxisTitles( rightTitles: AxisTitles(
sideTitles: SideTitles( sideTitles: SideTitles(
reservedSize: 60, reservedSize: 60,
showTitles: true, showTitles: true,
getTitlesWidget: (value, meta) { getTitlesWidget: (value, meta) {
return Text("${double.parse(value.toStringAsFixed(2))} m"); return Text("${double.parse(value.toStringAsFixed(2))} m",
style: TextStyle(
color: TColor.gray,
fontSize: 12,
),
textAlign: TextAlign.center);
}, },
)), )),
)))); ))));

@ -111,27 +111,16 @@ class _MobileGraphBpmAndSpeedByTime
titlesData: FlTitlesData( titlesData: FlTitlesData(
show: true, show: true,
leftTitles: AxisTitles( leftTitles: AxisTitles(
sideTitles: widget.func.rightTitles, sideTitles: widget.func.leftTitles,
), ),
topTitles: const AxisTitles(), topTitles: const AxisTitles(),
bottomTitles: AxisTitles( bottomTitles: AxisTitles(
sideTitles: SideTitles( sideTitles: widget.func.bottomTitles,
reservedSize: 20, ),
showTitles: true,
getTitlesWidget: (value, meta) {
return Text(
"${double.parse((value / 10).toStringAsFixed(2))}s");
},
)),
rightTitles: AxisTitles( rightTitles: AxisTitles(
sideTitles: SideTitles( sideTitles: widget.func.rightTitles,
reservedSize: 70,
showTitles: true, ),),
getTitlesWidget: (value, meta) {
return Text(
"${double.parse(value.toStringAsFixed(2))} BPM");
},
))),
gridData: FlGridData( gridData: FlGridData(
drawVerticalLine: true, drawVerticalLine: true,
drawHorizontalLine: true, drawHorizontalLine: true,

@ -1,13 +1,15 @@
import 'package:fl_chart/fl_chart.dart'; import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/graph/data_for_graph/func_bpm_by_time.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart'; import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';
class MobileBpmByTime extends StatefulWidget { class MobileBpmByTime extends StatefulWidget {
final Size media; final Size media;
final DataHomeView data; final DataHomeView data;
final FuncBpmByTime func;
const MobileBpmByTime(this.media, this.data, {Key? key}) : super(key: key); const MobileBpmByTime(this.media, this.data,this.func, {Key? key}) : super(key: key);
@override @override
State<MobileBpmByTime> createState() => _MobileBpmByTime(); State<MobileBpmByTime> createState() => _MobileBpmByTime();
@ -57,19 +59,19 @@ class _MobileBpmByTime extends State<MobileBpmByTime> {
leftTitles: const AxisTitles(), leftTitles: const AxisTitles(),
topTitles: const AxisTitles(), topTitles: const AxisTitles(),
bottomTitles: AxisTitles( bottomTitles: AxisTitles(
sideTitles: SideTitles( sideTitles: widget.func.bottomTitles,
reservedSize: 20, ),
showTitles: true,
getTitlesWidget: (value, meta) {
return Text("${double.parse((value/10).toStringAsFixed(2))}s");
},
)),
rightTitles: AxisTitles( rightTitles: AxisTitles(
sideTitles: SideTitles( sideTitles: SideTitles(
reservedSize: 70, reservedSize: 70,
showTitles: true, showTitles: true,
getTitlesWidget: (value, meta) { getTitlesWidget: (value, meta) {
return Text("${double.parse(value.toStringAsFixed(2))} BPM"); return Text("${double.parse(value.toStringAsFixed(2))} BPM",
style: TextStyle(
color: TColor.gray,
fontSize: 12,
),
textAlign: TextAlign.center);
}, },
)), )),
)))); ))));

@ -2,14 +2,16 @@ import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/graph/data_for_graph/func_bpm_by_time.dart';
import 'package:smartfit_app_mobile/modele/user.dart'; import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart'; import 'package:smartfit_app_mobile/modele/utile/home_view/data_home_view.dart';
class WebGraphAltitudeByTime extends StatefulWidget { class WebGraphAltitudeByTime extends StatefulWidget {
final Size media; final Size media;
final DataHomeView data; final DataHomeView data;
final FuncBpmByTime func;
const WebGraphAltitudeByTime(this.media, this.data, {Key? key}) const WebGraphAltitudeByTime(this.media, this.data, this.func, {Key? key})
: super(key: key); : super(key: key);
@override @override
@ -69,20 +71,19 @@ class _WebGraphAltitudeByTime extends State<WebGraphAltitudeByTime> {
leftTitles: const AxisTitles(), leftTitles: const AxisTitles(),
topTitles: const AxisTitles(), topTitles: const AxisTitles(),
bottomTitles: AxisTitles( bottomTitles: AxisTitles(
sideTitles: SideTitles( sideTitles: widget.func.bottomTitles,
reservedSize: 20, ),
showTitles: true,
getTitlesWidget: (value, meta) {
return Text(
"${double.parse((value / 10).toStringAsFixed(2))}s");
},
)),
rightTitles: AxisTitles( rightTitles: AxisTitles(
sideTitles: SideTitles( sideTitles: SideTitles(
reservedSize: 60, reservedSize: 60,
showTitles: true, showTitles: true,
getTitlesWidget: (value, meta) { getTitlesWidget: (value, meta) {
return Text("${double.parse(value.toStringAsFixed(2))} m"); return Text("${double.parse(value.toStringAsFixed(2))} m",
style: TextStyle(
color: TColor.gray,
fontSize: 12,
),
textAlign: TextAlign.center);
}, },
)), )),
)))); ))));

@ -22,7 +22,7 @@ class HomeViewUtil {
List<FlSpot> bpmSecondes2 = List.from(bpmSecondes); List<FlSpot> bpmSecondes2 = List.from(bpmSecondes);
return DataHomeView(normaliserPremierElement(bpmSecondes), normaliserPremierElement(normaliserDeuxiemeElement(bpmSecondes2)), return DataHomeView(normaliserPremierElement(bpmSecondes), normaliserPremierElement(normaliserDeuxiemeElement(bpmSecondes2)),
normaliserPremierElement(normaliserDeuxiemeElement(vitesseSecondes)), altitudeSeconde); normaliserPremierElement(normaliserDeuxiemeElement(vitesseSecondes)), normaliserPremierElement(altitudeSeconde));
} }
List<FlSpot> normaliserDeuxiemeElement(List<FlSpot> liste) { List<FlSpot> normaliserDeuxiemeElement(List<FlSpot> liste) {

@ -47,7 +47,8 @@ class _MobileHomeView extends State<MobileHomeView> {
// -- Speed -- // // -- Speed -- //
double maxSpeed = managerSelectedActivity.getMaxSpeed(); double maxSpeed = managerSelectedActivity.getMaxSpeed();
double avgSpeed = managerSelectedActivity.getAvgSpeed(); double avgSpeed = managerSelectedActivity.getAvgSpeed();
data.maxSpeed = maxSpeed;
data.time = context.watch<User>().managerSelectedActivity.getTotalTime();
return Scaffold( return Scaffold(
backgroundColor: TColor.white, backgroundColor: TColor.white,
body: SingleChildScrollView( body: SingleChildScrollView(

@ -1,5 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:smartfit_app_mobile/common/colo_extension.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/view/map/mobile/mobile_my_map.dart'; import 'package:smartfit_app_mobile/view/map/mobile/mobile_my_map.dart';
import 'package:smartfit_app_mobile/view/map/my_map_osm.dart'; import 'package:smartfit_app_mobile/view/map/my_map_osm.dart';
@ -13,6 +15,58 @@ class ChoseMap extends StatefulWidget {
class _ChoseMap extends State<ChoseMap> { class _ChoseMap extends State<ChoseMap> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var media = MediaQuery.of(context).size;
return Scaffold(
backgroundColor: TColor.white,
body: SafeArea(
child: Center(
// Utilisation du widget Center pour centrer verticalement
child: Container(
width: media.width,
padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 25),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize
.min, // Utilisation de MainAxisSize.min pour que la colonne prenne la hauteur minimale nécessaire
children: [
SizedBox(
height: media.height * 0.1,
),
SvgPicture.asset(
"assets/img/group.svg",
width: media.width * 0.75,
height: media.height * 0.4,
fit: BoxFit.fitWidth,
),
SizedBox(
height: media.height * 0.1,
),
RoundButton(
title: "Use map with google map",
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const MobileMyMaps()));
},
),
SizedBox(
height: media.height * 0.03,
),
RoundButton(
title : "Use map with Open Street Map",
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => const MyMapOSM()));
},
),
Spacer(),
],
),
),
),
),
);
return Scaffold( return Scaffold(
backgroundColor: TColor.white, backgroundColor: TColor.white,
body: SafeArea( body: SafeArea(
@ -20,20 +74,7 @@ class _ChoseMap extends State<ChoseMap> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
TextButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const MobileMyMaps()));
},
child: const Text("Use map with google map")),
TextButton(
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => const MyMapOSM()));
},
child: const Text("Use map with Open Street Map")),
const Text( const Text(
"Mettre une image la en mode une personne avec des jumelles") "Mettre une image la en mode une personne avec des jumelles")
], ],

@ -25,7 +25,7 @@ class _MobileMyMaps extends State<MobileMyMaps> {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text("Carte Google Map "), title: const Text("Carte Google Map "),
backgroundColor: TColor.primaryColor1, backgroundColor: TColor.secondaryColor1,
), ),
body: _getMap()); body: _getMap());
} }

@ -23,7 +23,7 @@ class _MyMapOSM extends State<MyMapOSM> {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text("Carte Open Street Map "), title: const Text("Carte Open Street Map "),
backgroundColor: TColor.primaryColor1, backgroundColor: TColor.secondaryColor1,
), ),
body: FlutterMap( body: FlutterMap(
options: MapOptions(center: listPolynines.first), options: MapOptions(center: listPolynines.first),

Loading…
Cancel
Save