From 7535e824221bbd64ee8883d28016d4468aee2afe Mon Sep 17 00:00:00 2001 From: maxxkim Date: Fri, 19 Jul 2024 15:51:39 +0300 Subject: [PATCH] fix(diary): Remove portion API call fixed --- lib/features/diary/models/portion.dart | 2 +- .../diary/models/portion.freezed.dart | 38 ++--- lib/features/diary/models/portion.g.dart | 4 +- .../diary/presentation/bloc/diary_bloc.dart | 70 +++------ .../diary/presentation/bloc/diary_state.dart | 5 +- .../bloc/diary_state.freezed.dart | 146 +++++++++--------- .../presentation/pages/diary_screen.dart | 91 +++++++---- .../diary/repositories/diary_repository.dart | 9 +- .../diary/services/diary_service.dart | 7 +- .../diary/services/diary_service.g.dart | 40 +++-- 10 files changed, 217 insertions(+), 195 deletions(-) diff --git a/lib/features/diary/models/portion.dart b/lib/features/diary/models/portion.dart index 9712d9b3..ec4ab1de 100644 --- a/lib/features/diary/models/portion.dart +++ b/lib/features/diary/models/portion.dart @@ -7,7 +7,7 @@ part 'portion.g.dart'; class Portion with _$Portion { const factory Portion({ required int id, - required String productName, + required String product_name, required int quantity, required String portion, }) = _Portion; diff --git a/lib/features/diary/models/portion.freezed.dart b/lib/features/diary/models/portion.freezed.dart index ab792133..a7a35a29 100644 --- a/lib/features/diary/models/portion.freezed.dart +++ b/lib/features/diary/models/portion.freezed.dart @@ -21,7 +21,7 @@ Portion _$PortionFromJson(Map json) { /// @nodoc mixin _$Portion { int get id => throw _privateConstructorUsedError; - String get productName => throw _privateConstructorUsedError; + String get product_name => throw _privateConstructorUsedError; int get quantity => throw _privateConstructorUsedError; String get portion => throw _privateConstructorUsedError; @@ -35,7 +35,7 @@ abstract class $PortionCopyWith<$Res> { factory $PortionCopyWith(Portion value, $Res Function(Portion) then) = _$PortionCopyWithImpl<$Res, Portion>; @useResult - $Res call({int id, String productName, int quantity, String portion}); + $Res call({int id, String product_name, int quantity, String portion}); } /// @nodoc @@ -52,7 +52,7 @@ class _$PortionCopyWithImpl<$Res, $Val extends Portion> @override $Res call({ Object? id = null, - Object? productName = null, + Object? product_name = null, Object? quantity = null, Object? portion = null, }) { @@ -61,9 +61,9 @@ class _$PortionCopyWithImpl<$Res, $Val extends Portion> ? _value.id : id // ignore: cast_nullable_to_non_nullable as int, - productName: null == productName - ? _value.productName - : productName // ignore: cast_nullable_to_non_nullable + product_name: null == product_name + ? _value.product_name + : product_name // ignore: cast_nullable_to_non_nullable as String, quantity: null == quantity ? _value.quantity @@ -84,7 +84,7 @@ abstract class _$$PortionImplCopyWith<$Res> implements $PortionCopyWith<$Res> { __$$PortionImplCopyWithImpl<$Res>; @override @useResult - $Res call({int id, String productName, int quantity, String portion}); + $Res call({int id, String product_name, int quantity, String portion}); } /// @nodoc @@ -99,7 +99,7 @@ class __$$PortionImplCopyWithImpl<$Res> @override $Res call({ Object? id = null, - Object? productName = null, + Object? product_name = null, Object? quantity = null, Object? portion = null, }) { @@ -108,9 +108,9 @@ class __$$PortionImplCopyWithImpl<$Res> ? _value.id : id // ignore: cast_nullable_to_non_nullable as int, - productName: null == productName - ? _value.productName - : productName // ignore: cast_nullable_to_non_nullable + product_name: null == product_name + ? _value.product_name + : product_name // ignore: cast_nullable_to_non_nullable as String, quantity: null == quantity ? _value.quantity @@ -129,7 +129,7 @@ class __$$PortionImplCopyWithImpl<$Res> class _$PortionImpl implements _Portion { const _$PortionImpl( {required this.id, - required this.productName, + required this.product_name, required this.quantity, required this.portion}); @@ -139,7 +139,7 @@ class _$PortionImpl implements _Portion { @override final int id; @override - final String productName; + final String product_name; @override final int quantity; @override @@ -147,7 +147,7 @@ class _$PortionImpl implements _Portion { @override String toString() { - return 'Portion(id: $id, productName: $productName, quantity: $quantity, portion: $portion)'; + return 'Portion(id: $id, product_name: $product_name, quantity: $quantity, portion: $portion)'; } @override @@ -156,8 +156,8 @@ class _$PortionImpl implements _Portion { (other.runtimeType == runtimeType && other is _$PortionImpl && (identical(other.id, id) || other.id == id) && - (identical(other.productName, productName) || - other.productName == productName) && + (identical(other.product_name, product_name) || + other.product_name == product_name) && (identical(other.quantity, quantity) || other.quantity == quantity) && (identical(other.portion, portion) || other.portion == portion)); @@ -166,7 +166,7 @@ class _$PortionImpl implements _Portion { @JsonKey(ignore: true) @override int get hashCode => - Object.hash(runtimeType, id, productName, quantity, portion); + Object.hash(runtimeType, id, product_name, quantity, portion); @JsonKey(ignore: true) @override @@ -185,7 +185,7 @@ class _$PortionImpl implements _Portion { abstract class _Portion implements Portion { const factory _Portion( {required final int id, - required final String productName, + required final String product_name, required final int quantity, required final String portion}) = _$PortionImpl; @@ -194,7 +194,7 @@ abstract class _Portion implements Portion { @override int get id; @override - String get productName; + String get product_name; @override int get quantity; @override diff --git a/lib/features/diary/models/portion.g.dart b/lib/features/diary/models/portion.g.dart index aae21620..c8bd109f 100644 --- a/lib/features/diary/models/portion.g.dart +++ b/lib/features/diary/models/portion.g.dart @@ -9,7 +9,7 @@ part of 'portion.dart'; _$PortionImpl _$$PortionImplFromJson(Map json) => _$PortionImpl( id: (json['id'] as num).toInt(), - productName: json['productName'] as String, + product_name: json['product_name'] as String, quantity: (json['quantity'] as num).toInt(), portion: json['portion'] as String, ); @@ -17,7 +17,7 @@ _$PortionImpl _$$PortionImplFromJson(Map json) => Map _$$PortionImplToJson(_$PortionImpl instance) => { 'id': instance.id, - 'productName': instance.productName, + 'product_name': instance.product_name, 'quantity': instance.quantity, 'portion': instance.portion, }; diff --git a/lib/features/diary/presentation/bloc/diary_bloc.dart b/lib/features/diary/presentation/bloc/diary_bloc.dart index faaac8af..37abfdca 100644 --- a/lib/features/diary/presentation/bloc/diary_bloc.dart +++ b/lib/features/diary/presentation/bloc/diary_bloc.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:eatvio_app/features/diary/models/diary_model.dart'; import 'package:eatvio_app/features/diary/models/meal.dart'; +import 'package:eatvio_app/features/diary/models/portion.dart'; import 'package:eatvio_app/features/diary/models/product.dart'; import 'package:eatvio_app/features/diary/repositories/diary_repository.dart'; import 'package:intl/intl.dart'; @@ -82,7 +83,7 @@ class DiaryBloc extends Bloc { selectedMood: currentMeal.mood, selectedSatiety: currentMeal.satiety, commentController: TextEditingController(), - productNameController: TextEditingController(), + product_nameController: TextEditingController(), productQuantityController: TextEditingController(), caloriesController: TextEditingController(), fatsController: TextEditingController(), @@ -259,15 +260,14 @@ class DiaryBloc extends Bloc { Emitter emit, ) async { if (state is DiaryStateLoaded) { - //var currentState = state as DiaryStateLoaded; + var currentState = state as DiaryStateLoaded; - print(await diaryRepository.inputProduct(event.input)); final Map> productNutritionalValues = await diaryRepository.inputProduct(event.input); - // Create a new controller with the input text and update the autocomplete list - /*var updatedState = currentState.copyWith( - productNameController: TextEditingController(text: event.input), - autocompleteList: productNutritionalValues.map((product) => product['name']).toList(), + var updatedState = currentState.copyWith( + product_nameController: TextEditingController(text: event.input), + autocompleteList: + productNutritionalValues['product_nutritional_value'] ?? [], ); if (event.input.length > 3) { updatedState = updatedState.copyWith(moderationExpanded: true); @@ -275,7 +275,7 @@ class DiaryBloc extends Bloc { updatedState = updatedState.copyWith(moderationExpanded: false); } - emit(updatedState); */ + emit(updatedState); } } @@ -331,16 +331,25 @@ class DiaryBloc extends Bloc { ) async { if (state is DiaryStateLoaded) { var currentState = state as DiaryStateLoaded; + print(currentState.diary.id); + print(currentState.currentMeal.id); + print(currentState.product_nameController.text); + print(currentState.portionController.title); + print(currentState.productQuantityController.text); - await diaryRepository.addPortion( + Map data = await diaryRepository.addPortion( currentState.diary.id, currentState.currentMeal.id, - currentState.productNameController.text, - currentState.portionController.value, + currentState.product_nameController.text, + currentState.portionController.title, int.parse(currentState.productQuantityController.text), ); + List newPortions = currentState.portions; - emit(currentState.copyWith(isAdded: true)); + final Portion newPortion = data['portion'] ?? + new Portion(id: 1, portion: 'gr', product_name: '1', quantity: 1); + newPortions.add(newPortion); + emit(currentState.copyWith(isAdded: true, portions: newPortions)); } } @@ -350,45 +359,14 @@ class DiaryBloc extends Bloc { ) async { if (state is DiaryStateLoaded) { var currentState = state as DiaryStateLoaded; - - int? mealId = - currentState.currentMeal.id; // Rename id to mealId for clarity - - var response = await sendRemovePortion( - event.portionId, - mealId, + await diaryRepository.removePortion( currentState.diary.id, + currentState.currentMeal.id, + event.portionId, ); - - if (response.statusCode == 204) { - await reloadScreen(event, emit); - } else { - print( - 'Failed to add portion. Status Code: ${response.statusCode} ${response.body}', - ); - } } } - Future sendRemovePortion( - int? portionID, - int? mealID, - int diaryID, - ) async { - String url = - '${dotenv.env['SERVER_ROOT']!}/diary/$diaryID/meal/$mealID/portions/$portionID/delete'; - - var response = await http.delete( - Uri.parse(url), - headers: { - 'Content-Type': 'application/json', - }, - encoding: utf8, - ); - - return response; - } - FutureOr _removeImage( RemoveImageEvent event, Emitter emit, diff --git a/lib/features/diary/presentation/bloc/diary_state.dart b/lib/features/diary/presentation/bloc/diary_state.dart index fa490162..57b3768a 100644 --- a/lib/features/diary/presentation/bloc/diary_state.dart +++ b/lib/features/diary/presentation/bloc/diary_state.dart @@ -2,6 +2,7 @@ import 'package:eatvio_app/features/diary/models/diary_model.dart'; import 'package:eatvio_app/features/diary/models/meal.dart'; import 'package:eatvio_app/features/diary/models/photo.dart'; import 'package:eatvio_app/features/diary/models/portion.dart'; +import 'package:eatvio_app/features/diary/models/product.dart'; import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; @@ -18,20 +19,20 @@ abstract class DiaryState with _$DiaryState { const factory DiaryState.loaded({ required DiaryModel diary, String? diaryDate, - required List autocompleteList, required List recommendedChartValues, required List consumedChartValues, required List portions, required List photos, required List mealList, required List portionList, + required List autocompleteList, required Meal currentMeal, required SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, required TextEditingController commentController, - required TextEditingController productNameController, + required TextEditingController product_nameController, required TextEditingController productQuantityController, required TextEditingController caloriesController, required TextEditingController fatsController, diff --git a/lib/features/diary/presentation/bloc/diary_state.freezed.dart b/lib/features/diary/presentation/bloc/diary_state.freezed.dart index 2ecc30d9..981a027d 100644 --- a/lib/features/diary/presentation/bloc/diary_state.freezed.dart +++ b/lib/features/diary/presentation/bloc/diary_state.freezed.dart @@ -23,20 +23,20 @@ mixin _$DiaryState { required TResult Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -60,20 +60,20 @@ mixin _$DiaryState { TResult? Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -97,20 +97,20 @@ mixin _$DiaryState { TResult Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -216,20 +216,20 @@ class _$DiaryStateImpl implements _DiaryState { required TResult Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -256,20 +256,20 @@ class _$DiaryStateImpl implements _DiaryState { TResult? Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -296,20 +296,20 @@ class _$DiaryStateImpl implements _DiaryState { TResult Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -417,20 +417,20 @@ class _$DiaryStateLoadingImpl implements DiaryStateLoading { required TResult Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -457,20 +457,20 @@ class _$DiaryStateLoadingImpl implements DiaryStateLoading { TResult? Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -497,20 +497,20 @@ class _$DiaryStateLoadingImpl implements DiaryStateLoading { TResult Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -584,20 +584,20 @@ abstract class _$$DiaryStateLoadedImplCopyWith<$Res> { $Res call( {DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -628,20 +628,20 @@ class __$$DiaryStateLoadedImplCopyWithImpl<$Res> $Res call({ Object? diary = null, Object? diaryDate = freezed, - Object? autocompleteList = null, Object? recommendedChartValues = null, Object? consumedChartValues = null, Object? portions = null, Object? photos = null, Object? mealList = null, Object? portionList = null, + Object? autocompleteList = null, Object? currentMeal = null, Object? portionController = null, Object? wakeupController = freezed, Object? retireController = freezed, Object? mealTimeController = freezed, Object? commentController = null, - Object? productNameController = null, + Object? product_nameController = null, Object? productQuantityController = null, Object? caloriesController = null, Object? fatsController = null, @@ -664,10 +664,6 @@ class __$$DiaryStateLoadedImplCopyWithImpl<$Res> ? _value.diaryDate : diaryDate // ignore: cast_nullable_to_non_nullable as String?, - autocompleteList: null == autocompleteList - ? _value._autocompleteList - : autocompleteList // ignore: cast_nullable_to_non_nullable - as List, recommendedChartValues: null == recommendedChartValues ? _value._recommendedChartValues : recommendedChartValues // ignore: cast_nullable_to_non_nullable @@ -692,6 +688,10 @@ class __$$DiaryStateLoadedImplCopyWithImpl<$Res> ? _value._portionList : portionList // ignore: cast_nullable_to_non_nullable as List, + autocompleteList: null == autocompleteList + ? _value._autocompleteList + : autocompleteList // ignore: cast_nullable_to_non_nullable + as List, currentMeal: null == currentMeal ? _value.currentMeal : currentMeal // ignore: cast_nullable_to_non_nullable @@ -716,9 +716,9 @@ class __$$DiaryStateLoadedImplCopyWithImpl<$Res> ? _value.commentController : commentController // ignore: cast_nullable_to_non_nullable as TextEditingController, - productNameController: null == productNameController - ? _value.productNameController - : productNameController // ignore: cast_nullable_to_non_nullable + product_nameController: null == product_nameController + ? _value.product_nameController + : product_nameController // ignore: cast_nullable_to_non_nullable as TextEditingController, productQuantityController: null == productQuantityController ? _value.productQuantityController @@ -794,20 +794,20 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { const _$DiaryStateLoadedImpl( {required this.diary, this.diaryDate, - required final List autocompleteList, required final List recommendedChartValues, required final List consumedChartValues, required final List portions, required final List photos, required final List mealList, required final List portionList, + required final List autocompleteList, required this.currentMeal, required this.portionController, this.wakeupController, this.retireController, this.mealTimeController, required this.commentController, - required this.productNameController, + required this.product_nameController, required this.productQuantityController, required this.caloriesController, required this.fatsController, @@ -820,27 +820,18 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { required this.moodExpanded, required this.isLoading, required this.isAdded}) - : _autocompleteList = autocompleteList, - _recommendedChartValues = recommendedChartValues, + : _recommendedChartValues = recommendedChartValues, _consumedChartValues = consumedChartValues, _portions = portions, _photos = photos, _mealList = mealList, - _portionList = portionList; + _portionList = portionList, + _autocompleteList = autocompleteList; @override final DiaryModel diary; @override final String? diaryDate; - final List _autocompleteList; - @override - List get autocompleteList { - if (_autocompleteList is EqualUnmodifiableListView) - return _autocompleteList; - // ignore: implicit_dynamic_type - return EqualUnmodifiableListView(_autocompleteList); - } - final List _recommendedChartValues; @override List get recommendedChartValues { @@ -891,6 +882,15 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { return EqualUnmodifiableListView(_portionList); } + final List _autocompleteList; + @override + List get autocompleteList { + if (_autocompleteList is EqualUnmodifiableListView) + return _autocompleteList; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_autocompleteList); + } + @override final Meal currentMeal; @override @@ -904,7 +904,7 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { @override final TextEditingController commentController; @override - final TextEditingController productNameController; + final TextEditingController product_nameController; @override final TextEditingController productQuantityController; @override @@ -932,7 +932,7 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { @override String toString() { - return 'DiaryState.loaded(diary: $diary, diaryDate: $diaryDate, autocompleteList: $autocompleteList, recommendedChartValues: $recommendedChartValues, consumedChartValues: $consumedChartValues, portions: $portions, photos: $photos, mealList: $mealList, portionList: $portionList, currentMeal: $currentMeal, portionController: $portionController, wakeupController: $wakeupController, retireController: $retireController, mealTimeController: $mealTimeController, commentController: $commentController, productNameController: $productNameController, productQuantityController: $productQuantityController, caloriesController: $caloriesController, fatsController: $fatsController, proteinsController: $proteinsController, carbsController: $carbsController, selectedMood: $selectedMood, selectedSatiety: $selectedSatiety, wakeupExpanded: $wakeupExpanded, moderationExpanded: $moderationExpanded, moodExpanded: $moodExpanded, isLoading: $isLoading, isAdded: $isAdded)'; + return 'DiaryState.loaded(diary: $diary, diaryDate: $diaryDate, recommendedChartValues: $recommendedChartValues, consumedChartValues: $consumedChartValues, portions: $portions, photos: $photos, mealList: $mealList, portionList: $portionList, autocompleteList: $autocompleteList, currentMeal: $currentMeal, portionController: $portionController, wakeupController: $wakeupController, retireController: $retireController, mealTimeController: $mealTimeController, commentController: $commentController, product_nameController: $product_nameController, productQuantityController: $productQuantityController, caloriesController: $caloriesController, fatsController: $fatsController, proteinsController: $proteinsController, carbsController: $carbsController, selectedMood: $selectedMood, selectedSatiety: $selectedSatiety, wakeupExpanded: $wakeupExpanded, moderationExpanded: $moderationExpanded, moodExpanded: $moodExpanded, isLoading: $isLoading, isAdded: $isAdded)'; } @override @@ -943,8 +943,6 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { (identical(other.diary, diary) || other.diary == diary) && (identical(other.diaryDate, diaryDate) || other.diaryDate == diaryDate) && - const DeepCollectionEquality() - .equals(other._autocompleteList, _autocompleteList) && const DeepCollectionEquality().equals( other._recommendedChartValues, _recommendedChartValues) && const DeepCollectionEquality() @@ -954,6 +952,8 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { const DeepCollectionEquality().equals(other._mealList, _mealList) && const DeepCollectionEquality() .equals(other._portionList, _portionList) && + const DeepCollectionEquality() + .equals(other._autocompleteList, _autocompleteList) && (identical(other.currentMeal, currentMeal) || other.currentMeal == currentMeal) && (identical(other.portionController, portionController) || @@ -966,8 +966,8 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { other.mealTimeController == mealTimeController) && (identical(other.commentController, commentController) || other.commentController == commentController) && - (identical(other.productNameController, productNameController) || - other.productNameController == productNameController) && + (identical(other.product_nameController, product_nameController) || + other.product_nameController == product_nameController) && (identical(other.productQuantityController, productQuantityController) || other.productQuantityController == productQuantityController) && @@ -999,20 +999,20 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { runtimeType, diary, diaryDate, - const DeepCollectionEquality().hash(_autocompleteList), const DeepCollectionEquality().hash(_recommendedChartValues), const DeepCollectionEquality().hash(_consumedChartValues), const DeepCollectionEquality().hash(_portions), const DeepCollectionEquality().hash(_photos), const DeepCollectionEquality().hash(_mealList), const DeepCollectionEquality().hash(_portionList), + const DeepCollectionEquality().hash(_autocompleteList), currentMeal, portionController, wakeupController, retireController, mealTimeController, commentController, - productNameController, + product_nameController, productQuantityController, caloriesController, fatsController, @@ -1042,20 +1042,20 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { required TResult Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -1074,20 +1074,20 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { return loaded( diary, diaryDate, - autocompleteList, recommendedChartValues, consumedChartValues, portions, photos, mealList, portionList, + autocompleteList, currentMeal, portionController, wakeupController, retireController, mealTimeController, commentController, - productNameController, + product_nameController, productQuantityController, caloriesController, fatsController, @@ -1110,20 +1110,20 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { TResult? Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -1142,20 +1142,20 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { return loaded?.call( diary, diaryDate, - autocompleteList, recommendedChartValues, consumedChartValues, portions, photos, mealList, portionList, + autocompleteList, currentMeal, portionController, wakeupController, retireController, mealTimeController, commentController, - productNameController, + product_nameController, productQuantityController, caloriesController, fatsController, @@ -1178,20 +1178,20 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { TResult Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -1212,20 +1212,20 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded { return loaded( diary, diaryDate, - autocompleteList, recommendedChartValues, consumedChartValues, portions, photos, mealList, portionList, + autocompleteList, currentMeal, portionController, wakeupController, retireController, mealTimeController, commentController, - productNameController, + product_nameController, productQuantityController, caloriesController, fatsController, @@ -1284,20 +1284,20 @@ abstract class DiaryStateLoaded implements DiaryState { const factory DiaryStateLoaded( {required final DiaryModel diary, final String? diaryDate, - required final List autocompleteList, required final List recommendedChartValues, required final List consumedChartValues, required final List portions, required final List photos, required final List mealList, required final List portionList, + required final List autocompleteList, required final Meal currentMeal, required final SelectionPopupModel portionController, final TimeOfDay? wakeupController, final TimeOfDay? retireController, final TimeOfDay? mealTimeController, required final TextEditingController commentController, - required final TextEditingController productNameController, + required final TextEditingController product_nameController, required final TextEditingController productQuantityController, required final TextEditingController caloriesController, required final TextEditingController fatsController, @@ -1313,20 +1313,20 @@ abstract class DiaryStateLoaded implements DiaryState { DiaryModel get diary; String? get diaryDate; - List get autocompleteList; List get recommendedChartValues; List get consumedChartValues; List get portions; List get photos; List get mealList; List get portionList; + List get autocompleteList; Meal get currentMeal; SelectionPopupModel get portionController; TimeOfDay? get wakeupController; TimeOfDay? get retireController; TimeOfDay? get mealTimeController; TextEditingController get commentController; - TextEditingController get productNameController; + TextEditingController get product_nameController; TextEditingController get productQuantityController; TextEditingController get caloriesController; TextEditingController get fatsController; @@ -1415,20 +1415,20 @@ class _$DiaryStateErrorImpl implements DiaryStateError { required TResult Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -1455,20 +1455,20 @@ class _$DiaryStateErrorImpl implements DiaryStateError { TResult? Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, @@ -1495,20 +1495,20 @@ class _$DiaryStateErrorImpl implements DiaryStateError { TResult Function( DiaryModel diary, String? diaryDate, - List autocompleteList, List recommendedChartValues, List consumedChartValues, List portions, List photos, List mealList, List portionList, + List autocompleteList, Meal currentMeal, SelectionPopupModel portionController, TimeOfDay? wakeupController, TimeOfDay? retireController, TimeOfDay? mealTimeController, TextEditingController commentController, - TextEditingController productNameController, + TextEditingController product_nameController, TextEditingController productQuantityController, TextEditingController caloriesController, TextEditingController fatsController, diff --git a/lib/features/diary/presentation/pages/diary_screen.dart b/lib/features/diary/presentation/pages/diary_screen.dart index 422d8bc7..5603abb3 100644 --- a/lib/features/diary/presentation/pages/diary_screen.dart +++ b/lib/features/diary/presentation/pages/diary_screen.dart @@ -4,6 +4,7 @@ import 'package:eatvio_app/features/diary/models/diary_model.dart'; import 'package:eatvio_app/features/diary/models/meal.dart'; import 'package:eatvio_app/features/diary/models/photo.dart'; import 'package:eatvio_app/features/diary/models/portion.dart'; +import 'package:eatvio_app/features/diary/models/product.dart'; import 'package:eatvio_app/features/diary/presentation/bloc/diary_bloc.dart'; import 'package:eatvio_app/features/diary/presentation/bloc/diary_state.dart'; import 'package:flutter/cupertino.dart'; @@ -247,7 +248,9 @@ class DiaryScreen extends StatelessWidget { borderRadius: BorderRadiusStyle.roundedBorder5, ), child: Center( - child: CircularProgressIndicator(color: appTheme.blueGray300), // Замените на свой прелоадер при необходимости + child: CircularProgressIndicator( + color: appTheme + .blueGray300), // Замените на свой прелоадер при необходимости ), ), ], @@ -271,7 +274,8 @@ class DiaryScreen extends StatelessWidget { _buildMeal(BuildContext context, DiaryStateLoaded state) { final digitsOnly = FilteringTextInputFormatter.digitsOnly; - List _options = state.autocompleteList.map((dynamic item) => item as String).toList(); + List _options = + state.autocompleteList.map((Product item) => item.name).toList(); FocusNode focusNodeName = FocusNode(); return Container( margin: EdgeInsets.symmetric(horizontal: 16.h), @@ -315,7 +319,9 @@ class DiaryScreen extends StatelessWidget { onTap: () => _selectMealTime(context, state), child: AbsorbPointer( child: CustomTextFormField( - hintText: state.mealTimeController?.format(context).toString(), + hintText: state.mealTimeController + ?.format(context) + .toString(), autofocus: false, ), ), @@ -451,7 +457,9 @@ class DiaryScreen extends StatelessWidget { SizedBox(height: 30.v), _buildAddProduct(context, state), SizedBox(height: 30.v), - ...state.portions.map((portion) => _buildProduct(context, portion)).toList(), + ...state.portions + .map((portion) => _buildProduct(context, portion)) + .toList(), SizedBox(height: 30.v), /*...state.photos != null ? state.photos!.isEmpty @@ -531,7 +539,7 @@ class DiaryScreen extends StatelessWidget { children: [ CustomTextFormField( hintText: "Название", - controller: state.productNameController, + controller: state.product_nameController, ), SizedBox(height: 10.v), CustomTextFormField( @@ -567,7 +575,7 @@ class DiaryScreen extends StatelessWidget { TextButton( onPressed: triggerModeration( context, - state.productNameController.text, + state.product_nameController.text, state.caloriesController.text, state.proteinsController.text, state.fatsController.text, @@ -608,7 +616,8 @@ class DiaryScreen extends StatelessWidget { popDialog(BuildContext dialogContext) { return () { - Navigator.of(dialogContext).pop(); // Dismiss the dialog on Cancel button press + Navigator.of(dialogContext) + .pop(); // Dismiss the dialog on Cancel button press }; } @@ -618,8 +627,9 @@ class DiaryScreen extends StatelessWidget { }; } - selectProduct(AutocompleteOnSelected onSelected, String option, DiaryStateLoaded state) { - state.productNameController.text = option; + selectProduct(AutocompleteOnSelected onSelected, String option, + DiaryStateLoaded state) { + state.product_nameController.text = option; return () { onSelected(option); }; @@ -660,7 +670,8 @@ class DiaryScreen extends StatelessWidget { return CarouselSlider( options: CarouselOptions(height: 340.0), items: state.currentMeal.photos.map((photo) { - return _buildPhoto(context, photo); // Assuming photos are stored as strings + return _buildPhoto( + context, photo); // Assuming photos are stored as strings }).toList(), ); } @@ -686,7 +697,9 @@ class DiaryScreen extends StatelessWidget { top: 5.v, ), child: Text( - portion.productName.length > 8 ? portion.productName.substring(0, 8) : portion.productName, + portion.product_name.length > 8 + ? portion.product_name.substring(0, 8) + : portion.product_name, style: CustomTextStyles.titleMedium16, ), ), @@ -758,12 +771,15 @@ class DiaryScreen extends StatelessWidget { removePhoto(BuildContext context, Photo photo) { return () { - context.read().add(RemoveImageEvent(photo.id.toString(), photo.path)); + context + .read() + .add(RemoveImageEvent(photo.id.toString(), photo.path)); }; } _buildNutritionChart(BuildContext context, DiaryStateLoaded state) { - final List recommendedValues = state.recommendedChartValues; // Рекомендуемые значения: калории, жиры, белки, углеводы + final List recommendedValues = state + .recommendedChartValues; // Рекомендуемые значения: калории, жиры, белки, углеводы final List consumedValues = state.consumedChartValues; // return Container( margin: EdgeInsets.symmetric(horizontal: 16.h), @@ -827,7 +843,10 @@ class DiaryScreen extends StatelessWidget { barRods: [ BarChartRodData( toY: consumedValues[0] / recommendedValues[0] * 100, - color: checkConsumedValues([recommendedValues[0]], [consumedValues[1]]) ? Colors.red : Colors.blue, + color: checkConsumedValues( + [recommendedValues[0]], [consumedValues[1]]) + ? Colors.red + : Colors.blue, ), ], ), @@ -836,7 +855,10 @@ class DiaryScreen extends StatelessWidget { barRods: [ BarChartRodData( toY: consumedValues[1] / recommendedValues[1] * 100, - color: checkConsumedValues([recommendedValues[1]], [consumedValues[1]]) ? Colors.red : Colors.blue, + color: checkConsumedValues( + [recommendedValues[1]], [consumedValues[1]]) + ? Colors.red + : Colors.blue, ), ], ), @@ -845,7 +867,10 @@ class DiaryScreen extends StatelessWidget { barRods: [ BarChartRodData( toY: consumedValues[2] / recommendedValues[2] * 100, - color: checkConsumedValues([recommendedValues[2]], [consumedValues[2]]) ? Colors.red : Colors.blue, + color: checkConsumedValues( + [recommendedValues[2]], [consumedValues[2]]) + ? Colors.red + : Colors.blue, ), ], ), @@ -854,7 +879,10 @@ class DiaryScreen extends StatelessWidget { barRods: [ BarChartRodData( toY: consumedValues[3] / recommendedValues[3] * 100, - color: checkConsumedValues([recommendedValues[3]], [consumedValues[3]]) ? Colors.red : Colors.blue, + color: checkConsumedValues( + [recommendedValues[3]], [consumedValues[3]]) + ? Colors.red + : Colors.blue, ), ], ), @@ -1045,7 +1073,9 @@ class DiaryScreen extends StatelessWidget { r"Подъем \ отход ко сну", style: CustomTextStyles.bodyMediumBlack900, ), - Icon(state.wakeupExpanded ? Icons.arrow_drop_up : Icons.arrow_drop_down), + Icon(state.wakeupExpanded + ? Icons.arrow_drop_up + : Icons.arrow_drop_down), ], ), ), @@ -1059,7 +1089,8 @@ class DiaryScreen extends StatelessWidget { onTap: () => _selectWakeupTime(context, state), child: AbsorbPointer( child: CustomTextFormField( - hintText: state.wakeupController?.format(context).toString(), + hintText: + state.wakeupController?.format(context).toString(), prefix: Icon(Icons.sunny), autofocus: false, ), @@ -1070,7 +1101,8 @@ class DiaryScreen extends StatelessWidget { onTap: () => _selectRetireTime(context, state), child: AbsorbPointer( child: CustomTextFormField( - hintText: state.retireController?.format(context).toString(), + hintText: + state.retireController?.format(context).toString(), prefix: Icon(Icons.bed), autofocus: false, ), @@ -1117,7 +1149,8 @@ class DiaryScreen extends StatelessWidget { }; } - Function() sendFinishDayData(BuildContext dialogContext, BuildContext context) { + Function() sendFinishDayData( + BuildContext dialogContext, BuildContext context) { return () { closeDialog(dialogContext); context.read().add(FinishDay()); @@ -1160,7 +1193,9 @@ class DiaryScreen extends StatelessWidget { "Ваше настроение после приема пищи", style: CustomTextStyles.bodyMediumBlack900, ), - Icon(state.moodExpanded ? Icons.arrow_drop_up : Icons.arrow_drop_down), + Icon(state.moodExpanded + ? Icons.arrow_drop_up + : Icons.arrow_drop_down), ], ), ), @@ -1220,7 +1255,8 @@ class DiaryScreen extends StatelessWidget { }; } - Future _selectWakeupTime(BuildContext context, DiaryStateLoaded state) async { + Future _selectWakeupTime( + BuildContext context, DiaryStateLoaded state) async { final TimeOfDay? pickedTime = await showTimePicker( context: context, initialTime: state.wakeupController ?? TimeOfDay.now(), @@ -1230,7 +1266,8 @@ class DiaryScreen extends StatelessWidget { } } - Future _selectRetireTime(BuildContext context, DiaryStateLoaded state) async { + Future _selectRetireTime( + BuildContext context, DiaryStateLoaded state) async { final TimeOfDay? pickedTime = await showTimePicker( context: context, initialTime: state.retireController ?? TimeOfDay.now(), @@ -1240,7 +1277,8 @@ class DiaryScreen extends StatelessWidget { } } - Future _selectMealTime(BuildContext context, DiaryStateLoaded state) async { + Future _selectMealTime( + BuildContext context, DiaryStateLoaded state) async { final TimeOfDay? pickedTime = await showTimePicker( context: context, initialTime: state.mealTimeController ?? TimeOfDay.now(), @@ -1251,7 +1289,8 @@ class DiaryScreen extends StatelessWidget { } } -bool checkConsumedValues(List recommendedValues, List consumedValues) { +bool checkConsumedValues( + List recommendedValues, List consumedValues) { for (int i = 0; i < recommendedValues.length; i++) { if (consumedValues[i] > recommendedValues[i]) { // Если хотя бы одно потребленное значение превышает рекомендованное diff --git a/lib/features/diary/repositories/diary_repository.dart b/lib/features/diary/repositories/diary_repository.dart index 12268fb7..4bc13ae0 100644 --- a/lib/features/diary/repositories/diary_repository.dart +++ b/lib/features/diary/repositories/diary_repository.dart @@ -1,4 +1,5 @@ import 'package:eatvio_app/features/diary/models/diary_model.dart'; +import 'package:eatvio_app/features/diary/models/portion.dart'; import 'package:eatvio_app/features/diary/models/product.dart'; import 'package:eatvio_app/features/diary/services/diary_service.dart'; @@ -83,7 +84,7 @@ class DiaryRepository { } } - Future addPortion( + Future> addPortion( int diaryID, int mealID, String name, @@ -91,7 +92,8 @@ class DiaryRepository { int quantity, ) async { try { - await diaryService.sendPortionData( + print(name); + return await diaryService.sendPortionData( diaryID, mealID, name, @@ -109,6 +111,9 @@ class DiaryRepository { int portionID, ) async { try { + print(diaryID); + print(mealID); + print(portionID); await diaryService.sendRemovePortionData( diaryID, mealID, diff --git a/lib/features/diary/services/diary_service.dart b/lib/features/diary/services/diary_service.dart index 3ec5a5be..f358d7c7 100644 --- a/lib/features/diary/services/diary_service.dart +++ b/lib/features/diary/services/diary_service.dart @@ -1,5 +1,6 @@ import 'package:dio/dio.dart'; import 'package:eatvio_app/features/diary/models/diary_model.dart'; +import 'package:eatvio_app/features/diary/models/portion.dart'; import 'package:eatvio_app/features/diary/models/product.dart'; import 'package:retrofit/retrofit.dart'; @@ -49,7 +50,7 @@ abstract class DiaryService { ); @POST('/diary/{diary_id}/meal/{meal_id}/portions/create') - Future> sendPortionData( + Future> sendPortionData( @Path() int diary_id, @Path() int meal_id, @Query('product_name') String product_name, @@ -57,8 +58,8 @@ abstract class DiaryService { @Query('quantity') int quantity, ); - @POST('/diary/{diary_id}/meal/{meal_id}/portions/{portion_id}/delete') - Future> sendRemovePortionData( + @DELETE('/diary/{diary_id}/meal/{meal_id}/portions/{portion_id}/delete') + Future sendRemovePortionData( @Path() int diary_id, @Path() int meal_id, @Path() int portion_id, diff --git a/lib/features/diary/services/diary_service.g.dart b/lib/features/diary/services/diary_service.g.dart index 80461b5e..50d97322 100644 --- a/lib/features/diary/services/diary_service.g.dart +++ b/lib/features/diary/services/diary_service.g.dart @@ -254,7 +254,7 @@ class _DiaryService implements DiaryService { } @override - Future> sendPortionData( + Future> sendPortionData( int diary_id, int meal_id, String product_name, @@ -269,8 +269,8 @@ class _DiaryService implements DiaryService { }; final _headers = {}; const Map? _data = null; - final _result = await _dio - .fetch>(_setStreamType>(Options( + final _result = await _dio.fetch>( + _setStreamType>(Options( method: 'POST', headers: _headers, extra: _extra, @@ -286,12 +286,13 @@ class _DiaryService implements DiaryService { _dio.options.baseUrl, baseUrl, )))); - final _value = _result.data!.cast(); + var _value = _result.data!.map((k, dynamic v) => + MapEntry(k, Portion.fromJson(v as Map))); return _value; } @override - Future> sendRemovePortionData( + Future sendRemovePortionData( int diary_id, int meal_id, int portion_id, @@ -300,25 +301,22 @@ class _DiaryService implements DiaryService { final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _result = await _dio - .fetch>(_setStreamType>(Options( - method: 'POST', + await _dio.fetch(_setStreamType(Options( + method: 'DELETE', headers: _headers, extra: _extra, ) - .compose( - _dio.options, - '/diary/${diary_id}/meal/${meal_id}/portions/${portion_id}/delete', - queryParameters: queryParameters, - data: _data, - ) - .copyWith( - baseUrl: _combineBaseUrls( - _dio.options.baseUrl, - baseUrl, - )))); - final _value = _result.data!.cast(); - return _value; + .compose( + _dio.options, + '/diary/${diary_id}/meal/${meal_id}/portions/${portion_id}/delete', + queryParameters: queryParameters, + data: _data, + ) + .copyWith( + baseUrl: _combineBaseUrls( + _dio.options.baseUrl, + baseUrl, + )))); } RequestOptions _setStreamType(RequestOptions requestOptions) {