feat(feed): Author fetch API connect

This commit is contained in:
2024-05-15 14:33:15 +03:00
parent 660d846b66
commit 6cdd0ac2a6
3 changed files with 85 additions and 7 deletions

View File

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

View File

@@ -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];
}

View File

@@ -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);
}
}