WT 1.1.25+3 flutter 2.8, activate training plan

This commit is contained in:
bossanyit
2021-12-12 16:17:47 +01:00
parent 72ae1c8f8c
commit 54a61fa585
96 changed files with 944 additions and 655 deletions
+1 -1
View File
@@ -183,7 +183,7 @@ class AccountPage extends StatelessWidget with Trans {
}
ListTile messaging() {
FirebaseInAppMessaging fiam = FirebaseInAppMessaging();
FirebaseInAppMessaging fiam = FirebaseInAppMessaging.instance;
ListTile element = ListTile(
leading: Icon(Icons.message),
title: TextButton(
@@ -1,12 +1,10 @@
import 'dart:collection';
import 'dart:ui';
import 'package:aitrainer_app/bloc/body_type/bodytype_bloc.dart';
import 'package:aitrainer_app/util/app_localization.dart';
import 'package:aitrainer_app/repository/customer_repository.dart';
import 'package:aitrainer_app/util/enums.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar.dart';
import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/dialog_html.dart';
import 'package:flutter/material.dart';
-1
View File
@@ -6,7 +6,6 @@ import 'package:aitrainer_app/repository/customer_exercise_device_repository.dar
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar.dart';
import 'package:aitrainer_app/widgets/image_button.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
-3
View File
@@ -8,9 +8,7 @@ import 'package:aitrainer_app/model/fitness_state.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/app_bar_progress.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
@@ -52,7 +50,6 @@ class _CustomerFitnessPageState extends State<CustomerFitnessPage> with Trans {
if (!fulldata) {
_bar = AppBarProgress(max: 30, min: 15);
}
final double h = 27;
return Scaffold(
appBar: _bar,
body: Container(
-1
View File
@@ -6,7 +6,6 @@ import 'package:aitrainer_app/repository/customer_repository.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/app_bar_progress.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
-2
View File
@@ -5,9 +5,7 @@ import 'package:aitrainer_app/repository/customer_repository.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/app_bar_progress.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
-2
View File
@@ -13,8 +13,6 @@ import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/app_bar_progress.dart';
import 'package:aitrainer_app/widgets/number_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
-2
View File
@@ -6,9 +6,7 @@ import 'package:aitrainer_app/repository/customer_repository.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/app_bar_progress.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
-2
View File
@@ -6,9 +6,7 @@ import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/app_bar_progress.dart';
import 'package:aitrainer_app/widgets/number_picker.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
-1
View File
@@ -1,5 +1,4 @@
import 'dart:collection';
import 'dart:ui';
import 'package:aitrainer_app/bloc/tutorial/tutorial_bloc.dart';
import 'package:aitrainer_app/widgets/tutorial_widget.dart';
import 'package:intl/intl.dart';
-1
View File
@@ -12,7 +12,6 @@ import 'package:aitrainer_app/widgets/dialog_html.dart';
import 'package:aitrainer_app/widgets/number_picker.dart';
import 'package:aitrainer_app/widgets/timer_widget.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
-1
View File
@@ -8,7 +8,6 @@ import 'package:aitrainer_app/widgets/treeview_parent_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_html/style.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
// ignore: must_be_immutable
-1
View File
@@ -8,7 +8,6 @@ import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/dialog_common.dart';
import 'package:aitrainer_app/widgets/dialog_web_browser.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
-1
View File
@@ -3,7 +3,6 @@ import 'package:aitrainer_app/bloc/menu/menu_bloc.dart';
import 'package:aitrainer_app/widgets/app_bar.dart';
import 'package:aitrainer_app/widgets/bottom_nav.dart';
import 'package:aitrainer_app/widgets/menu_page_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+3 -3
View File
@@ -99,7 +99,7 @@ class MyDevelopmentLog extends StatelessWidget with Trans, Common {
view: CalendarView.month,
monthViewSettings: MonthViewSettings(
showAgenda: true,
appointmentDisplayMode: MonthAppointmentDisplayMode.appointment,
appointmentDisplayMode: MonthAppointmentDisplayMode.indicator,
showTrailingAndLeadingDates: true,
),
appointmentTimeTextFormat: 'HH:mm',
@@ -307,11 +307,11 @@ class MyDevelopmentLog extends StatelessWidget with Trans, Common {
TextSpan(text: t("The found exercises are")),
TextSpan(text: " "),
TextSpan(
text: t("in red"),
text: t("in green"),
style: GoogleFonts.inter(
fontSize: 14,
fontWeight: FontWeight.normal,
color: Colors.redAccent,
color: Color(0xffb4f500),
),
),
TextSpan(text: " "),
-2
View File
@@ -11,9 +11,7 @@ import 'package:aitrainer_app/bloc/development_by_muscle/development_by_muscle_b
import 'package:aitrainer_app/model/workout_menu_tree.dart';
import 'package:aitrainer_app/library/tree_view.dart';
import 'package:aitrainer_app/widgets/bottom_nav.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
-1
View File
@@ -14,7 +14,6 @@ import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar.dart';
import 'package:aitrainer_app/widgets/bottom_nav.dart';
import 'package:aitrainer_app/widgets/image_button.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class MyDevelopmentPage extends StatefulWidget {
-2
View File
@@ -2,9 +2,7 @@ import 'package:aitrainer_app/bloc/development_sizes/development_sizes_bloc.dart
import 'package:aitrainer_app/model/property.dart';
import 'package:aitrainer_app/repository/customer_repository.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
-1
View File
@@ -10,7 +10,6 @@ import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/dialog_common.dart';
import 'package:aitrainer_app/widgets/dialog_web_browser.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
-1
View File
@@ -3,7 +3,6 @@ import 'package:aitrainer_app/repository/user_repository.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
-2
View File
@@ -4,11 +4,9 @@ import 'package:aitrainer_app/service/logging.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/dialog_common.dart';
import 'package:aitrainer_app/widgets/sales_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_html/style.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
-1
View File
@@ -12,7 +12,6 @@ import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:aitrainer_app/widgets/bottom_nav.dart';
import 'package:aitrainer_app/widgets/dialog_web_browser.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
@@ -20,7 +20,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_html/style.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
import 'package:syncfusion_flutter_datagrid/datagrid.dart';
+1 -3
View File
@@ -1,5 +1,3 @@
import 'dart:collection';
import 'package:aitrainer_app/bloc/training_plan/training_plan_bloc.dart';
import 'package:aitrainer_app/library/custom_icon_icons.dart';
import 'package:aitrainer_app/model/customer_training_plan.dart';
@@ -185,7 +183,7 @@ class _ExerciseTileState extends State<ExerciseTile> with Trans {
}
void activateCustomPlan() {
widget.bloc.add(TrainingPlanCustomAddLoad(exerciseType: widget.exerciseType));
widget.bloc.add(TrainingPlanAddLoad(exerciseType: widget.exerciseType));
Navigator.of(context).popAndPushNamed("myTrainingPlanCustomAdd");
}
-3
View File
@@ -3,12 +3,9 @@ import 'package:aitrainer_app/util/app_language.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar_min.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:keyboard_actions/keyboard_actions.dart';
import 'package:keyboard_actions/keyboard_actions_config.dart';
import 'package:keyboard_actions/keyboard_actions_item.dart';
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
class TrainingPlanCustomAddPage extends StatefulWidget {
+100 -48
View File
@@ -5,6 +5,7 @@ import 'package:aitrainer_app/library/custom_icon_icons.dart';
import 'package:aitrainer_app/model/customer_training_plan_details.dart';
import 'package:aitrainer_app/model/exercise_plan_detail.dart';
import 'package:aitrainer_app/util/app_localization.dart';
import 'package:aitrainer_app/util/common.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/widgets/app_bar.dart';
import 'package:aitrainer_app/widgets/dialog_common.dart';
@@ -12,6 +13,7 @@ import 'package:aitrainer_app/widgets/dialog_html.dart';
import 'package:aitrainer_app/widgets/menu_image.dart';
import 'package:badges/badges.dart';
import 'package:carousel_slider/carousel_slider.dart';
import 'package:extended_tabs/extended_tabs.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
@@ -312,7 +314,6 @@ class _ExerciseListState extends State<ExerciseList> with Trans {
void animate() {
offset = widget.bloc.getOffset();
//print("Offset: $offset");
if (scrollController.hasClients) {
scrollController.animateTo(offset, duration: Duration(milliseconds: 300), curve: Curves.easeIn);
}
@@ -390,7 +391,10 @@ class _ExerciseListState extends State<ExerciseList> with Trans {
tiles.add(GestureDetector(
onTap: () =>
bloc.getNext() != null ? executeExercise(bloc, bloc.getNext()!, context) : Navigator.of(context).pushNamed('home'),
child: ExerciseTile(bloc: bloc, detail: element)));
child: ExerciseTile(
bloc: bloc,
detail: element,
)));
}
prev = element;
});
@@ -407,10 +411,9 @@ class ExerciseTile extends StatelessWidget with Trans {
ExerciseTile({required this.bloc, required this.detail});
Widget getExerciseQuantities(CustomerTrainingPlanDetails detail, int step, bool noFilter) {
Widget getExerciseQuantities(CustomerTrainingPlanDetails detail, int step, bool noFilter, int highlightStep) {
bool skipped = detail.state == ExercisePlanDetailState.skipped;
String quantities = "";
String set = "";
List<TextSpan> spans = [];
if (detail.exerciseType!.name == "Warming Up") {
quantities = t("Min. 10 minutes");
@@ -423,47 +426,50 @@ class ExerciseTile extends StatelessWidget with Trans {
TextSpan(text: quantities),
);
} else {
set = detail.set! > 1 ? "${detail.set} " + t("set") : "";
List<CustomerTrainingPlanDetails> details = bloc.getAllDetailsSameExercise(detail);
int index = 0;
bool isWeight = true;
if (set.length > 0) {
spans.add(
TextSpan(
text: step.toString() + " ",
style: GoogleFonts.archivoBlack(
color: Colors.orange[600],
)),
);
spans.add(
TextSpan(text: "/ " + set),
);
}
details.forEach((element) {
quantities = "";
String delimiter = ",";
if (index == 0) {
delimiter = "";
if (index > 0) {
spans.add(
TextSpan(text: ", "),
);
}
//print("STEP $step highlight: $highlightStep index: $index");
if (element.set! > 1) {
spans.add(
TextSpan(
text: (element.exercises.length + 1).toString(),
style: GoogleFonts.archivoBlack(
color: highlightStep == index && noFilter ? Colors.orange[600] : Colors.white,
)),
);
spans.add(
TextSpan(text: "/${element.set} x "),
);
}
if (element.repeats == -1) {
quantities += delimiter + " MAX ";
quantities += " MAX ";
} else {
quantities += delimiter + " ${element.repeats}";
quantities += "${element.repeats}";
}
if (element.exerciseType!.unitQuantityUnit != null) {
if (element.exerciseType!.unitQuantityUnit != null && element.weight != null) {
quantities += "x";
if (element.weight == -1 || element.weight == -2 || element.weight == -3) {
quantities += "? kg";
} else {
num weight = element.weight! % element.weight!.round() == 0 ? element.weight!.round() : element.weight!;
quantities += "$weight kg";
}
} else {
isWeight = false;
}
if (step == index && noFilter) {
if (highlightStep == index && noFilter) {
spans.add(
TextSpan(
text: quantities,
@@ -509,15 +515,55 @@ class ExerciseTile extends StatelessWidget with Trans {
@override
Widget build(BuildContext context) {
setContext(context);
//bloc.setTileKey(tileKey);
return CarouselSlider(
options: CarouselOptions(
viewportFraction: 1,
reverse: false,
enableInfiniteScroll: false,
autoPlay: false,
aspectRatio: 1.3,
enlargeCenterPage: true,
onPageChanged: (index, reason) => {print("index changed $index")},
enlargeStrategy: CenterPageEnlargeStrategy.scale),
items: getExerciseTiles(detail),
);
}
List<Widget> getExerciseTiles(CustomerTrainingPlanDetails detail) {
final List<Widget> list = [];
list.add(getTile(detail));
/* if (detail.alternatives.length == 0) {
detail.alternatives = Common.getExerciseTypeAlternatives(detail.exerciseTypeId);
}
if (detail.alternatives.length > 0) {
detail.alternatives.forEach((element) {
CustomerTrainingPlanDetails? alternative = bloc.createDetailFromExerciseType(element, detail);
if (alternative != null) {
final Widget widget = getTile(alternative);
print("Alternatives for ${detail.exerciseTypeId}: $alternative");
list.add(widget);
}
});
} */
return list;
}
Widget getTile(CustomerTrainingPlanDetails detail) {
final CustomerTrainingPlanDetails? next = bloc.getNext();
final bool noFilter = next != null && next.exerciseTypeId == detail.exerciseTypeId;
final bool done = bloc.isAllDetailsSameExerciseFinished(detail); //detail.state == ExercisePlanDetailState.finished;
final int step = bloc.getStep(detail); //detail.exercises.length;
final bool done = bloc.isAllDetailsSameExerciseFinished(detail);
final bool buddyWarning = detail.exerciseType == null ? false : detail.exerciseType!.buddyWarning;
final bool hasAlternative = false; //detail.alternatives.length > 0;
final int step = bloc.getStep(detail);
final int highlightStep = bloc.getHighlightStep(detail);
final bool hasAlternative = detail.alternatives.length > 0;
return Container(
child: Stack(alignment: Alignment.centerRight, children: [
//key: this.tileKey,
child: ClipRect(
child: Stack(alignment: Alignment.centerRight, children: [
Stack(alignment: Alignment.centerLeft, children: [
Stack(alignment: Alignment.bottomLeft, children: [
Badge(
@@ -529,7 +575,7 @@ class ExerciseTile extends StatelessWidget with Trans {
badgeColor: Colors.transparent,
showBadge: noFilter || done,
badgeContent: IconButton(
iconSize: 40,
iconSize: 36,
onPressed: () => !done ? skip() : {},
icon: Icon(
done ? CustomIcon.ok_circled : Icons.cancel,
@@ -559,13 +605,13 @@ class ExerciseTile extends StatelessWidget with Trans {
child: Badge(
elevation: 0,
padding: EdgeInsets.all(0),
position: BadgePosition.topEnd(top: 65, end: 1),
position: BadgePosition.topEnd(top: 5, end: 60),
animationDuration: Duration(milliseconds: 500),
animationType: BadgeAnimationType.fade,
badgeColor: Colors.transparent,
showBadge: buddyWarning,
badgeContent: IconButton(
iconSize: 50,
iconSize: 36,
onPressed: () => showDialog(
context: context,
builder: (BuildContext context) {
@@ -608,7 +654,7 @@ class ExerciseTile extends StatelessWidget with Trans {
: null,
height: 80,
width: double.infinity,
child: getExerciseQuantities(detail, step, noFilter),
child: getExerciseQuantities(detail, step, noFilter, highlightStep),
)
])))),
Container(
@@ -639,25 +685,31 @@ class ExerciseTile extends StatelessWidget with Trans {
),
]),
hasAlternative
? Image.asset(
'asset/image/alternatives_arrow.png',
height: 100,
width: 100,
)
? Positioned(
top: 50,
child: Image.asset(
'asset/image/alternatives_arrow.png',
height: 100,
width: 100,
color: noFilter ? Color(0xffb4f500) : Colors.grey,
))
: Offstage(),
]),
hasAlternative
? Transform.rotate(
angle: pi,
alignment: Alignment.center,
child: Image.asset(
'asset/image/alternatives_arrow.png',
height: 100,
width: 100,
),
? Positioned(
top: 50,
child: Transform.rotate(
angle: pi,
alignment: Alignment.center,
child: Image.asset(
'asset/image/alternatives_arrow.png',
height: 100,
width: 100,
color: noFilter ? Color(0xffb4f500) : Colors.grey,
)),
)
: Offstage(),
]));
])));
}
void skip() {
+2 -2
View File
@@ -112,8 +112,8 @@ class TrainingPlanExercise extends StatelessWidget with Trans {
set: detail.set,
exerciseNr: detail.exercises.length + 1,
onUnitQuantityChanged: (value) => bloc.add(TrainingPlanWeightChangeRecalculate(weight: value, detail: detail)),
onUnitQuantityChangeUp: () => bloc.add(TrainingPlanWeightChangeUp(detail: detail)),
onUnitQuantityChangeDown: () => bloc.add(TrainingPlanWeightChangeDown(detail: detail)),
//onUnitQuantityChangeUp: () => bloc.add(TrainingPlanWeightChangeUp(detail: detail)),
//onUnitQuantityChangeDown: () => bloc.add(TrainingPlanWeightChangeDown(detail: detail)),
onQuantityChanged: (value) => bloc.add(TrainingPlanRepeatsChange(repeats: value.toInt(), detail: detail)),
exerciseTypeId: detail.exerciseType!.exerciseTypeId,
originalQuantity: originalQuantity,
-1
View File
@@ -10,7 +10,6 @@ import 'package:aitrainer_app/widgets/app_bar.dart';
import 'package:aitrainer_app/widgets/bottom_nav.dart';
import 'package:aitrainer_app/widgets/dialog_common.dart';
import 'package:aitrainer_app/widgets/image_button.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';