forked from eatvio/eatvio_app
feat(app): Delete methods for recipes, blog posts, diets and plans
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||
@@ -13,6 +15,7 @@ part 'diet_show_state.dart';
|
||||
class DietBloc extends Bloc<DietEvent, DietState> {
|
||||
DietBloc(DietState initialState) : super(initialState) {
|
||||
on<DietInitialEvent>(_onInitialize);
|
||||
on<DeleteEntry>(_deleteEntry);
|
||||
}
|
||||
|
||||
_onInitialize(
|
||||
@@ -44,7 +47,6 @@ class DietBloc extends Bloc<DietEvent, DietState> {
|
||||
diet: currentState.diet));
|
||||
} else {
|
||||
emit(DietLoadedState(diet: data));
|
||||
print(data);
|
||||
}
|
||||
} else {
|
||||
// Один или несколько ключевых полей отсутствуют, обрабатываем ошибку
|
||||
@@ -59,4 +61,28 @@ class DietBloc extends Bloc<DietEvent, DietState> {
|
||||
emit(DietErrorState('Ошибка при получении данных о чатах: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> _deleteEntry(
|
||||
DeleteEntry event, Emitter<DietState> emit) async {
|
||||
final box = await Hive.openBox('token');
|
||||
final token = box.get('token');
|
||||
if (token == null) {
|
||||
NavigatorService.popAndPushNamed(
|
||||
AppRoutes.authScreen,
|
||||
);
|
||||
}
|
||||
final int id = event.id;
|
||||
final response = await http.post(
|
||||
Uri.parse(dotenv.env['SERVER_ROOT']! + '/diets/delete/$id'),
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
},
|
||||
);
|
||||
if (response.statusCode == 200) {
|
||||
NavigatorService.pushNamed(AppRoutes.dietSelectScreen);
|
||||
} else {
|
||||
// Статус ответа не равен 200, обрабатываем ошибку
|
||||
emit(DietErrorState('Ошибка: ${response.statusCode}'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,3 +14,10 @@ class DietInitialEvent extends DietEvent {
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class DeleteEntry extends DietEvent {
|
||||
DeleteEntry(this.id);
|
||||
final int id;
|
||||
@override
|
||||
List<Object?> get props => [id];
|
||||
}
|
||||
|
||||
@@ -44,7 +44,6 @@ class DietScreen extends StatelessWidget {
|
||||
}
|
||||
|
||||
_buildDiet(BuildContext context, DietLoadedState state) {
|
||||
print(state.diet);
|
||||
mediaQueryData = MediaQuery.of(context);
|
||||
return SafeArea(
|
||||
child: Scaffold(
|
||||
@@ -110,9 +109,9 @@ class DietScreen extends StatelessWidget {
|
||||
child: Text('Редактировать'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
// Действие для удаления
|
||||
},
|
||||
onPressed: () => context
|
||||
.read<DietBloc>()
|
||||
.add(DeleteEntry(state.diet?['id'])),
|
||||
child: Text('Удалить'),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||
@@ -13,6 +15,7 @@ part 'blog_post_state.dart';
|
||||
class BlogPostBloc extends Bloc<BlogPostEvent, BlogPostState> {
|
||||
BlogPostBloc(BlogPostState initialState) : super(initialState) {
|
||||
on<BlogPostInitialEvent>(_onInitialize);
|
||||
on<DeleteEntry>(_deleteEntry);
|
||||
}
|
||||
|
||||
_onInitialize(
|
||||
@@ -58,4 +61,28 @@ class BlogPostBloc extends Bloc<BlogPostEvent, BlogPostState> {
|
||||
emit(BlogPostErrorState('Ошибка при получении данных о чатах: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> _deleteEntry(
|
||||
DeleteEntry event, Emitter<BlogPostState> emit) async {
|
||||
final box = await Hive.openBox('token');
|
||||
final token = box.get('token');
|
||||
if (token == null) {
|
||||
NavigatorService.popAndPushNamed(
|
||||
AppRoutes.authScreen,
|
||||
);
|
||||
}
|
||||
final int id = event.id;
|
||||
final response = await http.post(
|
||||
Uri.parse(dotenv.env['SERVER_ROOT']! + '/feed/delete/$id'),
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
},
|
||||
);
|
||||
if (response.statusCode == 200) {
|
||||
NavigatorService.pushNamed(AppRoutes.feedScreen);
|
||||
} else {
|
||||
// Статус ответа не равен 200, обрабатываем ошибку
|
||||
emit(BlogPostErrorState('Ошибка: ${response.statusCode}'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,3 +14,10 @@ class BlogPostInitialEvent extends BlogPostEvent {
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class DeleteEntry extends BlogPostEvent {
|
||||
DeleteEntry(this.id);
|
||||
final int id;
|
||||
@override
|
||||
List<Object?> get props => [id];
|
||||
}
|
||||
|
||||
@@ -111,9 +111,9 @@ class BlogPostScreen extends StatelessWidget {
|
||||
child: Text('Редактировать'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
// Действие для удаления
|
||||
},
|
||||
onPressed: () => context
|
||||
.read<BlogPostBloc>()
|
||||
.add(DeleteEntry(state.blog_post?['id'])),
|
||||
child: Text('Удалить'),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -40,7 +40,6 @@ class PlanSelectScreen extends StatelessWidget {
|
||||
|
||||
_buildSetingsScreen(BuildContext context, PlanSelectLoadedState state) {
|
||||
mediaQueryData = MediaQuery.of(context);
|
||||
print(state.posts);
|
||||
return SafeArea(
|
||||
child: Scaffold(
|
||||
backgroundColor: Colors.grey[200],
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||
@@ -13,6 +15,7 @@ part 'plan_show_state.dart';
|
||||
class PlanBloc extends Bloc<PlanEvent, PlanState> {
|
||||
PlanBloc(PlanState initialState) : super(initialState) {
|
||||
on<PlanInitialEvent>(_onInitialize);
|
||||
on<DeleteEntry>(_deleteEntry);
|
||||
}
|
||||
|
||||
_onInitialize(
|
||||
@@ -44,7 +47,6 @@ class PlanBloc extends Bloc<PlanEvent, PlanState> {
|
||||
plan: currentState.plan));
|
||||
} else {
|
||||
emit(PlanLoadedState(plan: data));
|
||||
print(data);
|
||||
}
|
||||
} else {
|
||||
// Один или несколько ключевых полей отсутствуют, обрабатываем ошибку
|
||||
@@ -59,4 +61,28 @@ class PlanBloc extends Bloc<PlanEvent, PlanState> {
|
||||
emit(PlanErrorState('Ошибка при получении данных о чатах: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> _deleteEntry(
|
||||
DeleteEntry event, Emitter<PlanState> emit) async {
|
||||
final box = await Hive.openBox('token');
|
||||
final token = box.get('token');
|
||||
if (token == null) {
|
||||
NavigatorService.popAndPushNamed(
|
||||
AppRoutes.authScreen,
|
||||
);
|
||||
}
|
||||
final int id = event.id;
|
||||
final response = await http.post(
|
||||
Uri.parse(dotenv.env['SERVER_ROOT']! + '/plans/delete/$id'),
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
},
|
||||
);
|
||||
if (response.statusCode == 200) {
|
||||
NavigatorService.pushNamed(AppRoutes.planSelectScreen);
|
||||
} else {
|
||||
// Статус ответа не равен 200, обрабатываем ошибку
|
||||
emit(PlanErrorState('Ошибка: ${response.statusCode}'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,3 +14,10 @@ class PlanInitialEvent extends PlanEvent {
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class DeleteEntry extends PlanEvent {
|
||||
DeleteEntry(this.id);
|
||||
final int id;
|
||||
@override
|
||||
List<Object?> get props => [id];
|
||||
}
|
||||
|
||||
@@ -44,7 +44,6 @@ class PlanScreen extends StatelessWidget {
|
||||
}
|
||||
|
||||
_buildPlan(BuildContext context, PlanLoadedState state) {
|
||||
print(state.plan);
|
||||
mediaQueryData = MediaQuery.of(context);
|
||||
return SafeArea(
|
||||
child: Scaffold(
|
||||
@@ -108,9 +107,9 @@ class PlanScreen extends StatelessWidget {
|
||||
child: Text('Редактировать'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
// Действие для удаления
|
||||
},
|
||||
onPressed: () => context
|
||||
.read<PlanBloc>()
|
||||
.add(DeleteEntry(state.plan?['id'])),
|
||||
child: Text('Удалить'),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -29,7 +29,7 @@ class RecipeSelectScreen extends StatelessWidget {
|
||||
);
|
||||
} else if (state is RecipeSelectLoadedState) {
|
||||
// Данные загружены, можно строить экран.
|
||||
return _buildSetingsScreen(context, state);
|
||||
return _buildRecipeScreen(context, state);
|
||||
} else {
|
||||
// Другие состояния, если они есть.
|
||||
return Container(); // Пустой контейнер для необработанных состояний.
|
||||
@@ -38,7 +38,7 @@ class RecipeSelectScreen extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
_buildSetingsScreen(BuildContext context, RecipeSelectLoadedState state) {
|
||||
_buildRecipeScreen(BuildContext context, RecipeSelectLoadedState state) {
|
||||
mediaQueryData = MediaQuery.of(context);
|
||||
return SafeArea(
|
||||
child: Scaffold(
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||
@@ -13,6 +15,7 @@ part 'recipe_show_state.dart';
|
||||
class RecipeBloc extends Bloc<RecipeEvent, RecipeState> {
|
||||
RecipeBloc(RecipeState initialState) : super(initialState) {
|
||||
on<RecipeInitialEvent>(_onInitialize);
|
||||
on<DeleteEntry>(_deleteEntry);
|
||||
}
|
||||
|
||||
_onInitialize(
|
||||
@@ -44,7 +47,6 @@ class RecipeBloc extends Bloc<RecipeEvent, RecipeState> {
|
||||
recipe: currentState.recipe));
|
||||
} else {
|
||||
emit(RecipeLoadedState(recipe: data));
|
||||
print(data);
|
||||
}
|
||||
} else {
|
||||
// Один или несколько ключевых полей отсутствуют, обрабатываем ошибку
|
||||
@@ -59,4 +61,28 @@ class RecipeBloc extends Bloc<RecipeEvent, RecipeState> {
|
||||
emit(RecipeErrorState('Ошибка при получении данных о чатах: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> _deleteEntry(
|
||||
DeleteEntry event, Emitter<RecipeState> emit) async {
|
||||
final box = await Hive.openBox('token');
|
||||
final token = box.get('token');
|
||||
if (token == null) {
|
||||
NavigatorService.popAndPushNamed(
|
||||
AppRoutes.authScreen,
|
||||
);
|
||||
}
|
||||
final int id = event.id;
|
||||
final response = await http.post(
|
||||
Uri.parse(dotenv.env['SERVER_ROOT']! + '/recipe/delete/$id'),
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
},
|
||||
);
|
||||
if (response.statusCode == 200) {
|
||||
NavigatorService.pushNamed(AppRoutes.recipeSelectScreen);
|
||||
} else {
|
||||
// Статус ответа не равен 200, обрабатываем ошибку
|
||||
emit(RecipeErrorState('Ошибка: ${response.statusCode}'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,3 +14,10 @@ class RecipeInitialEvent extends RecipeEvent {
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class DeleteEntry extends RecipeEvent {
|
||||
DeleteEntry(this.id);
|
||||
final int id;
|
||||
@override
|
||||
List<Object?> get props => [id];
|
||||
}
|
||||
|
||||
@@ -44,7 +44,6 @@ class RecipeScreen extends StatelessWidget {
|
||||
}
|
||||
|
||||
_buildRecipe(BuildContext context, RecipeLoadedState state) {
|
||||
print(state.recipe);
|
||||
mediaQueryData = MediaQuery.of(context);
|
||||
return SafeArea(
|
||||
child: Scaffold(
|
||||
@@ -108,9 +107,9 @@ class RecipeScreen extends StatelessWidget {
|
||||
child: Text('Редактировать'),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
// Действие для удаления
|
||||
},
|
||||
onPressed: () => context
|
||||
.read<RecipeBloc>()
|
||||
.add(DeleteEntry(state.recipe?['id'])),
|
||||
child: Text('Удалить'),
|
||||
),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user