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 1d70efee..951c7ae6 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 @@ -1,5 +1,4 @@ import 'dart:async'; -import 'dart:ffi'; import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; @@ -8,7 +7,6 @@ import 'package:image_picker/image_picker.dart'; import 'package:eatvio_app/presentation/diary/diary_edit_screen/models/diary_edit_model.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; -import 'package:hive/hive.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; part 'diary_edit_event.dart'; @@ -40,7 +38,7 @@ class DiaryEditBloc extends Bloc { ) async { try { final token = - "laravel_sanctum_RzcUqh1zBYFCIG5tBFvfxyvA1NER9fMQiKlqlJFYeb618e64"; + "laravel_sanctum_Q22zOtJhQUcJnh0kseZFblFv5XAPaKbG3gTM5hga71ecbb49"; final response = await http.get( Uri.parse(dotenv.env['SERVER_ROOT']! + '/diary/index'), headers: { @@ -145,10 +143,44 @@ class DiaryEditBloc extends Bloc { emit(updatedState); // Передаем обновленное состояние в emit - currentState.selectedSatiety = event.selectedElement; + // Отправляем данные по HTTP маршруту и ждем ответ + var response = await sendSatietyData( + currentState.token, + event.selectedElement, + currentState.currentMeal?.id, + currentState.diaryId); + + if (response.statusCode == 200) { + currentState.selectedSatiety = event.selectedElement; + emit(currentState); // Передаем обновленное состояние в emit + } } } + Future sendSatietyData( + String? token, + int selectedSatiety, + int? mealID, + int diaryID, + ) async { + String url = + dotenv.env['SERVER_ROOT']! + '$diaryID/meal/$mealID/satiety/fill'; + final credentials = { + 'satiety': selectedSatiety, + 'meal_id': mealID, + 'diary_id': diaryID, + }; + + var response = await http.post(Uri.parse(url), + headers: { + 'Authorization': 'Bearer $token', + }, + body: json.encode(credentials), + encoding: utf8); + + return response; + } + Future _changeMood( ChangeMood event, Emitter emit) async { if (state is DiaryEditLoadedState) { @@ -158,8 +190,180 @@ class DiaryEditBloc extends Bloc { emit(updatedState); // Передаем обновленное состояние в emit - currentState.selectedMood = event.selectedElement; - print(currentState.mealTimeController); + // Отправляем данные по HTTP маршруту и ждем ответ + var response = await sendMoodData( + currentState.token, + event.selectedElement, + currentState.currentMeal?.id, + currentState.diaryId); + + if (response.statusCode == 200) { + currentState.selectedMood = event.selectedElement; + emit(currentState); // Передаем обновленное состояние в emit + } + } + } + + Future sendMoodData( + String? token, + int selectedMood, + int? mealID, + int diaryID, + ) async { + String url = + dotenv.env['SERVER_ROOT']! + '/$diaryID/meal/$mealID/mood/fill'; + final credentials = { + 'mood': selectedMood, + 'meal_id': mealID, + 'diary_id': diaryID, + }; + + var response = await http.post(Uri.parse(url), + headers: { + 'Authorization': 'Bearer $token', + }, + body: json.encode(credentials), + encoding: utf8); + + return response; + } + + FutureOr _changeWakeup( + WakeupEvent event, Emitter emit) async { + if (state is DiaryEditLoadedState) { + var currentState = state as DiaryEditLoadedState; + var updatedState = + currentState.copyWith(wakeupController: event.selectedTime); + + emit(updatedState); // Передаем обновленное состояние в emit + + // Отправляем данные по HTTP маршруту и ждем ответ + var response = await sendWakeupData( + currentState.token, event.selectedTime, currentState.diaryId); + + if (response.statusCode == 200) { + currentState.wakeupController = event.selectedTime; + emit(currentState); // Передаем обновленное состояние в emit + } + } + } + + Future sendWakeupData( + String? token, + TimeOfDay wakeup, + int diaryID, + ) async { + String url = dotenv.env['SERVER_ROOT']! + '/diary/???'; + final credentials = { + 'wakeup': wakeup, + 'diary_id': diaryID, + }; + + var response = await http.post(Uri.parse(url), + headers: { + 'Authorization': 'Bearer $token', + }, + body: json.encode(credentials), + encoding: utf8); + + return response; + } + + FutureOr _changeRetire( + RetireEvent event, Emitter emit) async { + if (state is DiaryEditLoadedState) { + var currentState = state as DiaryEditLoadedState; + var updatedState = + currentState.copyWith(retireController: event.selectedTime); + + emit(updatedState); // Передаем обновленное состояние в emit + + // Отправляем данные по HTTP маршруту и ждем ответ + var response = await sendRetireData( + currentState.token, event.selectedTime, currentState.diaryId); + + if (response.statusCode == 200) { + currentState.retireController = event.selectedTime; + emit(currentState); // Передаем обновленное состояние в emit + } + } + } + + Future sendRetireData( + String? token, + TimeOfDay retire, + int diaryID, + ) async { + String url = dotenv.env['SERVER_ROOT']! + '/diary/???'; + final credentials = { + 'wakeup': retire, + 'diary_id': diaryID, + }; + + var response = await http.post(Uri.parse(url), + headers: { + 'Authorization': 'Bearer $token', + }, + body: json.encode(credentials), + encoding: utf8); + + return response; + } + + FutureOr _changeMealTime( + ChangeMealTime event, Emitter emit) async { + if (state is DiaryEditLoadedState) { + var currentState = state as DiaryEditLoadedState; + var updatedState = currentState.copyWith(mealTimeController: event.time); + + emit(updatedState); // Передаем обновленное состояние в emit + + // Отправляем данные по HTTP маршруту и ждем ответ + var response = await sendMealTimeData(currentState.token, event.time, + currentState.currentMeal?.id, currentState.diaryId); + + if (response.statusCode == 200) { + currentState.retireController = event.time; + emit(currentState); // Передаем обновленное состояние в emit + } + } + } + + Future sendMealTimeData( + String? token, + TimeOfDay mealTime, + int? mealID, + int diaryID, + ) async { + String url = dotenv.env['SERVER_ROOT']! + '/diary/???'; + final credentials = { + 'time': mealTime, + 'meal_id': mealID, + 'diary_id': diaryID, + }; + + var response = await http.post(Uri.parse(url), + headers: { + 'Authorization': 'Bearer $token', + }, + body: json.encode(credentials), + encoding: utf8); + + return response; + } + + FutureOr _changeMeal(ChangeMeal event, Emitter emit) { + if (state is DiaryEditLoadedState) { + var currentState = state as DiaryEditLoadedState; + int? id = event.value.id; + emit(currentState.copyWith( + currentMeal: event.value, + portions: event.meals?[event.value.id ?? 0]['portions'], + mealTimeController: + toTime(event.meals?[event.value.id ?? 0]['time'] ?? "1$id:00"), + selectedMood: event.meals?[event.value.id ?? 0]['mood'], + selectedSatiety: event.meals?[event.value.id ?? 0]['satiety'])); + currentState.currentMeal = event.value; } } @@ -183,69 +387,74 @@ class DiaryEditBloc extends Bloc { } } - FutureOr _changeWakeup( - WakeupEvent event, Emitter emit) { - if (state is DiaryEditLoadedState) { - var currentState = state as DiaryEditLoadedState; - - emit(currentState.copyWith(wakeupController: event.selectedTime)); - currentState.wakeupController = event.selectedTime; - print(currentState.wakeupController); - } - } - - FutureOr _changeRetire( - RetireEvent event, Emitter emit) { - if (state is DiaryEditLoadedState) { - var currentState = state as DiaryEditLoadedState; - - emit(currentState.copyWith(retireController: event.selectedTime)); - currentState.retireController = event.selectedTime; - print(currentState.retireController); - } - } - FutureOr _addPortion( - AddPortionEvent event, Emitter emit) {} - - FutureOr _removePortion( - RemovePortionEvent event, Emitter emit) {} - - Future> _uploadImages( - UploadImages event, Emitter emit) async { - String imageUrl = await uploadImageToServer(event.image.path); - print(imageUrl); - } - - FutureOr _addComment(AddComment event, Emitter emit) {} - - FutureOr _changeMealTime( - ChangeMealTime event, Emitter emit) { + AddPortionEvent event, Emitter emit) async { if (state is DiaryEditLoadedState) { var currentState = state as DiaryEditLoadedState; - - emit(currentState.copyWith(mealTimeController: event.time)); - currentState.mealTimeController = event.time; - print(currentState.mealTimeController); - } - } - - FutureOr _changeMeal(ChangeMeal event, Emitter emit) { - if (state is DiaryEditLoadedState) { - var currentState = state as DiaryEditLoadedState; - int? id = event.value.id; - emit(currentState.copyWith( - currentMeal: event.value, - portions: event.meals?[event.value.id ?? 0]['portions'], + int? id = currentState.currentMeal?.id; + var updatedState = currentState.copyWith( + currentMeal: currentState.diaryEditModelObj?.mealList[id ?? 0], + portions: currentState.meals?[id ?? 0]['portions'], mealTimeController: - toTime(event.meals?[event.value.id ?? 0]['time'] ?? "1$id:00"), - selectedMood: event.meals?[event.value.id ?? 0]['mood'], - selectedSatiety: event.meals?[event.value.id ?? 0]['satiety'])); - currentState.currentMeal = event.value; + toTime(currentState.meals?[id ?? 0]['time'] ?? "1$id:00"), + selectedMood: currentState.meals?[id ?? 0]['mood'], + selectedSatiety: currentState.meals?[id ?? 0]['satiety']); + emit(updatedState); // Передаем обновленное состояние в emit + + // Отправляем данные по HTTP маршруту и ждем ответ + var response = await sendPortionData( + currentState.token, + event.name, + event.portion, + event.quantity, + currentState.currentMeal!.id, + currentState.diaryId); + + if (response.statusCode == 200) { + emit(currentState); // Передаем обновленное состояние в emit + } } } + + Future sendPortionData( + String? token, + String name, + String portion, + int quantity, + int? mealID, + int diaryID, + ) async { + String url = + dotenv.env['SERVER_ROOT']! + '/$diaryID/meal/$mealID/portions/create'; + final credentials = { + 'name': name, + 'portion': portion, + 'quantity': quantity, + 'meal_id': mealID, + 'diary_id': diaryID, + }; + + var response = await http.post(Uri.parse(url), + headers: { + 'Authorization': 'Bearer $token', + }, + body: json.encode(credentials), + encoding: utf8); + + return response; + } } +FutureOr _removePortion( + RemovePortionEvent event, Emitter emit) {} + +Future> _uploadImages( + UploadImages event, Emitter emit) async { + String imageUrl = await uploadImageToServer(event.image.path); + print(imageUrl); +} + +FutureOr _addComment(AddComment event, Emitter emit) {} Future uploadImageToServer(String imagePath) async { var request = http.MultipartRequest( 'POST', 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 8f396765..236ecbcd 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 @@ -18,34 +18,29 @@ class DiaryEditInitialEvent extends DiaryEditEvent { class ChangeSatiety extends DiaryEditEvent { ChangeSatiety( this.selectedElement, - this.mealId, ); final int selectedElement; - final int mealId; @override - List get props => [selectedElement, mealId]; + List get props => [selectedElement]; } class ChangeMood extends DiaryEditEvent { ChangeMood( this.selectedElement, - this.diaryId, ); final int selectedElement; - final int diaryId; @override - List get props => [selectedElement, diaryId]; + List get props => [selectedElement]; } class ChangeMealTime extends DiaryEditEvent { - ChangeMealTime(this.mealId, this.time); - final int mealId; + ChangeMealTime(this.time); final TimeOfDay time; @override - List get props => [mealId, time]; + List get props => [time]; } class AddComment extends DiaryEditEvent { @@ -58,21 +53,19 @@ class AddComment extends DiaryEditEvent { } class WakeupEvent extends DiaryEditEvent { - WakeupEvent(this.diaryId, this.selectedTime); + WakeupEvent(this.selectedTime); final TimeOfDay selectedTime; - final int diaryId; @override - List get props => [selectedTime, diaryId]; + List get props => [selectedTime]; } class RetireEvent extends DiaryEditEvent { - RetireEvent(this.selectedTime, this.diaryId); + RetireEvent(this.selectedTime); final TimeOfDay selectedTime; - final int diaryId; @override - List get props => [selectedTime, diaryId]; + List get props => [selectedTime]; } class ToggleMoodExpandedEvent extends DiaryEditEvent { @@ -86,13 +79,12 @@ class ToggleWakeupExpandedEvent extends DiaryEditEvent { } class AddPortionEvent extends DiaryEditEvent { - AddPortionEvent(this.mealId, this.productId, this.quantity, this.portion); - final int mealId; - final int productId; + AddPortionEvent(this.name, this.quantity, this.portion); + final String name; final int quantity; final String portion; @override - List get props => [mealId, productId, quantity, portion]; + List get props => [name, quantity, portion]; } class RemovePortionEvent extends DiaryEditEvent { 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 c1813419..04206dd4 100644 --- a/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart +++ b/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart @@ -331,54 +331,42 @@ class DiaryEditScreen extends StatelessWidget { color: Colors.red, isSelected: state.selectedSatiety == 0, onTap: () { - context - .read() - .add(ChangeSatiety(0, state.diaryId)); + context.read().add(ChangeSatiety(0)); }, ), ScaleElement( color: Colors.orange, isSelected: state.selectedSatiety == 1, onTap: () { - context - .read() - .add(ChangeSatiety(1, state.diaryId)); + context.read().add(ChangeSatiety(1)); }, ), ScaleElement( color: Colors.yellow, isSelected: state.selectedSatiety == 2, onTap: () { - context - .read() - .add(ChangeSatiety(2, state.diaryId)); + context.read().add(ChangeSatiety(2)); }, ), ScaleElement( color: Colors.lime, isSelected: state.selectedSatiety == 3, onTap: () { - context - .read() - .add(ChangeSatiety(3, state.diaryId)); + context.read().add(ChangeSatiety(3)); }, ), ScaleElement( color: Colors.lightGreen, isSelected: state.selectedSatiety == 4, onTap: () { - context - .read() - .add(ChangeSatiety(4, state.diaryId)); + context.read().add(ChangeSatiety(4)); }, ), ScaleElement( color: Colors.green, isSelected: state.selectedSatiety == 5, onTap: () { - context - .read() - .add(ChangeSatiety(5, state.diaryId)); + context.read().add(ChangeSatiety(5)); }, ), Text("😊"), @@ -415,7 +403,7 @@ class DiaryEditScreen extends StatelessWidget { top: 5.v, ), child: Text( - portion['name'], + portion['product_name'], style: CustomTextStyles.titleMedium16, ), ), @@ -430,13 +418,19 @@ class DiaryEditScreen extends StatelessWidget { ), ), Spacer(), - Padding( - padding: const EdgeInsets.only(right: 10), - child: Icon( - Icons.close, - color: appTheme.blueGray300, - ), - ) + GestureDetector( + onTap: () { + context + .read() + .add(RemovePortionEvent(portion['id'])); + }, + child: Padding( + padding: const EdgeInsets.only(right: 10), + child: Icon( + Icons.close, + color: appTheme.blueGray300, + ), + )), ], ), ); @@ -886,54 +880,42 @@ class DiaryEditScreen extends StatelessWidget { color: Colors.red, isSelected: state.selectedMood == 0, onTap: () { - context - .read() - .add(ChangeMood(0, state.diaryId)); + context.read().add(ChangeMood(0)); }, ), ScaleElement( color: Colors.orange, isSelected: state.selectedMood == 1, onTap: () { - context - .read() - .add(ChangeMood(1, state.diaryId)); + context.read().add(ChangeMood(1)); }, ), ScaleElement( color: Colors.yellow, isSelected: state.selectedMood == 2, onTap: () { - context - .read() - .add(ChangeMood(2, state.diaryId)); + context.read().add(ChangeMood(2)); }, ), ScaleElement( color: Colors.lime, isSelected: state.selectedMood == 3, onTap: () { - context - .read() - .add(ChangeMood(3, state.diaryId)); + context.read().add(ChangeMood(3)); }, ), ScaleElement( color: Colors.lightGreen, isSelected: state.selectedMood == 4, onTap: () { - context - .read() - .add(ChangeMood(4, state.diaryId)); + context.read().add(ChangeMood(4)); }, ), ScaleElement( color: Colors.green, isSelected: state.selectedMood == 5, onTap: () { - context - .read() - .add(ChangeMood(5, state.diaryId)); + context.read().add(ChangeMood(5)); }, ), Text("😊"), @@ -952,7 +934,6 @@ class DiaryEditScreen extends StatelessWidget { if (pickedTime != null && pickedTime != state.wakeupController) { state.wakeupController = pickedTime; context.read().add(WakeupEvent( - state.diaryId, pickedTime, )); } @@ -966,10 +947,7 @@ class DiaryEditScreen extends StatelessWidget { ); if (pickedTime != null && pickedTime != state.retireController) { state.retireController = pickedTime; - context.read().add(RetireEvent( - pickedTime, - state.diaryId, - )); + context.read().add(RetireEvent(pickedTime)); } } @@ -981,10 +959,7 @@ class DiaryEditScreen extends StatelessWidget { ); if (pickedTime != null && pickedTime != state.mealTimeController) { state.mealTimeController = pickedTime; - context.read().add(ChangeMealTime( - state.diaryId, - pickedTime, - )); + context.read().add(ChangeMealTime(pickedTime)); } } } diff --git a/lib/presentation/profile/my_profile_screen/my_profile_screen.dart b/lib/presentation/profile/my_profile_screen/my_profile_screen.dart index 3b65469e..3fe87cf2 100644 --- a/lib/presentation/profile/my_profile_screen/my_profile_screen.dart +++ b/lib/presentation/profile/my_profile_screen/my_profile_screen.dart @@ -1,5 +1,3 @@ -import 'dart:ffi'; - import 'bloc/my_profile_bloc.dart'; import 'models/my_profile_model.dart'; import 'package:eatvio_app/core/app_export.dart';