feature(blogPosts): add image load, fix blog post view

This commit is contained in:
mso7nueh
2024-07-17 17:04:00 +03:00
parent 863bd3132c
commit a94e2b9db4
8 changed files with 29 additions and 25 deletions

View File

@@ -8,6 +8,6 @@ part 'blog_post_service.g.dart';
abstract class BlogPostService {
factory BlogPostService(Dio dio, {String baseUrl}) = _BlogPostService;
@GET('/api/feed/show/{id}')
@GET('/api/blogPosts/show/{id}')
Future<BlogPostModel> getBlogPost(@Path() String id);
}

View File

@@ -32,7 +32,7 @@ class _BlogPostService implements BlogPostService {
)
.compose(
_dio.options,
'/api/feed/show/${id}',
'/api/blogPosts/show/${id}',
queryParameters: queryParameters,
data: _data,
)

View File

@@ -44,7 +44,6 @@ class BlogPostCreateScreen extends StatelessWidget {
}
_buildBlogPostCreate(BuildContext context, BlogPostCreateLoadedState state) {
print(state.image);
return Scaffold(
resizeToAvoidBottomInset: false,
body: Container(

View File

@@ -8,7 +8,6 @@ class FeedCubit extends Cubit<FeedState> {
FeedCubit({required this.feedRepository}) : super(const FeedState.loading());
loadFeedBlogPostList() async {
emit(const FeedState.loading());
try {
final feedBlogPostList = await feedRepository.getFeedBlogPostList();
emit(FeedState.loaded(feedBlogPostList: feedBlogPostList));

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,30 @@ 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}',
'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,
};
'videoUrl': youtubeURL,
'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 +101,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

@@ -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

@@ -8,7 +8,7 @@ class CustomTextFormField extends StatelessWidget {
this.width,
this.controller,
this.focusNode,
this.autofocus = true,
this.autofocus = false,
this.textStyle,
this.obscureText = false,
this.textInputAction = TextInputAction.next,