feat(diary) Added network methods and routes

This commit is contained in:
2024-02-21 20:19:15 +03:00
parent 05e04c444f
commit 77bc29c3d5
4 changed files with 309 additions and 135 deletions

View File

@@ -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<DiaryEditEvent, DiaryEditState> {
) 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<DiaryEditEvent, DiaryEditState> {
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<http.Response> 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<void> _changeMood(
ChangeMood event, Emitter<DiaryEditState> emit) async {
if (state is DiaryEditLoadedState) {
@@ -158,8 +190,180 @@ class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
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<http.Response> 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<void> _changeWakeup(
WakeupEvent event, Emitter<DiaryEditState> 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<http.Response> 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<void> _changeRetire(
RetireEvent event, Emitter<DiaryEditState> 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<http.Response> 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<void> _changeMealTime(
ChangeMealTime event, Emitter<DiaryEditState> 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<http.Response> 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<void> _changeMeal(ChangeMeal event, Emitter<DiaryEditState> 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<DiaryEditEvent, DiaryEditState> {
}
}
FutureOr<void> _changeWakeup(
WakeupEvent event, Emitter<DiaryEditState> emit) {
if (state is DiaryEditLoadedState) {
var currentState = state as DiaryEditLoadedState;
emit(currentState.copyWith(wakeupController: event.selectedTime));
currentState.wakeupController = event.selectedTime;
print(currentState.wakeupController);
}
}
FutureOr<void> _changeRetire(
RetireEvent event, Emitter<DiaryEditState> emit) {
if (state is DiaryEditLoadedState) {
var currentState = state as DiaryEditLoadedState;
emit(currentState.copyWith(retireController: event.selectedTime));
currentState.retireController = event.selectedTime;
print(currentState.retireController);
}
}
FutureOr<void> _addPortion(
AddPortionEvent event, Emitter<DiaryEditState> emit) {}
FutureOr<void> _removePortion(
RemovePortionEvent event, Emitter<DiaryEditState> emit) {}
Future<FutureOr<void>> _uploadImages(
UploadImages event, Emitter<DiaryEditState> emit) async {
String imageUrl = await uploadImageToServer(event.image.path);
print(imageUrl);
}
FutureOr<void> _addComment(AddComment event, Emitter<DiaryEditState> emit) {}
FutureOr<void> _changeMealTime(
ChangeMealTime event, Emitter<DiaryEditState> emit) {
AddPortionEvent event, Emitter<DiaryEditState> 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<void> _changeMeal(ChangeMeal event, Emitter<DiaryEditState> 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<http.Response> 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<void> _removePortion(
RemovePortionEvent event, Emitter<DiaryEditState> emit) {}
Future<FutureOr<void>> _uploadImages(
UploadImages event, Emitter<DiaryEditState> emit) async {
String imageUrl = await uploadImageToServer(event.image.path);
print(imageUrl);
}
FutureOr<void> _addComment(AddComment event, Emitter<DiaryEditState> emit) {}
Future<String> uploadImageToServer(String imagePath) async {
var request = http.MultipartRequest(
'POST',

View File

@@ -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<Object> get props => [selectedElement, mealId];
List<Object> get props => [selectedElement];
}
class ChangeMood extends DiaryEditEvent {
ChangeMood(
this.selectedElement,
this.diaryId,
);
final int selectedElement;
final int diaryId;
@override
List<Object> get props => [selectedElement, diaryId];
List<Object> get props => [selectedElement];
}
class ChangeMealTime extends DiaryEditEvent {
ChangeMealTime(this.mealId, this.time);
final int mealId;
ChangeMealTime(this.time);
final TimeOfDay time;
@override
List<Object> get props => [mealId, time];
List<Object> 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<Object> get props => [selectedTime, diaryId];
List<Object> get props => [selectedTime];
}
class RetireEvent extends DiaryEditEvent {
RetireEvent(this.selectedTime, this.diaryId);
RetireEvent(this.selectedTime);
final TimeOfDay selectedTime;
final int diaryId;
@override
List<Object> get props => [selectedTime, diaryId];
List<Object> 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<Object> get props => [mealId, productId, quantity, portion];
List<Object> get props => [name, quantity, portion];
}
class RemovePortionEvent extends DiaryEditEvent {

View File

@@ -331,54 +331,42 @@ class DiaryEditScreen extends StatelessWidget {
color: Colors.red,
isSelected: state.selectedSatiety == 0,
onTap: () {
context
.read<DiaryEditBloc>()
.add(ChangeSatiety(0, state.diaryId));
context.read<DiaryEditBloc>().add(ChangeSatiety(0));
},
),
ScaleElement(
color: Colors.orange,
isSelected: state.selectedSatiety == 1,
onTap: () {
context
.read<DiaryEditBloc>()
.add(ChangeSatiety(1, state.diaryId));
context.read<DiaryEditBloc>().add(ChangeSatiety(1));
},
),
ScaleElement(
color: Colors.yellow,
isSelected: state.selectedSatiety == 2,
onTap: () {
context
.read<DiaryEditBloc>()
.add(ChangeSatiety(2, state.diaryId));
context.read<DiaryEditBloc>().add(ChangeSatiety(2));
},
),
ScaleElement(
color: Colors.lime,
isSelected: state.selectedSatiety == 3,
onTap: () {
context
.read<DiaryEditBloc>()
.add(ChangeSatiety(3, state.diaryId));
context.read<DiaryEditBloc>().add(ChangeSatiety(3));
},
),
ScaleElement(
color: Colors.lightGreen,
isSelected: state.selectedSatiety == 4,
onTap: () {
context
.read<DiaryEditBloc>()
.add(ChangeSatiety(4, state.diaryId));
context.read<DiaryEditBloc>().add(ChangeSatiety(4));
},
),
ScaleElement(
color: Colors.green,
isSelected: state.selectedSatiety == 5,
onTap: () {
context
.read<DiaryEditBloc>()
.add(ChangeSatiety(5, state.diaryId));
context.read<DiaryEditBloc>().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<DiaryEditBloc>()
.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<DiaryEditBloc>()
.add(ChangeMood(0, state.diaryId));
context.read<DiaryEditBloc>().add(ChangeMood(0));
},
),
ScaleElement(
color: Colors.orange,
isSelected: state.selectedMood == 1,
onTap: () {
context
.read<DiaryEditBloc>()
.add(ChangeMood(1, state.diaryId));
context.read<DiaryEditBloc>().add(ChangeMood(1));
},
),
ScaleElement(
color: Colors.yellow,
isSelected: state.selectedMood == 2,
onTap: () {
context
.read<DiaryEditBloc>()
.add(ChangeMood(2, state.diaryId));
context.read<DiaryEditBloc>().add(ChangeMood(2));
},
),
ScaleElement(
color: Colors.lime,
isSelected: state.selectedMood == 3,
onTap: () {
context
.read<DiaryEditBloc>()
.add(ChangeMood(3, state.diaryId));
context.read<DiaryEditBloc>().add(ChangeMood(3));
},
),
ScaleElement(
color: Colors.lightGreen,
isSelected: state.selectedMood == 4,
onTap: () {
context
.read<DiaryEditBloc>()
.add(ChangeMood(4, state.diaryId));
context.read<DiaryEditBloc>().add(ChangeMood(4));
},
),
ScaleElement(
color: Colors.green,
isSelected: state.selectedMood == 5,
onTap: () {
context
.read<DiaryEditBloc>()
.add(ChangeMood(5, state.diaryId));
context.read<DiaryEditBloc>().add(ChangeMood(5));
},
),
Text("😊"),
@@ -952,7 +934,6 @@ class DiaryEditScreen extends StatelessWidget {
if (pickedTime != null && pickedTime != state.wakeupController) {
state.wakeupController = pickedTime;
context.read<DiaryEditBloc>().add(WakeupEvent(
state.diaryId,
pickedTime,
));
}
@@ -966,10 +947,7 @@ class DiaryEditScreen extends StatelessWidget {
);
if (pickedTime != null && pickedTime != state.retireController) {
state.retireController = pickedTime;
context.read<DiaryEditBloc>().add(RetireEvent(
pickedTime,
state.diaryId,
));
context.read<DiaryEditBloc>().add(RetireEvent(pickedTime));
}
}
@@ -981,10 +959,7 @@ class DiaryEditScreen extends StatelessWidget {
);
if (pickedTime != null && pickedTime != state.mealTimeController) {
state.mealTimeController = pickedTime;
context.read<DiaryEditBloc>().add(ChangeMealTime(
state.diaryId,
pickedTime,
));
context.read<DiaryEditBloc>().add(ChangeMealTime(pickedTime));
}
}
}

View File

@@ -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';