diff --git a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart index bedf0c27..72f012d7 100644 --- a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart +++ b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart @@ -26,8 +26,9 @@ class DiaryEditBloc extends Bloc { on(_toggleMood); on(_toggleWakeup); on(_addPortion); //пользователь нажимает "Добавить продукт" - on( - _removePortion); // пользователь нажимает на крестик около продукта + on(_removePortion); + on( + _removeImage); // пользователь нажимает на крестик около продукта on(_uploadImages); //пользователь нажимает "Добавить фото" on(_addComment); //пользователь нажимает "Добавить комментарий" on( @@ -469,7 +470,6 @@ class DiaryEditBloc extends Bloc { DiaryEditLoadedState updatedState = currentState.copyWith( portionController: event.value, ); - print(updatedState.portionController?.title); emit(updatedState); } } @@ -508,8 +508,6 @@ class DiaryEditBloc extends Bloc { currentState.diaryId, ); - print(response.body); - if (response.statusCode == 200) { await reloadScreen(event, emit); } else { @@ -624,6 +622,49 @@ class DiaryEditBloc extends Bloc { return response; } + FutureOr _removeImage( + RemoveImageEvent event, Emitter emit) async { + if (state is DiaryEditLoadedState) { + var currentState = state as DiaryEditLoadedState; + + var response = await sendRemovePhoto( + currentState.token, + event.path, + event.photoID, + currentState.currentMeal?.id, + currentState.diaryId, + ); + print(response.statusCode); + if (response.statusCode == 204) { + await reloadScreen(event, emit); + } else { + print( + 'Failed to remove photo. Status Code: ${response.statusCode} ${response.body}'); + } + } + } + + Future sendRemovePhoto(String? token, String? path, + String? photoID, int? mealID, int diaryID) async { + String url = + '${dotenv.env['SERVER_ROOT']!}/diary/$diaryID/meal/$mealID/photo/delete'; + final Map credentials = { + 'id': photoID, + 'path': path, + }; + var response = await http.delete( + Uri.parse(url), + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer $token', + }, + body: json.encode(credentials), + encoding: utf8, + ); + + return response; + } + Future _finishDay(FinishDay event, Emitter emit) async { if (state is DiaryEditLoadedState) { var currentState = state as DiaryEditLoadedState; diff --git a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_event.dart b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_event.dart index 873a667c..08b1e90a 100644 --- a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_event.dart +++ b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_event.dart @@ -98,6 +98,14 @@ class UploadImages extends DiaryEditEvent { List get props => [image]; } +class RemoveImageEvent extends DiaryEditEvent { + RemoveImageEvent(this.photoID, this.path); + final String photoID; + final String path; + @override + List get props => [photoID, path]; +} + class ProductInput extends DiaryEditEvent { ProductInput(this.input); final String input; diff --git a/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart b/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart index 20be9837..52dffb50 100644 --- a/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart +++ b/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart @@ -653,14 +653,36 @@ class DiaryEditScreen extends StatelessWidget { } _buildPhoto(BuildContext context, Map photo) { - return Container( - margin: EdgeInsets.symmetric(horizontal: 10.h, vertical: 10.h), - decoration: AppDecoration.fillGray.copyWith( - borderRadius: BorderRadiusStyle.roundedBorder5, - ), - child: Image.network( - dotenv.env['STORAGE_URL']! + photo['path'], - ), + return Stack( + children: [ + Container( + margin: EdgeInsets.symmetric(horizontal: 10.h, vertical: 10.h), + decoration: AppDecoration.fillGray.copyWith( + borderRadius: BorderRadiusStyle.roundedBorder5, + ), + child: Image.network( + dotenv.env['STORAGE_URL']! + photo['path'], + ), + ), + Positioned( + top: 5, + right: 5, + child: GestureDetector( + onTap: removePhoto(context, photo), + child: Container( + padding: EdgeInsets.all(5), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.transparent, + ), + child: Icon( + Icons.close, + color: appTheme.blueGray300, + ), + ), + ), + ), + ], ); } @@ -670,6 +692,14 @@ class DiaryEditScreen extends StatelessWidget { }; } + removePhoto(BuildContext context, Map photo) { + return () { + context + .read() + .add(RemoveImageEvent(photo['id'].toString(), photo['path'])); + }; + } + _buildNutritionChart(BuildContext context) { final List recommendedValues = [ 2000,