Merge remote-tracking branch 'refs/remotes/origin/feature_blogPosts'

# Conflicts:
#	lib/app_router.dart
#	lib/features/blog_post_create/presentation/pages/blog_post_create_screen.dart
#	pubspec.yaml
This commit is contained in:
mso7nueh
2024-07-31 13:34:47 +03:00
33 changed files with 940 additions and 202 deletions

View File

@@ -1,6 +1,4 @@
import 'dart:async';
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:eatvio_app/app_router.dart';
import 'package:eatvio_app/locator_service.dart';
@@ -14,6 +12,7 @@ import 'package:image_picker/image_picker.dart';
import '/core/app_export.dart';
part 'blog_post_create_event.dart';
part 'blog_post_create_state.dart';
/// A bloc that manages the state of a BlogPostCreate according to the event that is dispatched to it.
@@ -70,30 +69,28 @@ class BlogPostCreateBloc extends Bloc<BlogPostCreateEvent, BlogPostCreateState>
currentState.image,
);
if (response.statusCode == 200) {
if (response.statusCode == 200 || response.statusCode == 201) {
AppRouter.navigatorKey.currentContext?.goNamed('feedScreen');
} else {
print(
'Failed to create blog post. Status Code: ${response.statusCode} ${response.body}',
);
print('Failed to create blog post. Status Code: ${response.statusCode} ${response.data}');
}
}
}
sendBlogPost(String? title, String? youtubeURL, String? description, XFile? image) async {
String url = '/blog_post/create';
Future<Response> sendBlogPost(String? title, String? youtubeURL, String? description, XFile? image) async {
String url = baseUrl + '/api/blogPosts/create';
final Map<String, dynamic> credentials = {
FormData formData = FormData.fromMap({
'title': title,
'description': description,
'youtube_url': youtubeURL,
'status': 'active',
'image': image,
};
'state': 'active',
'image': await MultipartFile.fromFile(image!.path, filename: image.name),
});
var response = await sl<Dio>().post(
final response = await sl<Dio>().post(
url,
data: json.encode(credentials),
data: formData,
);
return response;
@@ -102,11 +99,7 @@ class BlogPostCreateBloc extends Bloc<BlogPostCreateEvent, BlogPostCreateState>
FutureOr<void> _uploadImages(UploadImages event, Emitter<BlogPostCreateState> emit) {
if (state is BlogPostCreateLoadedState) {
var currentState = state as BlogPostCreateLoadedState;
emit(
currentState.copyWith(
image: event.image,
),
);
emit(currentState.copyWith(image: event.image));
}
}
}

View File

@@ -22,7 +22,9 @@ class CreateBlogPost extends BlogPostCreateEvent {
class UploadImages extends BlogPostCreateEvent {
UploadImages(this.image);
final XFile image;
@override
List<Object> get props => [image];
}

View File

@@ -14,6 +14,7 @@ class BlogPostCreateState extends Equatable {
@override
List<Object?> get props => [blog_postModelObj];
BlogPostCreateState copyWith({BlogPostCreateModel? blog_postModelObj}) {
return BlogPostCreateState(
blog_postModelObj: blog_postModelObj ?? this.blog_postModelObj,
@@ -39,8 +40,18 @@ class BlogPostCreateLoadedState extends BlogPostCreateState {
String? token;
bool isLoading;
XFile? image;
@override
List<Object?> get props => [blog_postModelObj, title, description, youtubeURL];
List<Object?> get props => [
blog_postModelObj,
title,
description,
youtubeURL,
token,
image,
isLoading,
];
BlogPostCreateLoadedState copyWith({
BlogPostCreateModel? blog_postModelObj,
TextEditingController? title,

View File

@@ -33,7 +33,7 @@ class BlogPostEditBloc extends Bloc<BlogPostEditEvent, BlogPostEditState> {
}
final String? blog_postID = state.blog_postModelObj?.blog_postID;
final response = await http.get(
Uri.parse(baseUrl + '/api/feed/show/$blog_postID'),
Uri.parse(baseUrl + '/api/blogPosts/show/$blog_postID'),
headers: {
'Authorization': 'Bearer $token',
},

View File

@@ -139,7 +139,7 @@ class SubscribersScreen extends StatelessWidget {
flex: 1,
child: CustomOutlinedButton(
text: "+",
onPressed: () => GoRouter.of(context).goNamed('blogPostCreateScreen'),
onPressed: () => GoRouter.of(context).pushNamed('blogPostCreateScreen'),
buttonStyle: CustomButtonStyles.outlinePrimaryTL15,
),
),