From 01b2ee7b1094647c4d3e0dd217a4f13d23c46369 Mon Sep 17 00:00:00 2001 From: maxxkim Date: Fri, 16 Aug 2024 17:10:08 +0300 Subject: [PATCH] fix(diary): Fix --- .../diary/presentation/bloc/diary_bloc.dart | 22 ++++++++++++++++- .../diary/presentation/bloc/diary_event.dart | 8 +++++++ .../presentation/pages/diary_screen.dart | 24 +++++-------------- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/lib/features/diary/presentation/bloc/diary_bloc.dart b/lib/features/diary/presentation/bloc/diary_bloc.dart index f71c51a0..ad146936 100644 --- a/lib/features/diary/presentation/bloc/diary_bloc.dart +++ b/lib/features/diary/presentation/bloc/diary_bloc.dart @@ -42,6 +42,7 @@ class DiaryBloc extends Bloc { on(_finishDay); on(_sendModeration); on(_clearInput); + on(_confirmPortion); } loadDiary( @@ -329,7 +330,6 @@ class DiaryBloc extends Bloc { ) async { if (state is DiaryStateLoaded) { var currentState = state as DiaryStateLoaded; - await diaryRepository.addPortion( currentState.diary.id, currentState.currentMeal.id, @@ -484,6 +484,26 @@ class DiaryBloc extends Bloc { SelectionPopupModel(id: 1, title: "грамм"), ]; } + + FutureOr _confirmPortion(ConfirmPortion event, Emitter emit) { + if (state is DiaryStateLoaded) { + var currentState = state as DiaryStateLoaded; + + final updatedPortions = currentState.portions.map((portion) { + if (portion.id == event.id) { + return portion.copyWith(from_diet: !portion.from_diet); + } + if (!portion.from_diet) add(RemovePortionEvent(portion.id)); + return portion; + }).toList(); + + final updatedState = currentState.copyWith(portions: updatedPortions); + + emit(updatedState); + + add(LoadDiary()); + } + } } int convertToInt(dynamic value) { diff --git a/lib/features/diary/presentation/bloc/diary_event.dart b/lib/features/diary/presentation/bloc/diary_event.dart index 3c190626..cfc1bedf 100644 --- a/lib/features/diary/presentation/bloc/diary_event.dart +++ b/lib/features/diary/presentation/bloc/diary_event.dart @@ -180,6 +180,14 @@ class RefreshEvent extends DiaryEvent { List get props => []; } +class ConfirmPortion extends DiaryEvent { + ConfirmPortion(this.id); + int id; + + @override + List get props => [id]; +} + class SendModeration extends DiaryEvent { SendModeration({ required this.name, diff --git a/lib/features/diary/presentation/pages/diary_screen.dart b/lib/features/diary/presentation/pages/diary_screen.dart index 5970ed2a..b3ac700c 100644 --- a/lib/features/diary/presentation/pages/diary_screen.dart +++ b/lib/features/diary/presentation/pages/diary_screen.dart @@ -271,7 +271,7 @@ class DiaryScreen extends StatelessWidget { borderRadius: BorderRadius.circular(16), ), backgroundColor: appTheme.blueA400, - onPressed: () => addProduct, + onPressed: () => addProduct(context), label: Text( 'Добавить продукт', style: theme.textTheme.titleSmall, @@ -281,9 +281,7 @@ class DiaryScreen extends StatelessWidget { } addProduct(BuildContext context) { - return () { - context.read().add(AddPortionEvent()); - }; + context.read().add(AddPortionEvent()); } /// Section Widget @@ -778,7 +776,7 @@ class DiaryScreen extends StatelessWidget { ), Spacer(), GestureDetector( - onTap: removePortion(context, portion), + onTap: () => removePortion(context, portion), child: Padding( padding: const EdgeInsets.only(right: 10), child: Icon( @@ -811,7 +809,7 @@ class DiaryScreen extends StatelessWidget { children: [ Checkbox( value: !portion.from_diet, - onChanged: (bool? value) {}, + onChanged: (bool? value) => context.read().add(ConfirmPortion(portion.id)), ), Padding( padding: EdgeInsets.only( @@ -819,10 +817,11 @@ class DiaryScreen extends StatelessWidget { top: 5.v, ), child: Text( - portion.product_name.length > 8 ? portion.product_name.substring(0, 8) : portion.product_name, + portion.product_name.length > 18 ? portion.product_name.substring(0, 18) : portion.product_name, style: CustomTextStyles.titleMedium16, ), ), + Spacer(), Padding( padding: EdgeInsets.only( left: 20.h, @@ -833,17 +832,6 @@ class DiaryScreen extends StatelessWidget { portion.quantity.toString() + ' ' + portion.portion.toString().tr, ), ), - Spacer(), - GestureDetector( - onTap: () => removePortion(context, portion), // Обернуть в лямбду - child: Padding( - padding: const EdgeInsets.only(right: 10), - child: Icon( - Icons.close, - color: appTheme.blueGray300, - ), - ), - ), ], ), );