diff --git a/lib/features/diary/presentation/bloc/diary_cubit.dart b/lib/features/diary/presentation/bloc/diary_cubit.dart index 53beebe0..45f032ce 100644 --- a/lib/features/diary/presentation/bloc/diary_cubit.dart +++ b/lib/features/diary/presentation/bloc/diary_cubit.dart @@ -50,11 +50,14 @@ class DiaryCubit extends Cubit { Future setSelectedDay(DateTime day) async { final prevDay = selectedDay; + final prevMeal = selectedMeal; selectedDay = day; + selectedMeal = 1; final canSelect = await fetchDiaryV2(needLoading: true); if (!canSelect) { selectedDay = prevDay; + selectedMeal = prevMeal; } return canSelect; @@ -62,34 +65,40 @@ class DiaryCubit extends Cubit { Future fetchDiaryV2({bool needLoading = false, int? diaryId}) async { final currentState = state; - if (needLoading) { - emit(const DiaryState.loading()); - } - if (diaryId != null) { - final diaryDayById = await diaryRepository.getDiaryDay(diaryId); - final diaryEntity = diaryDayById.toEntity(); + try { + if (needLoading) { + emit(const DiaryState.loading()); + } + if (diaryId != null) { + final diaryDayById = await diaryRepository.getDiaryDay(diaryId); + final diaryEntity = diaryDayById.toEntity(); + if (diaryEntity != null) { + setDiary(diaryDay: diaryEntity, diaryId: diaryId); + return true; + } + } + final diaryDay = await getDiary(); + if (diaryDay == null) { + emit(const DiaryState.error(errorMessage: 'Diary not found')); + return true; + } + + final diaryEntity = diaryDay.toEntity(); if (diaryEntity != null) { setDiary(diaryDay: diaryEntity, diaryId: diaryId); return true; } + if (diaryDay.typeOfDiary.hasChosenDiet == true && diaryDay.typeOfDiary.diaryState == null) { + setDiaryForDietOnly(diaryDay.toDiaryFutureDayEntity()); + return true; + } + emit(currentState); + return false; + } catch (e, st) { + log(e.toString(), stackTrace: st); + emit(DiaryState.error(errorMessage: e.toString())); + return false; } - final diaryDay = await getDiary(); - if (diaryDay == null) { - emit(const DiaryState.error(errorMessage: 'Diary not found')); - return true; - } - - final diaryEntity = diaryDay.toEntity(); - if (diaryEntity != null) { - setDiary(diaryDay: diaryEntity, diaryId: diaryId); - return true; - } - if (diaryDay.typeOfDiary.hasChosenDiet == true && diaryDay.typeOfDiary.diaryState == null) { - setDiaryForDietOnly(diaryDay.toDiaryFutureDayEntity()); - return true; - } - emit(currentState); - return false; } Future updateCurrentDiary() async { @@ -109,11 +118,15 @@ class DiaryCubit extends Cubit { await diaryRepository.createDiaryDay(day: selectedDay.toISO8601WithTimeZoneOffset()); final diaryDay = await diaryRepository.getDiaryDayV2(day: selectedDay.toISO8601WithTimeZoneOffset()); return diaryDay; - } on DioException catch (e) { - if (e.response?.statusCode == 422) { - final diaryDay = await diaryRepository.getDiaryDayV2(day: selectedDay.toISO8601WithTimeZoneOffset()); - return diaryDay; + } catch (e, st) { + log(e.toString(), stackTrace: st); + if (e is DioException) { + if (e.response?.statusCode == 422) { + final diaryDay = await diaryRepository.getDiaryDayV2(day: selectedDay.toISO8601WithTimeZoneOffset()); + return diaryDay; + } } + rethrow; } return null; } diff --git a/lib/features/diary/repositories/diary_repository.dart b/lib/features/diary/repositories/diary_repository.dart index 6a2349b0..18081eac 100644 --- a/lib/features/diary/repositories/diary_repository.dart +++ b/lib/features/diary/repositories/diary_repository.dart @@ -21,7 +21,11 @@ class DiaryRepository { Future getDiaryByDate(String date) async { try { Set ids = {}; - final DiaryDayModel diaryDay = (await getDiaryIndexByDate(date)).last; + final diaryDays = await getDiaryIndexByDate(date); + if (diaryDays.isEmpty) { + throw Exception('No diary entry found for $date'); + } + final DiaryDayModel diaryDay = diaryDays.last; for (var meal in diaryDay.meals) { for (var portion in meal.portions) { if (portion.productNutritionalValueId != null) {