add likes

This commit is contained in:
mso7nueh
2024-08-19 17:41:09 +03:00
parent 026a11a6ca
commit 3761f25df4
12 changed files with 202 additions and 34 deletions

View File

@@ -4,8 +4,8 @@ import 'package:eatvio_app/features/feed/repositories/feed_repository.dart';
class FeedCubit extends Cubit<FeedState> {
final FeedRepository feedRepository;
int currentPage = 1;
final int lastPage = 7;
int _currentPage = 1;
final int _lastPage = 7;
bool isLoading = false;
FeedCubit({required this.feedRepository}) : super(const FeedState.loading());
@@ -27,9 +27,9 @@ class FeedCubit extends Cubit<FeedState> {
loadNextPage() async {
print('start');
try {
if (lastPage < currentPage) {
currentPage++;
final feedBlogPosts = await feedRepository.getFeedBlogPosts(page: currentPage);
if (_lastPage < _currentPage) {
_currentPage++;
final feedBlogPosts = await feedRepository.getFeedBlogPosts(page: _currentPage);
emit(
FeedState.loaded(
feedBlogPostList: [
@@ -47,4 +47,8 @@ class FeedCubit extends Cubit<FeedState> {
print('end');
}
}
likePost(int id) async => await feedRepository.likeBlogPost(id);
unlikedPost(int id) async => await feedRepository.unlikedBlogPost(id);
}

View File

@@ -3,6 +3,7 @@ import 'package:dismissible_page/dismissible_page.dart';
import 'package:eatvio_app/core/app_export.dart';
import 'package:eatvio_app/features/chat/presentation/pages/photo_view_screen.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/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:go_router/go_router.dart';
@@ -18,6 +19,16 @@ class BlogPostWidget extends StatefulWidget {
}
class _BlogPostWidgetState extends State<BlogPostWidget> {
late bool isLiked;
late int totalLikes;
@override
void initState() {
isLiked = widget.feedBlogPostModel.wasLikedByMe;
totalLikes = widget.feedBlogPostModel.totalLikes;
super.initState();
}
@override
Widget build(BuildContext context) {
return InkWell(
@@ -106,7 +117,23 @@ class _BlogPostWidgetState extends State<BlogPostWidget> {
padding: const EdgeInsets.symmetric(horizontal: 12),
child: Row(
children: [
_iconButton(icon: Icons.favorite_border_rounded, text: widget.feedBlogPostModel.totalLikes.toString()),
_iconButton(
icon: Icons.favorite_border_rounded,
text: totalLikes.toString(),
iconColor: isLiked ? Colors.red.withOpacity(0.8) : null,
backgroundColor: isLiked ? Colors.red.withOpacity(0.1) : null,
textColor: isLiked ? Colors.red.withOpacity(0.8) : null,
onTap: () async {
setState(() {
isLiked = !isLiked;
isLiked ? totalLikes++ : totalLikes--;
});
isLiked
? await context.read<FeedCubit>().likePost(widget.feedBlogPostModel.id)
: await context.read<FeedCubit>().unlikedPost(widget.feedBlogPostModel.id);
await context.read<FeedCubit>().loadFeedBlogPostList();
},
),
SizedBox(width: 8),
_iconButton(
icon: Icons.mode_comment_outlined,
@@ -150,14 +177,14 @@ class _BlogPostWidgetState extends State<BlogPostWidget> {
);
}
_iconButton({required IconData icon, String? text, Function()? onTap}) {
_iconButton({required IconData icon, String? text, Function()? onTap, Color? iconColor, Color? backgroundColor, Color? textColor}) {
return InkWell(
onTap: onTap ?? () {},
borderRadius: BorderRadius.circular(16),
child: Ink(
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 4),
decoration: BoxDecoration(
color: appTheme.gray100,
color: backgroundColor ?? appTheme.gray100,
borderRadius: BorderRadius.circular(16),
),
height: 32,
@@ -167,14 +194,14 @@ class _BlogPostWidgetState extends State<BlogPostWidget> {
Icon(
icon,
size: 20,
color: appTheme.gray600,
color: iconColor ?? appTheme.gray600,
),
if (text != null) SizedBox(width: 8),
if (text != null)
Text(
text,
style: TextStyle(
color: appTheme.gray600,
color: textColor ?? appTheme.gray600,
fontWeight: FontWeight.w500,
),
),