import 'dart:collection'; import 'package:aitrainer_app/widgets/app_bar.dart'; import 'package:aitrainer_app/widgets/bottom_nav.dart'; import 'package:intl/intl.dart'; import 'package:aitrainer_app/localization/app_language.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/exercise_repository.dart'; import 'package:aitrainer_app/library/tree_view.dart'; import 'package:aitrainer_app/util/common.dart'; import 'package:aitrainer_app/util/trans.dart'; import 'package:flutter/material.dart'; import 'package:aitrainer_app/widgets/treeview_parent_widget.dart'; class ExerciseLogPage extends StatefulWidget { @override _ExerciseLogPage createState() => _ExerciseLogPage(); } class _ExerciseLogPage extends State with Trans, Common { @override Widget build(BuildContext context) { LinkedHashMap arguments = ModalRoute.of(context).settings.arguments; final ExerciseRepository exerciseRepository = arguments['exerciseRepository']; final int customerId = arguments['customerId']; setContext(context); return Scaffold( appBar: AppBarNav(depth: 1), 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), ), bottomNavigationBar: BottomNavigator(bottomNavIndex: 1), ); } Widget exerciseWidget(ExerciseRepository exerciseRepository, int customerId) { return TreeView( startExpanded: false, children: _getTreeChildren(exerciseRepository, customerId), ); } List _getTreeChildren(ExerciseRepository exerciseRepository, int customerId) { if ( customerId == Cache().userLoggedIn.customerId ) { exerciseRepository.exerciseList = exerciseRepository.getExerciseList(); } else if ( Cache().getTrainee() != null && customerId == Cache().getTrainee().customerId ) { exerciseRepository.exerciseList = exerciseRepository.getExerciseListTrainee(); } exerciseRepository.sortByDate(); List listWidget = List(); Card explanation = Card( color: Colors.white60, child: Container( padding: EdgeInsets.only(left: 10, right: 5, top: 12, bottom: 8), child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Row( children: [ Icon( Icons.info, color: Colors.orangeAccent, ), Text(" "), Text( t("My Exercise Logs"), style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), ], ), Divider( color: Colors.transparent, ), Text( t("In this list you will find all your executed exercises grouped by the date."), style: TextStyle(fontSize: 12, fontWeight: FontWeight.normal), ), ], ) ) ); listWidget.add(explanation); List listExercises = List(); String origDate = ""; exerciseRepository.exerciseList.forEach((exercise) { String exerciseDate = DateFormat("yyyy-MM-dd", AppLanguage().appLocal.toString()).format(exercise.dateAdd); if ( origDate != exerciseDate) { if ( origDate.length == 0 ) { listExercises.add(exercise); origDate = exerciseDate; } else { listWidget.add( Container( margin: const EdgeInsets.only(left: 4.0), child: TreeViewChild( startExpanded: true, parent: TreeviewParentWidget(text: origDate), children: _getChildList(listExercises, exerciseRepository), ) ) ); listExercises = List(); listExercises.add(exercise); origDate = exerciseDate; } } else { listExercises.add(exercise); origDate = exerciseDate; } }); if ( listExercises.length > 0) { listWidget.add( Container( margin: const EdgeInsets.only(left: 4.0), child: TreeViewChild( startExpanded: true, parent: TreeviewParentWidget(text: origDate), children: _getChildList(listExercises, exerciseRepository), ) ) ); } return listWidget; } List _getChildList(List listExercises, ExerciseRepository exerciseRepository) { List list = List(); bool isEnglish = AppLanguage().appLocal == Locale('en'); listExercises.forEach((exercise) { ExerciseType exerciseType = exerciseRepository.getExerciseTypeById(exercise.exerciseTypeId); String exerciseName = isEnglish ? exerciseType.name : exerciseType.nameTranslation; String unitQuantity = exerciseType.unitQuantity == "1" ? exercise.unitQuantity.toStringAsFixed(0) + " " + t(exerciseType.unitQuantityUnit) + " " : ""; String labelExercise = unitQuantity + exercise.quantity.toStringAsFixed(0) + " " + t(exercise.unit); list.add( Card( margin: EdgeInsets.only(left: 10, top: 5), color: Colors.white54, child: Container( padding: const EdgeInsets.only(left: 5, top: 0, right: 5, bottom: 0), child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Icon(Icons.accessibility, color: Colors.black12), SizedBox(width: 20), Flexible( child: Text( exerciseName, textAlign: TextAlign.start, style: TextStyle(fontSize: 12, color: Colors.black), ), ), SizedBox(width: 20), Text(labelExercise , style: TextStyle(fontSize: 9, color: Colors.blueAccent.shade700),) , ]), ) ), ); }); return list; } }