diff --git a/lib/features/feed/models/comment_model.dart b/lib/features/feed/models/comment_model.dart index 1fbcb145..258bbd17 100644 --- a/lib/features/feed/models/comment_model.dart +++ b/lib/features/feed/models/comment_model.dart @@ -20,6 +20,7 @@ class Comment with _$Comment { const factory Comment({ @JsonKey(name: "id") required int id, @JsonKey(name: "author_name") required String authorName, + @JsonKey(name: "author_slug") required String authorSlug, @JsonKey(name: "author_profile_icon") required String authorProfileIcon, @JsonKey(name: "body") required String body, @JsonKey(name: "children_comments") required List childrenComments, diff --git a/lib/features/feed/presentation/widgets/comments_widget.dart b/lib/features/feed/presentation/widgets/comments_widget.dart index 338e4f5a..b12b691e 100644 --- a/lib/features/feed/presentation/widgets/comments_widget.dart +++ b/lib/features/feed/presentation/widgets/comments_widget.dart @@ -1,10 +1,15 @@ +import 'package:eatvio_app/core/locator_service.dart'; import 'package:eatvio_app/core/utils/date_time_utils.dart'; +import 'package:eatvio_app/features/bottom_navigation_bar/presentation/bloc/profile_avatar_cubit/profile_avatar_cubit.dart'; +import 'package:eatvio_app/features/bottom_navigation_bar/presentation/bloc/profile_avatar_cubit/profile_avatar_state.dart'; import 'package:eatvio_app/features/feed/models/comment_model.dart'; +import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart'; import 'package:eatvio_app/features/feed/presentation/bloc/comments_cubit/comments_cubit.dart'; import 'package:eatvio_app/generated/l10n.dart'; import 'package:eatvio_app/core/theme/theme_helper.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:go_router/go_router.dart'; enum CommentSourceType { blogPost, recipe, diet, plan } @@ -59,10 +64,23 @@ class _CommentsWidgetState extends State { child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - CircleAvatar( - foregroundImage: NetworkImage(comment.authorProfileIcon), - backgroundImage: const AssetImage('assets/images/no_avatar.png'), - radius: radius, + GestureDetector( + onTap: () { + GoRouter.of(context).pushNamed( + 'profileScreen', + extra: Author( + authorSlug: comment.authorSlug, + authorName: comment.authorName, + authorProfileIcon: comment.authorProfileIcon, + authorIsMe: (sl().state as ProfileAvatarStateLoaded).profile.slug == comment.authorSlug ? true : false, + ), + ); + }, + child: CircleAvatar( + foregroundImage: NetworkImage(comment.authorProfileIcon), + backgroundImage: const AssetImage('assets/images/no_avatar.png'), + radius: radius, + ), ), const SizedBox(width: 8), Column( diff --git a/lib/features/feed/presentation/widgets/consultant_widget.dart b/lib/features/feed/presentation/widgets/consultant_widget.dart index 061bc0db..5246d348 100644 --- a/lib/features/feed/presentation/widgets/consultant_widget.dart +++ b/lib/features/feed/presentation/widgets/consultant_widget.dart @@ -1,6 +1,9 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:eatvio_app/core/const.dart'; +import 'package:eatvio_app/core/locator_service.dart'; import 'package:eatvio_app/core/theme/theme_helper.dart'; +import 'package:eatvio_app/features/bottom_navigation_bar/presentation/bloc/profile_avatar_cubit/profile_avatar_cubit.dart'; +import 'package:eatvio_app/features/bottom_navigation_bar/presentation/bloc/profile_avatar_cubit/profile_avatar_state.dart'; import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart'; import 'package:eatvio_app/features/feed/models/feed_consultant_model.dart'; import 'package:eatvio_app/features/profile/models/badge_model.dart'; @@ -26,7 +29,7 @@ class ConsultantWidget extends StatelessWidget { authorSlug: consultant.slug, authorName: consultant.name, authorProfileIcon: consultant.photo, - authorIsMe: false, + authorIsMe: (sl().state as ProfileAvatarStateLoaded).profile.slug == consultant.slug ? true : false, ), ); }, diff --git a/lib/features/profile/presentation/pages/profile_screen.dart b/lib/features/profile/presentation/pages/profile_screen.dart index e127d68c..df96f608 100644 --- a/lib/features/profile/presentation/pages/profile_screen.dart +++ b/lib/features/profile/presentation/pages/profile_screen.dart @@ -66,7 +66,7 @@ class _ProfileScreenState extends State { @override void initState() { super.initState(); - widget.author == null ? profileCubit.getMyProfile() : profileCubit.getProfileBySlug(widget.author!.authorSlug); + widget.author == null || widget.author!.authorIsMe ? profileCubit.getMyProfile() : profileCubit.getProfileBySlug(widget.author!.authorSlug); } @override @@ -89,11 +89,11 @@ class _ProfileScreenState extends State { } isFirstFetch = false; } - return widget.author == null ? _myProfileScreen(state) : _profileScreen(state); + return widget.author == null || widget.author!.authorIsMe ? _myProfileScreen(state) : _profileScreen(state); } else if (state is ProfileStateError) { return DataErrorWidget( onReload: () async { - widget.author == null ? await profileCubit.getMyProfile() : await profileCubit.getProfileBySlug(widget.author!.authorSlug); + widget.author == null || widget.author!.authorIsMe ? await profileCubit.getMyProfile() : await profileCubit.getProfileBySlug(widget.author!.authorSlug); }, ); } else { @@ -393,7 +393,7 @@ class _ProfileScreenState extends State { ), ), Text( - widget.author == null ? 'Редактировать' : '', + widget.author == null || widget.author!.authorIsMe ? 'Редактировать' : '', style: const TextStyle( color: Color(0xFF2F80ED), fontSize: 16, @@ -478,7 +478,7 @@ class _ProfileScreenState extends State { ), ), Text( - widget.author == null ? 'Редактировать' : '', + widget.author == null || widget.author!.authorIsMe ? 'Редактировать' : '', style: const TextStyle( color: Color(0xFF2F80ED), fontSize: 16, @@ -955,12 +955,12 @@ class _ProfileScreenState extends State { value: 'view', child: Text('Посмотреть'), ), - if (widget.author == null) + if (widget.author == null || widget.author!.authorIsMe) const PopupMenuItem( value: 'replace', child: Text('Заменить'), ), - if (widget.author == null) + if (widget.author == null || widget.author!.authorIsMe) const PopupMenuItem( value: 'delete', child: Text('Удалить'),