feat(feed): edit and delete posts

This commit is contained in:
Alex
2024-12-02 14:50:11 +03:00
parent 61ede95609
commit 2b3ecf0bf5
14 changed files with 257 additions and 29 deletions

View File

@@ -1,24 +1,25 @@
import 'dart:async';
import 'dart:io';
import 'package:eatvio_app/core/const.dart';
import 'package:eatvio_app/core/theme/app_decoration.dart';
import 'package:eatvio_app/features/blog_post_create/bloc/blog_post_create_cubit/blog_post_create_cubit.dart';
import 'package:eatvio_app/features/blog_post_create/bloc/blog_post_create_cubit/blog_post_create_state.dart';
import 'package:eatvio_app/core/locator_service.dart';
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/custom_text_form_field.dart';
import 'package:eatvio_app/features/feed/models/feed_blog_post_model.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/feed_cubit/feed_cubit.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'package:go_router/go_router.dart';
import 'package:image_picker/image_picker.dart';
class BlogPostCreateScreen extends StatefulWidget {
final FeedCubit? feedCubit;
final FeedBlogPostModel? feedBlogPostModel;
const BlogPostCreateScreen({
required this.feedCubit,
this.feedBlogPostModel,
}) : super();
@override
@@ -44,6 +45,11 @@ class _BlogPostCreateScreenState extends State<BlogPostCreateScreen> {
shrinkImage = visible;
});
});
if (widget.feedBlogPostModel != null) {
titleController.text = widget.feedBlogPostModel!.title;
descriptionController.text = widget.feedBlogPostModel!.description;
videoUrlController.text = widget.feedBlogPostModel!.videoUrl;
}
}
@override
@@ -58,7 +64,8 @@ class _BlogPostCreateScreenState extends State<BlogPostCreateScreen> {
child: BlocListener<BlogPostCreateCubit, BlogPostCreateState>(
listener: (BuildContext context, BlogPostCreateState state) {
if (state is BlogPostCreateStateLoaded) {
GoRouter.of(context).pop();
context.read<FeedCubit>().loadFeedBlogPostList();
Navigator.of(context).pop();
}
},
child: _buildBlogPostCreate(),
@@ -141,13 +148,23 @@ class _BlogPostCreateScreenState extends State<BlogPostCreateScreen> {
setState(() {
isLoading = true;
});
await blogPostCubit.createBlogPost(
title: titleController.text,
description: descriptionController.text,
videoUrl: videoUrlController.text,
image: image,
);
widget.feedCubit?.loadFeedBlogPostList();
if (widget.feedBlogPostModel != null) {
await blogPostCubit.updateBlogPost(
id: widget.feedBlogPostModel!.id,
title: titleController.text,
description: descriptionController.text,
videoUrl: videoUrlController.text,
image: image,
oldImageUrl: widget.feedBlogPostModel!.image,
);
} else {
await blogPostCubit.createBlogPost(
title: titleController.text,
description: descriptionController.text,
videoUrl: videoUrlController.text,
image: image,
);
}
},
),
),
@@ -175,9 +192,9 @@ class _BlogPostCreateScreenState extends State<BlogPostCreateScreen> {
if (videoUrlController.text.isEmpty) SizedBox(height: 8),
if (videoUrlController.text.isEmpty) _buildAddPhoto(),
SizedBox(height: 16),
if (image == null) Text('Ссылка на видео'),
if (image == null) SizedBox(height: 8),
if (image == null)
if (image == null && widget.feedBlogPostModel?.image == null) Text('Ссылка на видео'),
if (image == null && widget.feedBlogPostModel?.image == null) SizedBox(height: 8),
if (image == null && widget.feedBlogPostModel?.image == null)
CustomTextFormField(
controller: videoUrlController,
),
@@ -195,7 +212,7 @@ class _BlogPostCreateScreenState extends State<BlogPostCreateScreen> {
},
child: Stack(
children: [
if (image == null)
if (image == null && widget.feedBlogPostModel?.image == null)
AnimatedContainer(
height: shrinkImage ? 52 : 128,
curve: Curves.easeIn,
@@ -233,6 +250,16 @@ class _BlogPostCreateScreenState extends State<BlogPostCreateScreen> {
),
),
),
if (widget.feedBlogPostModel?.image != null && image == null)
Container(
width: shrinkImage ? 52 : MediaQuery.of(context).size.width - 32,
child: ClipRRect(
borderRadius: BorderRadius.circular(16),
child: Image(
image: NetworkImage(baseUrl + '/storage/' + widget.feedBlogPostModel!.image),
),
),
),
],
),
);