feat(feed): Fetching author and comments for blog posts

This commit is contained in:
2024-05-15 14:49:19 +03:00
parent 6cdd0ac2a6
commit fc8301bbe1
2 changed files with 16 additions and 24 deletions

View File

@@ -49,8 +49,11 @@ class BlogPostBloc extends Bloc<BlogPostEvent, BlogPostState> {
comments: currentState.comments));
} else {
emit(BlogPostLoadedState(blog_post: data));
Future<Map<String, dynamic>> author = _fetchAuthor(data['id']);
final author = await _fetchAuthor(data['id']);
emit(BlogPostLoadedState(blog_post: data, author: author));
final comments = [await _fetchComments(data['id'])];
emit(BlogPostLoadedState(
blog_post: data, author: author, comments: comments));
}
} else {
// Один или несколько ключевых полей отсутствуют, обрабатываем ошибку
@@ -90,7 +93,7 @@ class BlogPostBloc extends Bloc<BlogPostEvent, BlogPostState> {
}
}
Future<Map<String, dynamic>> _fetchAuthor(int id) async {
_fetchAuthor(int id) async {
final box = await Hive.openBox('token');
final token = box.get('token');
@@ -100,18 +103,19 @@ class BlogPostBloc extends Bloc<BlogPostEvent, BlogPostState> {
);
}
final response = await http.post(
final response = await http.get(
Uri.parse(dotenv.env['SERVER_ROOT']! + '/feed/getAuthor/$id'),
headers: {
'Authorization': 'Bearer $token',
},
);
print(response.body);
final data = jsonDecode(response.body);
print(data);
return data;
}
FutureOr<void> _fetchComments(int id) async {
_fetchComments(int id) async {
final box = await Hive.openBox('token');
final token = box.get('token');
if (token == null) {
@@ -119,27 +123,15 @@ class BlogPostBloc extends Bloc<BlogPostEvent, BlogPostState> {
AppRoutes.authScreen,
);
}
final response = await http.post(
final response = await http.get(
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}'));
}
print(response.body);
final data = jsonDecode(response.body);
print(data);
return data;
}
}

View File

@@ -28,14 +28,14 @@ class BlogPostLoadedState extends BlogPostState {
BlogPostModel? blog_postModelObj;
Map<String, dynamic>? blog_post;
Map<String, dynamic>? author;
List<Map<String, dynamic>?>? comments;
List<dynamic>? comments;
@override
List<Object?> get props => [blog_postModelObj, blog_post, author, comments];
BlogPostLoadedState copyWith(
{BlogPostModel? blog_postModelObj,
Map<String, dynamic>? blog_post,
Map<String, dynamic>? author,
List<Map<String, dynamic>?>? comments}) {
List<dynamic>? comments}) {
return BlogPostLoadedState(
blog_postModelObj: blog_postModelObj ?? this.blog_postModelObj,
blog_post: blog_post ?? this.blog_post,