workouttest_app/lib/view/exercise_log_page.dart
2020-09-16 15:41:39 +02:00

149 lines
5.0 KiB
Dart

import 'dart:collection';
import 'package:aitrainer_app/localization/app_language.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
import 'package:aitrainer_app/model/cache.dart';
import 'package:aitrainer_app/model/exercise.dart';
import 'package:aitrainer_app/model/exercise_type.dart';
import 'package:aitrainer_app/repository/customer_repository.dart';
import 'package:aitrainer_app/repository/exercise_repository.dart';
import 'package:aitrainer_app/widgets/app_bar_common.dart';
import 'package:flutter/material.dart';
import 'package:flutter_treeview/tree_view.dart';
class ExerciseLogPage extends StatefulWidget {
@override
_ExerciseLogPage createState() => _ExerciseLogPage();
}
class _ExerciseLogPage extends State<ExerciseLogPage> {
@override
Widget build(BuildContext context) {
LinkedHashMap arguments = ModalRoute.of(context).settings.arguments;
final ExerciseRepository exerciseRepository = arguments['exerciseRepository'];
final CustomerRepository customerRepository = arguments['customerRepository'];
final int customerId = arguments['customerId'];
return Scaffold(
appBar: AppBarCommonNav(),
body: Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
image: DecorationImage(
image: customerId == Cache().userLoggedIn.customerId ? AssetImage('asset/image/WT_light_background.png'):
AssetImage('asset/image/WT_menu_dark.png'),
fit: BoxFit.cover,
alignment: Alignment.center,
),
),
child: exerciseWidget(exerciseRepository, customerId),
)
);
}
Widget exerciseWidget(ExerciseRepository exerciseRepository, int customerId) {
TreeViewController _treeViewController =
TreeViewController(children: nodeExercises(exerciseRepository, customerId));
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, int customerId) {
List<Node> nodes = List<Node>();
List<Exercise> exercises;
if ( customerId == Cache().userLoggedIn.customerId ) {
exercises = exerciseRepository.getExerciseList();
} else if ( Cache().getTrainee() != null && customerId == Cache().getTrainee().customerId ) {
exercises = exerciseRepository.getExerciseListTrainee();
}
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;
}
}