getFilteredExercises method

Future<Map<String, dynamic>> getFilteredExercises({
  1. required String email,
  2. String? category,
  3. bool onlyFavorites = false,
})

Returns exercises filtered by category or returns favourites.

Implementation

Future<Map<String, dynamic>> getFilteredExercises({
  required String email,
  String? category,
  bool onlyFavorites = false,
}) async {
  final allExercises = await getAllExercises();
  final favoritesRaw = await getFavouriteExercises(email);
  final favoriteNames = favoritesRaw.map((e) => e['name'] as String).toList();

  List<Map<String, dynamic>> filtered;

  if (onlyFavorites) {
    filtered = allExercises.where((exercise) {
      return favoriteNames.contains(exercise['name']);
    }).toList();
  } else if (category != null) {
    filtered = allExercises.where((exercise) {
      return exercise['category'] == category;
    }).toList();
  } else {
    filtered = allExercises;
  }

  return {
    'exercises': filtered,
    'favorites': favoriteNames,
  };
}