import 'dart:convert'; import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/model/exercise_tree.dart'; import 'package:aitrainer_app/model/exercise_tree_parents.dart'; import 'api.dart'; class ExerciseTreeApi { final APIClient _client = new APIClient(); Future> getExerciseTree() async { final String body = await _client.get("exercise_tree", ""); Iterable json = jsonDecode(body); List exerciseTree = json.map((exerciseTree) => ExerciseTree.fromJson(exerciseTree)).toList(); exerciseTree = await getExerciseTreeParents(exerciseTree); Cache().setExerciseTree(exerciseTree); return exerciseTree; } Future> getExerciseTreeParents(List exerciseTree) async { List copyList = this._copyList(exerciseTree); final String body = await _client.get("exercise_tree_parents", ""); Iterable json = jsonDecode(body); final List exerciseTreeParents = json.map((exerciseTreeParent) => ExerciseTreeParents.fromJson(exerciseTreeParent)).toList(); int treeIndex = 0; copyList.forEach((element) async { int index = 0; exerciseTreeParents.forEach((parent) { if (parent.exerciseTreeChildId == element.treeId) { if (index > 0) { ExerciseTree newElement = element.copy(parent.exerciseTreeParentId); exerciseTree.add(newElement); //print("ExerciseTree " + newElement.toJson().toString()); } else { element.parentId = parent.exerciseTreeParentId; exerciseTree[treeIndex].parentId = parent.exerciseTreeParentId; } index++; } }); print("ExerciseTree " + element.toJson().toString()); treeIndex++; }); return exerciseTree; } List _copyList(List tree) { final List copyList = List(); tree.forEach((element) { final ExerciseTree copy = element.copy(-1); copyList.add(copy); }); return copyList; } }