import 'dart:collection'; import 'package:aitrainer_app/localization/app_language.dart'; import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/model/exercise_tree.dart'; import 'package:aitrainer_app/model/exercise_type.dart'; import 'package:aitrainer_app/model/workout_tree.dart'; import 'package:aitrainer_app/service/exercise_tree_service.dart'; import 'package:aitrainer_app/service/exercisetype_service.dart'; import 'package:flutter/material.dart'; class MenuTreeRepository { final LinkedHashMap tree = LinkedHashMap(); Future createTree() async { final AppLanguage appLanguage = AppLanguage(); bool isEnglish = appLanguage.appLocal == Locale('en'); List exerciseTree = Cache().getExerciseTree(); if ( exerciseTree == null || exerciseTree.length == 0) { await ExerciseTreeApi().getExerciseTree(); } exerciseTree.forEach( (treeItem) async { String treeName = isEnglish ? treeItem.name : treeItem.nameTranslation; String assetImage = 'asset/menu/' + treeItem.imageUrl.substring(7); bool is1RM = treeItem.name == '1RM' ? true : false; if ( is1RM == false) { is1RM = false; //isParent1RM(treeItem.treeId); } this.tree[treeItem.name] = WorkoutTree( treeItem.treeId, treeItem.parentId, treeName, assetImage, Colors.white, 32, false, 0, null, false, is1RM ); }); List exerciseTypes = Cache().getExerciseTypes(); if ( exerciseTypes == null || exerciseTypes.length == 0) { await ExerciseTypeApi().getExerciseTypes(); } exerciseTypes.forEach( (exerciseType) { String exerciseTypeName = isEnglish ? exerciseType.name : exerciseType.nameTranslation; String assetImage = 'asset/menu/' + exerciseType.imageUrl.substring(7); bool is1RM = false; //this.isParent1RM(exerciseType.treeId); this.tree[exerciseType.name] = WorkoutTree( exerciseType.exerciseTypeId, exerciseType.treeId, exerciseTypeName, assetImage, Colors.white, 16, true, exerciseType.exerciseTypeId, exerciseType, exerciseType.base, is1RM ); }); } bool isParent1RM(int treeId) { bool isTreeItem1RM = false; for (int i = 0; i < this.tree.length; i++ ) { WorkoutTree treeItem = this.tree[i]; if ( treeItem.id == treeId ) { isTreeItem1RM = treeItem.is1RM; break; } }; return isTreeItem1RM; } LinkedHashMap getBranch(int parent) { LinkedHashMap branch = LinkedHashMap(); tree.forEach((key, value) { WorkoutTree workoutTree = value as WorkoutTree; if ( parent == workoutTree.parent) { branch[key] = value; } }); return branch; } }