forked from eatvio/eatvio_app
feat(feed): Author fetch API connect
This commit is contained in:
@@ -44,9 +44,13 @@ class BlogPostBloc extends Bloc<BlogPostEvent, BlogPostState> {
|
||||
var currentState = state as BlogPostLoadedState;
|
||||
emit(currentState.copyWith(
|
||||
blog_postModelObj: currentState.blog_postModelObj,
|
||||
blog_post: currentState.blog_post));
|
||||
blog_post: currentState.blog_post,
|
||||
author: currentState.author,
|
||||
comments: currentState.comments));
|
||||
} else {
|
||||
emit(BlogPostLoadedState(blog_post: data));
|
||||
Future<Map<String, dynamic>> author = _fetchAuthor(data['id']);
|
||||
emit(BlogPostLoadedState(blog_post: data, author: author));
|
||||
}
|
||||
} else {
|
||||
// Один или несколько ключевых полей отсутствуют, обрабатываем ошибку
|
||||
@@ -85,4 +89,57 @@ class BlogPostBloc extends Bloc<BlogPostEvent, BlogPostState> {
|
||||
emit(BlogPostErrorState('Ошибка: ${response.statusCode}'));
|
||||
}
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> _fetchAuthor(int id) async {
|
||||
final box = await Hive.openBox('token');
|
||||
final token = box.get('token');
|
||||
|
||||
if (token == null) {
|
||||
NavigatorService.popAndPushNamed(
|
||||
AppRoutes.authScreen,
|
||||
);
|
||||
}
|
||||
|
||||
final response = await http.post(
|
||||
Uri.parse(dotenv.env['SERVER_ROOT']! + '/feed/getAuthor/$id'),
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
},
|
||||
);
|
||||
|
||||
final data = jsonDecode(response.body);
|
||||
return data;
|
||||
}
|
||||
|
||||
FutureOr<void> _fetchComments(int id) async {
|
||||
final box = await Hive.openBox('token');
|
||||
final token = box.get('token');
|
||||
if (token == null) {
|
||||
NavigatorService.popAndPushNamed(
|
||||
AppRoutes.authScreen,
|
||||
);
|
||||
}
|
||||
final response = await http.post(
|
||||
Uri.parse(dotenv.env['SERVER_ROOT']! + '/feed/getComments/$id'),
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
},
|
||||
);
|
||||
if (response.statusCode == 200) {
|
||||
final data = jsonDecode(response.body);
|
||||
if (data is List<Map<String, dynamic>>) {
|
||||
print(data);
|
||||
var currentState = state as BlogPostLoadedState;
|
||||
emit(currentState.copyWith(
|
||||
blog_postModelObj: currentState.blog_postModelObj,
|
||||
blog_post: currentState.blog_post,
|
||||
author: currentState.author,
|
||||
comments: currentState.comments));
|
||||
} else {
|
||||
emit(BlogPostErrorState('Неверный формат комментариев'));
|
||||
}
|
||||
} else {
|
||||
emit(BlogPostErrorState('Ошибка сервера: ${response.statusCode}'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,3 +21,17 @@ class DeleteEntry extends BlogPostEvent {
|
||||
@override
|
||||
List<Object?> get props => [id];
|
||||
}
|
||||
|
||||
class FetchAuthor extends BlogPostEvent {
|
||||
FetchAuthor(this.id);
|
||||
final int id;
|
||||
@override
|
||||
List<Object?> get props => [id];
|
||||
}
|
||||
|
||||
class FetchComments extends BlogPostEvent {
|
||||
FetchComments(this.id);
|
||||
final int id;
|
||||
@override
|
||||
List<Object?> get props => [id];
|
||||
}
|
||||
|
||||
@@ -22,18 +22,25 @@ class BlogPostState extends Equatable {
|
||||
}
|
||||
|
||||
class BlogPostLoadedState extends BlogPostState {
|
||||
BlogPostLoadedState({this.blog_postModelObj, this.blog_post});
|
||||
BlogPostLoadedState(
|
||||
{this.blog_postModelObj, this.blog_post, this.author, this.comments});
|
||||
|
||||
BlogPostModel? blog_postModelObj;
|
||||
Map<String, dynamic>? blog_post;
|
||||
Map<String, dynamic>? author;
|
||||
List<Map<String, dynamic>?>? comments;
|
||||
@override
|
||||
List<Object?> get props => [blog_postModelObj, blog_post];
|
||||
List<Object?> get props => [blog_postModelObj, blog_post, author, comments];
|
||||
BlogPostLoadedState copyWith(
|
||||
{BlogPostModel? blog_postModelObj, Map<String, dynamic>? blog_post}) {
|
||||
{BlogPostModel? blog_postModelObj,
|
||||
Map<String, dynamic>? blog_post,
|
||||
Map<String, dynamic>? author,
|
||||
List<Map<String, dynamic>?>? comments}) {
|
||||
return BlogPostLoadedState(
|
||||
blog_postModelObj: blog_postModelObj ?? this.blog_postModelObj,
|
||||
blog_post: blog_post ?? this.blog_post,
|
||||
);
|
||||
blog_postModelObj: blog_postModelObj ?? this.blog_postModelObj,
|
||||
blog_post: blog_post ?? this.blog_post,
|
||||
author: author ?? this.author,
|
||||
comments: comments ?? this.comments);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user