diff --git a/lib/presentation/feed/blog_post_edit_screen/bloc/blog_post_edit_bloc.dart b/lib/presentation/feed/blog_post_edit_screen/bloc/blog_post_edit_bloc.dart index 8928b58b..f3b193e4 100644 --- a/lib/presentation/feed/blog_post_edit_screen/bloc/blog_post_edit_bloc.dart +++ b/lib/presentation/feed/blog_post_edit_screen/bloc/blog_post_edit_bloc.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; @@ -13,6 +15,7 @@ part 'blog_post_edit_state.dart'; class BlogPostEditBloc extends Bloc { BlogPostEditBloc(BlogPostEditState initialState) : super(initialState) { on(_onInitialize); + on(_editBlogPost); } _onInitialize( @@ -41,10 +44,16 @@ class BlogPostEditBloc extends Bloc { var currentState = state as BlogPostEditLoadedState; emit(currentState.copyWith( blog_postModelObj: currentState.blog_postModelObj, - blog_post: currentState.blog_post)); + blog_post: currentState.blog_post, + title: currentState.title, + description: currentState.description, + youtube_url: currentState.youtube_url)); } else { - emit(BlogPostEditLoadedState(blog_post: data)); - print(data); + emit(BlogPostEditLoadedState( + blog_post: data, + title: TextEditingController(text: data['title']), + description: TextEditingController(text: data['description']), + youtube_url: TextEditingController(text: data['youtube_url']))); } } else { // Один или несколько ключевых полей отсутствуют, обрабатываем ошибку @@ -60,4 +69,54 @@ class BlogPostEditBloc extends Bloc { emit(BlogPostEditErrorState('Ошибка при получении данных о чатах: $e')); } } + + FutureOr _editBlogPost( + EditBlogPost event, Emitter emit) async { + if (state is BlogPostEditLoadedState) { + var currentState = state as BlogPostEditLoadedState; + + var response = await sendBlogPost( + currentState.blog_post, + currentState.title?.text, + currentState.youtube_url?.text, + currentState.description?.text, + ); + + if (response.statusCode == 200) { + NavigatorService.pushNamed(AppRoutes.blogPostScreen, + arguments: currentState.blog_post?['id'].toString()); + } else { + print( + 'Failed to edit blog post. Status Code: ${response.statusCode} ${response.body}'); + } + } + } + + FutureOr sendBlogPost( + Map? blog_post, + String? title, + String? youtube_url, + String? description, + ) async { + int id = blog_post?['id']; + String url = '${dotenv.env['SERVER_ROOT']!}/feed/update/$id'; + + final Map credentials = { + 'id': id, + 'title': title, + 'description': description, + 'youtube_url': youtube_url, + }; + + var response = await http.post( + Uri.parse(url), + headers: { + 'Content-Type': 'application/json', + }, + body: json.encode(credentials), + encoding: utf8, + ); + + return response; + } } diff --git a/lib/presentation/feed/blog_post_edit_screen/bloc/blog_post_edit_event.dart b/lib/presentation/feed/blog_post_edit_screen/bloc/blog_post_edit_event.dart index debaa1d4..c8961556 100644 --- a/lib/presentation/feed/blog_post_edit_screen/bloc/blog_post_edit_event.dart +++ b/lib/presentation/feed/blog_post_edit_screen/bloc/blog_post_edit_event.dart @@ -14,3 +14,8 @@ class BlogPostEditInitialEvent extends BlogPostEditEvent { @override List get props => []; } + +class EditBlogPost extends BlogPostEditEvent { + @override + List get props => []; +} diff --git a/lib/presentation/feed/blog_post_edit_screen/blog_post_edit_screen.dart b/lib/presentation/feed/blog_post_edit_screen/blog_post_edit_screen.dart index 9a452d31..1bba76d6 100644 --- a/lib/presentation/feed/blog_post_edit_screen/blog_post_edit_screen.dart +++ b/lib/presentation/feed/blog_post_edit_screen/blog_post_edit_screen.dart @@ -41,7 +41,6 @@ class BlogPostEditScreen extends StatelessWidget { } _buildBlogPostEdit(BuildContext context, BlogPostEditLoadedState state) { - print(state.blog_post); mediaQueryData = MediaQuery.of(context); return SafeArea( child: Scaffold( @@ -90,29 +89,22 @@ class BlogPostEditScreen extends StatelessWidget { TextFormField( controller: state.title, decoration: InputDecoration(labelText: 'Заголовок'), - initialValue: state - .blog_post?['title'], // Если есть начальное значение ), SizedBox(height: 16.0), TextFormField( controller: state.description, decoration: InputDecoration(labelText: 'Описание'), - initialValue: state.blog_post?[ - 'description'], // Если есть начальное значение ), SizedBox(height: 16.0), TextFormField( controller: state.youtube_url, decoration: InputDecoration(labelText: 'Ссылка'), - initialValue: state.blog_post?[ - 'youtube_url'], // Если есть начальное значение ), SizedBox(height: 16.0), // Здесь нужно добавить виджет для загрузки картинки ElevatedButton( - onPressed: () { - // Действия по сохранению записи в блоге - }, + onPressed: () => + context.read().add(EditBlogPost()), child: Text('Сохранить'), ) ]), diff --git a/lib/presentation/feed/blog_post_screen/bloc/blog_post_bloc.dart b/lib/presentation/feed/blog_post_screen/bloc/blog_post_bloc.dart index 6744b873..621beb1c 100644 --- a/lib/presentation/feed/blog_post_screen/bloc/blog_post_bloc.dart +++ b/lib/presentation/feed/blog_post_screen/bloc/blog_post_bloc.dart @@ -44,7 +44,6 @@ class BlogPostBloc extends Bloc { blog_post: currentState.blog_post)); } else { emit(BlogPostLoadedState(blog_post: data)); - print(data); } } else { // Один или несколько ключевых полей отсутствуют, обрабатываем ошибку diff --git a/lib/presentation/feed/blog_post_screen/blog_post_screen.dart b/lib/presentation/feed/blog_post_screen/blog_post_screen.dart index 357ba232..58672875 100644 --- a/lib/presentation/feed/blog_post_screen/blog_post_screen.dart +++ b/lib/presentation/feed/blog_post_screen/blog_post_screen.dart @@ -46,7 +46,6 @@ class BlogPostScreen extends StatelessWidget { } _buildBlogPost(BuildContext context, BlogPostLoadedState state) { - print(state.blog_post); mediaQueryData = MediaQuery.of(context); return SafeArea( child: Scaffold(