wt1.1d custom exercise, mydevelopment exercise list, environment for different databases

This commit is contained in:
Bossanyi Tibor
2020-09-03 18:38:20 +02:00
parent 6b0892ec09
commit f0ba820385
22 changed files with 403 additions and 117 deletions
+1 -1
View File
@@ -65,7 +65,7 @@ class AccountPage extends StatelessWidget {
}
),
),
bottomNavigationBar: BottomNavigator(bottomNavIndex: 2));
bottomNavigationBar: BottomNavigator(bottomNavIndex: 3));
}
ListView accountWidget(BuildContext context, String customerName, AccountBloc accountBloc) {
+5 -3
View File
@@ -277,7 +277,7 @@ class _CustomExerciseNewPageState extends State<CustomExercisePage> {
padding: EdgeInsets.only(left:10),
maxLines: 1,
textFieldBloc: bloc.rm75Field,
style: TextStyle(color: Colors.deepOrange, fontSize: 12, fontWeight: FontWeight.bold),
style: TextStyle(color: Colors.deepOrange, fontSize: 12, fontWeight: FontWeight.normal),
decoration: InputDecoration(
border: InputBorder.none,
fillColor: Colors.white,
@@ -289,7 +289,7 @@ class _CustomExerciseNewPageState extends State<CustomExercisePage> {
padding: EdgeInsets.only(left:10),
maxLines: 1,
textFieldBloc: bloc.rm75OconnorField,
style: TextStyle(color: Colors.deepOrange, fontSize: 12, fontWeight: FontWeight.bold),
style: TextStyle(color: Colors.deepOrange, fontSize: 12, fontWeight: FontWeight.normal),
decoration: InputDecoration(
border: InputBorder.none,
fillColor: Colors.white,
@@ -301,7 +301,7 @@ class _CustomExerciseNewPageState extends State<CustomExercisePage> {
padding: EdgeInsets.only(left:10),
maxLines: 1,
textFieldBloc: bloc.rm75WendlerField,
style: TextStyle(color: Colors.deepOrange, fontSize: 12, fontWeight: FontWeight.bold),
style: TextStyle(color: Colors.deepOrange, fontSize: 12, fontWeight: FontWeight.normal),
decoration: InputDecoration(
border: InputBorder.none,
fillColor: Colors.white,
@@ -366,6 +366,7 @@ class _CustomExerciseNewPageState extends State<CustomExercisePage> {
{
args['exerciseRepository'] = bloc.exerciseRepository,
args['percent'] = 0.75,
args['readonly'] = true,
Navigator.of(context).pushNamed('exerciseControlPage',
arguments: args)
},
@@ -381,6 +382,7 @@ class _CustomExerciseNewPageState extends State<CustomExercisePage> {
{
args['exerciseRepository'] = bloc.exerciseRepository,
args['percent'] = 0.5,
args['readonly'] = true,
Navigator.of(context).pushNamed('exerciseControlPage',
arguments: args )
},
+3 -7
View File
@@ -22,10 +22,11 @@ class _ExerciseControlPage extends State<ExerciseControlPage> {
LinkedHashMap arguments = ModalRoute.of(context).settings.arguments;
final ExerciseRepository exerciseRepository = arguments['exerciseRepository'];
final double percent = arguments['percent'];
final bool readonly = arguments['readonly'];
return BlocProvider(
create: (context) =>
ExerciseControlFormBloc(exerciseRepository: exerciseRepository, percentToCalculate: percent),
ExerciseControlFormBloc(exerciseRepository: exerciseRepository, percentToCalculate: percent, readonly: readonly),
child: BlocBuilder<ExerciseControlFormBloc, FormBlocState>(
builder: (context, state) {
// ignore: close_sinks
@@ -148,12 +149,7 @@ class _ExerciseControlPage extends State<ExerciseControlPage> {
inputFormatters: [
WhitelistingTextInputFormatter (RegExp(r"[\d.]"))
],
onChanged: (input) => {
print("Quantity 1 value $input"),
//exerciseBloc.exerciseRepository.setQuantity(double.parse(input)),
//exerciseBloc.exerciseRepository
// .setUnit(exerciseBloc.exerciseRepository.exerciseType.unit)
},
decoration: InputDecoration(
fillColor: Colors.white,
filled: false,
+18 -7
View File
@@ -1,3 +1,5 @@
import 'dart:collection';
import 'package:aitrainer_app/bloc/exercise_form_bloc.dart';
import 'package:aitrainer_app/localization/app_language.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
@@ -235,7 +237,7 @@ class _ExerciseNewPageState extends State<ExerciseNewPage> {
}
void confirmationDialog( ExerciseFormBloc bloc ) {
LinkedHashMap args = LinkedHashMap();
print("exercise validated " + bloc.exerciseRepository.exercise.quantity.toString());
if ( bloc.exerciseRepository.exercise.quantity == null) {
return;
@@ -245,9 +247,12 @@ class _ExerciseNewPageState extends State<ExerciseNewPage> {
bloc.exerciseRepository.exercise.quantity.round().toString() :
bloc.exerciseRepository.exercise.quantity.toString();
String unitQuantity = bloc.exerciseRepository.exercise.unitQuantity % 1 == 0?
bloc.exerciseRepository.exercise.unitQuantity.round().toString() :
bloc.exerciseRepository.exercise.unitQuantity.toString();
String unitQuantity = "";
if ( bloc.exerciseRepository.exercise.unitQuantity != null ) {
unitQuantity = bloc.exerciseRepository.exercise.unitQuantity % 1 == 0 ?
bloc.exerciseRepository.exercise.unitQuantity.round().toString() :
bloc.exerciseRepository.exercise.unitQuantity.toString();
}
showCupertinoDialog(
@@ -261,7 +266,7 @@ class _ExerciseNewPageState extends State<ExerciseNewPage> {
children: [
Divider(),
Text(AppLocalizations.of(context).translate("Exercise") + ": " +
AppLocalizations.of(context).translate(bloc.exerciseRepository.exerciseType.name),
bloc.exerciseRepository.exerciseType.name,
style: (TextStyle(color: Colors.blue)),),
Text(quantity + " " +
AppLocalizations.of(context).translate(bloc.exerciseRepository.exerciseType.unit),
@@ -285,10 +290,16 @@ class _ExerciseNewPageState extends State<ExerciseNewPage> {
onPressed: () => {
bloc.exerciseRepository.setCustomer(Cache().userLoggedIn),
bloc.exerciseRepository.addExercise(),
Navigator.pop(context),
Navigator.pop(context),
},
if ( bloc.exerciseRepository.exerciseType.is1RM ) {
args['exerciseRepository'] = bloc.exerciseRepository,
args['percent'] = 0.75,
args['readonly'] = false,
Navigator.of(context).pushNamed('exerciseControlPage',
arguments: args )
}
},
)
],
)
+147
View File
@@ -0,0 +1,147 @@
import 'package:aitrainer_app/localization/app_language.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
import 'package:aitrainer_app/model/exercise.dart';
import 'package:aitrainer_app/model/exercise_type.dart';
import 'package:aitrainer_app/repository/exercise_repository.dart';
import 'package:aitrainer_app/widgets/app_bar.dart';
import 'package:aitrainer_app/widgets/bottom_nav.dart';
import 'package:flutter/material.dart';
import 'package:flutter_treeview/tree_view.dart';
class MyDevelopmentPage extends StatefulWidget {
@override
_MyDevelopmentPage createState() => _MyDevelopmentPage();
}
class _MyDevelopmentPage extends State<MyDevelopmentPage> {
@override
Widget build(BuildContext context) {
final ExerciseRepository exerciseRepository = ExerciseRepository();
return Scaffold(
appBar: AppBarNav(),
body: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('asset/image/WT_light_background.png'),
fit: BoxFit.cover,
alignment: Alignment.center,
),
),
child: Container(
padding: EdgeInsets.all(10),
child:
exerciseWidget(exerciseRepository),
)
),
bottomNavigationBar: BottomNavigator(bottomNavIndex: 1));
}
Widget exerciseWidget(ExerciseRepository exerciseRepository) {
TreeViewController _treeViewController = TreeViewController(children: nodeExercises(exerciseRepository) );
TreeViewTheme _treeViewTheme = TreeViewTheme(
expanderTheme: ExpanderThemeData(
type: ExpanderType.caret,
modifier: ExpanderModifier.none,
position: ExpanderPosition.start,
color: Colors.red.shade800,
size: 20,
),
labelStyle: TextStyle(
fontSize: 12,
letterSpacing: 0.1,
),
parentLabelStyle: TextStyle(
fontSize: 16,
letterSpacing: 0.1,
fontWeight: FontWeight.w800,
color: Colors.orange.shade600,
),
iconTheme: IconThemeData(
size: 18,
color: Colors.grey.shade800,
),
colorScheme: ColorScheme.light(
background: Colors.transparent
),
);
return TreeView(
controller: _treeViewController,
allowParentSelect: false,
supportParentDoubleTap: false,
//onExpansionChanged: _expandNodeHandler,
onNodeTap: (key) {
setState(() {
_treeViewController = _treeViewController.copyWith(selectedKey: key);
});
},
theme: _treeViewTheme,
);
}
List<Node> nodeExercises(ExerciseRepository exerciseRepository) {
List<Node> nodes = List<Node>();
List<Exercise> exercises = exerciseRepository.getExerciseList();
String prevDay = "";
Node actualNode;
List<Node> listExercisesPerDay;
exercises.forEach((element) {
Exercise exercise = element;
ExerciseType exerciseType =
exerciseRepository.getExerciseTypeById(exercise.exerciseTypeId);
String actualDay = exercise.dateAdd.year.toString()+"-"+
exercise.dateAdd.month.toString()+"-"+
exercise.dateAdd.day.toString();
if ( prevDay.compareTo(actualDay) != 0) {
listExercisesPerDay = List<Node>();
actualNode =
Node(
label: actualDay,
key: exercise.dateAdd.toString(),
expanded: true,
children: listExercisesPerDay,
icon: NodeIcon(
codePoint: Icons.date_range.codePoint,
color: "blue"
)
);
nodes.add(actualNode);
prevDay = actualDay;
}
String exerciseName = AppLanguage().appLocal == Locale("en") ?
exerciseType.name :
exerciseType.nameTranslation;
String unitQuantity = exerciseType.unitQuantity == "1" ?
exercise.unitQuantity.toStringAsFixed(0)
+ " " + AppLocalizations.of(context).translate(exerciseType.unitQuantityUnit) + " "
: "";
String labelExercise =
exerciseName + " " + unitQuantity
+ exercise.quantity.toStringAsFixed(0) + " "
+ AppLocalizations.of(context).translate(exercise.unit);
listExercisesPerDay.add(
Node(
label: labelExercise,
key: exercise.exerciseId.toString(),
expanded: false,
icon: NodeIcon(
codePoint: Icons.repeat.codePoint,
color: "blue"
)
)
);
});
return nodes;
}
}
+1 -1
View File
@@ -69,7 +69,7 @@ class SettingsPage extends StatelessWidget{
),
),
),
bottomNavigationBar: BottomNavigator(bottomNavIndex: 3)
bottomNavigationBar: BottomNavigator(bottomNavIndex: 4)
);
}