From 5f57bded512cc868e851b40ba28382a1170b82bb Mon Sep 17 00:00:00 2001 From: Username1548 Date: Wed, 25 Jun 2025 22:43:29 +0700 Subject: [PATCH] added deeplink for diets --- lib/core/app_router.dart | 14 +- .../presentation/cubit/about_diet_cubit.dart | 55 +++++-- .../presentation/cubit/about_diet_state.dart | 1 + .../presentation/pages/about_diet_screen.dart | 146 ++++++++++-------- .../diets/repositories/diet_repository.dart | 9 ++ lib/features/diets/services/diet_service.dart | 5 + .../presentation/widgets/diets_widget.dart | 4 +- .../presentation/widgets/my_diet_widget.dart | 2 +- 8 files changed, 150 insertions(+), 86 deletions(-) diff --git a/lib/core/app_router.dart b/lib/core/app_router.dart index 3dc4996a..0f76b78d 100644 --- a/lib/core/app_router.dart +++ b/lib/core/app_router.dart @@ -91,7 +91,7 @@ class AppRouter { case 'plan': return '/about-plan-screen?slug=$contentIdentifier'; case 'diet': - return '/diet?slug=$contentIdentifier'; + return '/about-diet-screen?slug=$contentIdentifier'; } } @@ -262,7 +262,7 @@ class AppRouter { index: null, ); } - + final data = state.extra as Map; return AboutPlanScreen(slug: data['slug'] as String, index: data['index'] as int?, navigateToComments: data['navigateToComments'] as bool); }, @@ -306,8 +306,16 @@ class AppRouter { path: '/about-diet-screen', name: 'aboutDietScreen', builder: (context, state) { + final slug = state.uri.queryParameters['slug']; + if (slug != null) { + return AboutDietScreen( + slug: slug, + index: null, + navigateToComments: false, + ); + } final data = state.extra as Map; - return AboutDietScreen(diet: data['diet'] as Diet, index: data['index'] as int?, navigateToComments: data['navigateToComments'] as bool); + return AboutDietScreen(slug: data['slug'] as String, index: data['index'] as int?, navigateToComments: data['navigateToComments'] as bool); }, ), GoRoute( diff --git a/lib/features/diets/presentation/cubit/about_diet_cubit.dart b/lib/features/diets/presentation/cubit/about_diet_cubit.dart index a257a0e9..9d02534e 100644 --- a/lib/features/diets/presentation/cubit/about_diet_cubit.dart +++ b/lib/features/diets/presentation/cubit/about_diet_cubit.dart @@ -6,6 +6,7 @@ import 'package:eatvio_app/core/utils/date_time_utils.dart'; import 'package:eatvio_app/core/utils/toasts.dart'; import 'package:eatvio_app/features/diets/repositories/diet_repository.dart'; import 'package:eatvio_app/features/diets/presentation/cubit/about_diet_state.dart'; +import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart'; import 'package:eatvio_app/features/profile/repositories/profile_repository.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -16,10 +17,11 @@ class AboutDietCubit extends Cubit { bool isCurrentDietStarted = false; bool hasStartedDiet = false; String? userStartedDietName; + List _selectedIndexes = []; - Future getDiet(int id, {int? index}) async { + Future getDiet(String slug, {int? index}) async { try { - final diet = await dietsRepository.getDiet(id); + final diet = await dietsRepository.getDietBySlug(slug); if (index != null) { dietsRepository.emitCommentsStateToFeed(CommentsState(index: index, totalComments: diet.totalComments)); } @@ -30,10 +32,10 @@ class AboutDietCubit extends Cubit { } } - Future initDietPage(int id) async { + Future initDietPage(String slug) async { try { emit(const AboutDietState.loading()); - final diet = await dietsRepository.getDiet(id); + final diet = await dietsRepository.getDietBySlug(slug); final chosenDiets = await profileRepository.getChosenDiets(); final lastChosenDiet = chosenDiets.firstOrNull; if (lastChosenDiet != null && ['inited', 'started'].contains(lastChosenDiet.state)) { @@ -47,7 +49,13 @@ class AboutDietCubit extends Cubit { } } } - emit(AboutDietState.loaded(diet: diet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); + _selectedIndexes = List.generate(diet.dailySchedule.length, (index) => 0); + emit(AboutDietState.loaded( + diet: diet, + isStarted: isCurrentDietStarted, + hasStartedDiet: hasStartedDiet, + selectedIndexes: _selectedIndexes, + )); } catch (e) { log(e.toString()); emit(AboutDietState.error(message: e.toString())); @@ -67,7 +75,7 @@ class AboutDietCubit extends Cubit { if (dietIndexInFeed != null) { dietsRepository.emitLikesStateToFeed(LikesState(wasLikedByMe: updatedDiet.wasLikedByMe, totalLikes: updatedDiet.totalLikes, index: dietIndexInFeed)); } - emit(AboutDietState.loaded(diet: updatedDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); + emit(AboutDietState.loaded(diet: updatedDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet, selectedIndexes: _selectedIndexes)); } else { final updatedDiet = currentDiet.copyWith( totalLikes: currentDiet.totalLikes + 1, @@ -76,7 +84,7 @@ class AboutDietCubit extends Cubit { if (dietIndexInFeed != null) { dietsRepository.emitLikesStateToFeed(LikesState(wasLikedByMe: updatedDiet.wasLikedByMe, totalLikes: updatedDiet.totalLikes, index: dietIndexInFeed)); } - emit(AboutDietState.loaded(diet: updatedDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); + emit(AboutDietState.loaded(diet: updatedDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet, selectedIndexes: _selectedIndexes)); } EasyDebounce.debounce( @@ -91,7 +99,7 @@ class AboutDietCubit extends Cubit { dietsRepository .emitLikesStateToFeed(LikesState(wasLikedByMe: currentDiet.wasLikedByMe, totalLikes: currentDiet.totalLikes, index: dietIndexInFeed)); } - emit(AboutDietState.loaded(diet: currentDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); + emit(AboutDietState.loaded(selectedIndexes: _selectedIndexes,diet: currentDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); } }, ); @@ -108,7 +116,7 @@ class AboutDietCubit extends Cubit { if (dietIndex != null) { dietsRepository.emitFavoriteStateToFeed(FavoriteState(isFavorite: updatedDiet.isFavorite, index: dietIndex)); } - emit(AboutDietState.loaded(diet: updatedDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); + emit(AboutDietState.loaded(selectedIndexes: _selectedIndexes,diet: updatedDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); EasyDebounce.debounce( 'add_or_remove_diet_to_favorites', @@ -122,7 +130,7 @@ class AboutDietCubit extends Cubit { if (dietIndex != null) { dietsRepository.emitFavoriteStateToFeed(FavoriteState(isFavorite: currentDiet.isFavorite, index: dietIndex)); } - emit(AboutDietState.loaded(diet: currentDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); + emit(AboutDietState.loaded(selectedIndexes: _selectedIndexes,diet: currentDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); } }, ); @@ -139,7 +147,7 @@ class AboutDietCubit extends Cubit { if (dietIndex != null) { dietsRepository.emitFavoriteStateToFeed(FavoriteState(isFavorite: updatedDiet.isFavorite, index: dietIndex)); } - emit(AboutDietState.loaded(diet: updatedDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); + emit(AboutDietState.loaded(selectedIndexes: _selectedIndexes,diet: updatedDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); EasyDebounce.debounce( 'add_or_remove_diet_to_favorites', @@ -153,7 +161,7 @@ class AboutDietCubit extends Cubit { if (dietIndex != null) { dietsRepository.emitFavoriteStateToFeed(FavoriteState(isFavorite: currentDiet.isFavorite, index: dietIndex)); } - emit(AboutDietState.loaded(diet: currentDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); + emit(AboutDietState.loaded(selectedIndexes: _selectedIndexes,diet: currentDiet, isStarted: isCurrentDietStarted, hasStartedDiet: hasStartedDiet)); } }, ); @@ -191,12 +199,31 @@ class AboutDietCubit extends Cubit { void clearStartedDietsState() { if (state is! DietStateLoaded) return; final diet = (state as DietStateLoaded).diet; - emit(AboutDietState.loaded(diet: diet)); + emit(AboutDietState.loaded(selectedIndexes: _selectedIndexes,diet: diet)); } void emitCurrentStartedDietsState() { if (state is! DietStateLoaded) return; final diet = (state as DietStateLoaded).diet; - emit(AboutDietState.loaded(diet: diet, isStarted: true)); + emit(AboutDietState.loaded(selectedIndexes: _selectedIndexes,diet: diet, isStarted: true)); + } + + Future getDietBySlug(String slug) async { + try { + return await dietsRepository.getDietBySlug(slug); + } catch (e) { + log(e.toString()); + } + return null; + } + + void setSelectedIndex({required int dayNumber, required int index}) { + final currentState = state; + if (currentState is DietStateLoaded) { + final updatedSelectedIndexes = [...currentState.selectedIndexes]; + updatedSelectedIndexes[dayNumber] = index; + _selectedIndexes = updatedSelectedIndexes; + emit(currentState.copyWith(selectedIndexes: _selectedIndexes)); + } } } diff --git a/lib/features/diets/presentation/cubit/about_diet_state.dart b/lib/features/diets/presentation/cubit/about_diet_state.dart index a861330c..63917801 100644 --- a/lib/features/diets/presentation/cubit/about_diet_state.dart +++ b/lib/features/diets/presentation/cubit/about_diet_state.dart @@ -11,6 +11,7 @@ abstract class AboutDietState with _$AboutDietState { const factory AboutDietState.loading() = DietStateLoading; const factory AboutDietState.loaded({ required Diet diet, + @Default([]) List selectedIndexes, @Default(false) bool isStarted, @Default(false) bool hasStartedDiet, }) = DietStateLoaded; diff --git a/lib/features/diets/presentation/pages/about_diet_screen.dart b/lib/features/diets/presentation/pages/about_diet_screen.dart index 2252324e..89fc1659 100644 --- a/lib/features/diets/presentation/pages/about_diet_screen.dart +++ b/lib/features/diets/presentation/pages/about_diet_screen.dart @@ -32,16 +32,14 @@ import 'package:eatvio_app/core/theme/theme_helper.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:go_router/go_router.dart'; class AboutDietScreen extends StatefulWidget { - final Diet diet; + final String slug; final int? index; final bool navigateToComments; - late final List selectedIndexes; - AboutDietScreen({super.key, required this.diet, required this.index, required this.navigateToComments}) { - selectedIndexes = List.generate(diet.dailySchedule.length, (_) => 0); - } + const AboutDietScreen({super.key, required this.index, required this.navigateToComments, required this.slug}); @override State createState() => _AboutDietScreenState(); @@ -55,11 +53,11 @@ class _AboutDietScreenState extends State { final textEditingController = TextEditingController(); bool isMoreOptionsVisible = false; bool _jumped = false; + bool _isFirstLaunch = true; @override void initState() { super.initState(); - context.read().viewDiet(widget.diet.id); scrollController.addListener(() { if (isMoreOptionsVisible) { setState(() { @@ -79,15 +77,11 @@ class _AboutDietScreenState extends State { @override Widget build(BuildContext context) { final s = S.of(context); + return BlocProvider( - create: (context) => dietsCubit..initDietPage(widget.diet.id), + create: (context) => dietsCubit..initDietPage(widget.slug), child: BlocProvider( - create: (BuildContext context) => commentsCubit - ..getComments( - widget.diet.id.toString(), - CommentSourceType.diet, - true, - ), + create: (BuildContext context) => commentsCubit, child: BlocConsumer( listener: (BuildContext context, CommentsState commentsState) { if (commentsState is CommentsStateLoaded) { @@ -100,6 +94,15 @@ class _AboutDietScreenState extends State { return BlocBuilder( builder: (context, dietState) { if (dietState is DietStateLoaded) { + if (_isFirstLaunch) { + context.read().viewDiet(dietState.diet.id); + context.read().getComments( + dietState.diet.id.toString(), + CommentSourceType.diet, + true, + ); + _isFirstLaunch = false; + } Future.delayed(const Duration(milliseconds: 500), () { if (widget.navigateToComments && !_jumped) { _scrollToBottom(); @@ -176,9 +179,9 @@ class _AboutDietScreenState extends State { isFavorite: dietState.diet.isFavorite, onTap: () { if (dietState.diet.isFavorite) { - dietsCubit.removeFromFavorite(widget.diet.id, widget.index); + dietsCubit.removeFromFavorite(dietState.diet.id, widget.index); } else { - dietsCubit.addToFavorite(widget.diet.id, widget.index); + dietsCubit.addToFavorite(dietState.diet.id, widget.index); } }, width: 52, @@ -269,7 +272,7 @@ class _AboutDietScreenState extends State { onTap: () { if (textEditingController.text.length > 2) { commentsCubit.sendComment( - id: widget.diet.id.toString(), + id: dietState.diet.id.toString(), commentText: textEditingController.text, parentCommentId: replyId, commentSourceType: CommentSourceType.diet, @@ -280,7 +283,7 @@ class _AboutDietScreenState extends State { replyId = null; }); Future.delayed(const Duration(milliseconds: 500), () { - dietsCubit.getDiet(widget.diet.id, index: widget.index); + dietsCubit.getDiet(dietState.diet.slug, index: widget.index); }); FocusManager.instance.primaryFocus?.unfocus(); } @@ -307,8 +310,17 @@ class _AboutDietScreenState extends State { ), appBar: AppBar( centerTitle: true, + leading: BackButton( + onPressed: () { + if (context.canPop()) { + GoRouter.of(context).pop(); + return; + } + GoRouter.of(context).go('/feed-screen'); + }, + ), title: Text( - widget.diet.name, + dietState.diet.name, maxLines: 2, textAlign: TextAlign.center, overflow: TextOverflow.ellipsis, @@ -317,11 +329,11 @@ class _AboutDietScreenState extends State { ), actions: [ CustomPopup( - isAuthor: widget.diet.author.authorIsMe, - path: 'diet/${widget.diet.slug}', + isAuthor: dietState.diet.author.authorIsMe, + path: 'diet/${dietState.diet.slug}', complainedContentType: ComplainedContent.diet, - id: widget.diet.id, - diet: widget.diet, + id: dietState.diet.id, + diet: dietState.diet, ), const SizedBox(width: 16), ], @@ -340,7 +352,7 @@ class _AboutDietScreenState extends State { Stack( children: [ CachedNetworkImage( - imageUrl: '$baseUrl/storage/${widget.diet.image}', + imageUrl: '$baseUrl/storage/${dietState.diet.image}', height: 300, width: MediaQuery.sizeOf(context).width, fit: BoxFit.fill, @@ -366,7 +378,7 @@ class _AboutDietScreenState extends State { const SizedBox(width: 12), GestureDetector( onTap: () { - dietsCubit.likeDiet(widget.diet.id, widget.index); + dietsCubit.likeDiet(dietState.diet.id, widget.index); }, child: InfoBouble( backgroundColor: appTheme.whiteA700, @@ -412,17 +424,17 @@ class _AboutDietScreenState extends State { ), const SizedBox(height: 12), InfoRow( - diet: widget.diet, + diet: dietState.diet, type: ProductType.diet, ), ExpandableText( - text: widget.diet.details, + text: dietState.diet.details, ), const SizedBox(height: 20), Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: AuthorCard( - author: widget.diet.author, + author: dietState.diet.author, title: s.diet_author, ), ), @@ -436,7 +448,7 @@ class _AboutDietScreenState extends State { padding: const EdgeInsets.symmetric(vertical: 16.0), child: Center( child: Text( - '${s.diet_plan}(${widget.diet.duration.toString()} ${getDayForm(widget.diet.duration, s)})', + '${s.diet_plan}(${dietState.diet.duration.toString()} ${getDayForm(dietState.diet.duration, s)})', style: TextStyles.headingXLSemibold.copyWith( color: appTheme.black, ), @@ -449,9 +461,15 @@ class _AboutDietScreenState extends State { physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, itemBuilder: (context, index) { - return _dayOfPlan(widget.diet.dailySchedule[index + 1] ?? {}, index, s); + return _dayOfPlan( + dietState.diet.dailySchedule[index + 1] ?? {}, + index, + s, + dietState.selectedIndexes, + dietState.diet, + ); }, - itemCount: widget.diet.dailySchedule.length, + itemCount: dietState.diet.dailySchedule.length, ), MainBackgroundBouble( padding: const EdgeInsets.symmetric(vertical: 16), @@ -471,7 +489,7 @@ class _AboutDietScreenState extends State { if (state is CommentsStateLoading) const Loader(), if (state is CommentsStateLoaded) CommentsWidget( - id: widget.diet.id.toString(), + id: dietState.diet.id.toString(), commentSourceType: CommentSourceType.diet, comment: state.comment, replyId: replyId, @@ -488,51 +506,49 @@ class _AboutDietScreenState extends State { return Scaffold( appBar: AppBar( centerTitle: true, + leading: BackButton( + onPressed: () { + if (context.canPop()) { + GoRouter.of(context).pop(); + return; + } + GoRouter.of(context).go('/feed-screen'); + }, + ), title: Text( - widget.diet.name, + '', maxLines: 2, textAlign: TextAlign.center, overflow: TextOverflow.ellipsis, softWrap: true, style: TextStyles.headingXLSemibold.copyWith(color: appTheme.black), ), - actions: [ - CustomPopup( - isAuthor: widget.diet.author.authorIsMe, - path: 'diet/${widget.diet.slug}', - complainedContentType: ComplainedContent.diet, - id: widget.diet.id, - diet: widget.diet, - ), - const SizedBox(width: 16), - ], ), body: DataErrorWidget( - onReload: () => context.read().getDiet(widget.diet.id, index: widget.index), + onReload: () => context.read().getDiet(widget.slug, index: widget.index), ), ); } return Scaffold( appBar: AppBar( centerTitle: true, + leading: BackButton( + onPressed: () { + if (context.canPop()) { + GoRouter.of(context).pop(); + return; + } + GoRouter.of(context).go('/feed-screen'); + }, + ), title: Text( - widget.diet.name, + '', maxLines: 2, textAlign: TextAlign.center, overflow: TextOverflow.ellipsis, softWrap: true, style: TextStyles.headingXLSemibold.copyWith(color: appTheme.black), ), - actions: [ - CustomPopup( - isAuthor: widget.diet.author.authorIsMe, - path: 'diet/${widget.diet.slug}', - complainedContentType: ComplainedContent.diet, - id: widget.diet.id, - diet: widget.diet, - ), - const SizedBox(width: 16), - ], ), body: const Loader(), ); @@ -544,7 +560,7 @@ class _AboutDietScreenState extends State { ); } - _dayOfPlan(Map> day, int dayNumber, S s) { + _dayOfPlan(Map> day, int dayNumber, S s, List selectedIndexes, Diet diet) { choiceChipWidget(int index) { return ChoiceChip( selectedColor: appTheme.blueA400, @@ -557,14 +573,12 @@ class _AboutDietScreenState extends State { padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), label: Text((index + 1).toString()), labelStyle: TextStyles.textXSSemibold.copyWith( - color: index == widget.selectedIndexes[dayNumber] ? Colors.white : appTheme.gray600, + color: index == selectedIndexes[dayNumber] ? Colors.white : appTheme.gray600, ), - selected: widget.selectedIndexes[dayNumber] == index, + selected: selectedIndexes[dayNumber] == index, backgroundColor: appTheme.gray100, onSelected: (bool selected) { - setState(() { - widget.selectedIndexes[dayNumber] = index; - }); + dietsCubit.setSelectedIndex(dayNumber: dayNumber, index: index); }, ); } @@ -612,18 +626,18 @@ class _AboutDietScreenState extends State { ListView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), - itemBuilder: (context, index) => _daily(day[widget.selectedIndexes[dayNumber] + 1]?[index + 1], s), - itemCount: day[widget.selectedIndexes[dayNumber] + 1]?.length ?? 0, + itemBuilder: (context, index) => _daily(day[selectedIndexes[dayNumber] + 1]?[index + 1], s), + itemCount: day[selectedIndexes[dayNumber] + 1]?.length ?? 0, ), const SizedBox(height: 8), ], ), ), CpfcContainer( - calories: widget.diet.dailyNutrition[dayNumber].energy, - proteins: widget.diet.dailyNutrition[dayNumber].proteins, - fats: widget.diet.dailyNutrition[dayNumber].fats, - carbohydrates: widget.diet.dailyNutrition[dayNumber].carbohydrates, + calories: diet.dailyNutrition[dayNumber].energy, + proteins: diet.dailyNutrition[dayNumber].proteins, + fats: diet.dailyNutrition[dayNumber].fats, + carbohydrates: diet.dailyNutrition[dayNumber].carbohydrates, ), ], ), diff --git a/lib/features/diets/repositories/diet_repository.dart b/lib/features/diets/repositories/diet_repository.dart index a3bbbbb3..91116b3a 100644 --- a/lib/features/diets/repositories/diet_repository.dart +++ b/lib/features/diets/repositories/diet_repository.dart @@ -33,6 +33,15 @@ class DietRepository { } } + Future getDietBySlug(String slug) async { + try { + final diet = await dietsService.getDietBySlug(slug: slug); + return diet; + } catch (e) { + rethrow; + } + } + Future addToFavorite(int id) async { try { return await dietsService.addToFavorite(id: id); diff --git a/lib/features/diets/services/diet_service.dart b/lib/features/diets/services/diet_service.dart index 59c2c977..b25b8054 100644 --- a/lib/features/diets/services/diet_service.dart +++ b/lib/features/diets/services/diet_service.dart @@ -29,6 +29,11 @@ abstract class DietService { @Path() required int id, }); + @GET('/api/diets/show_by_slug/{slug}') + Future getDietBySlug({ + @Path() required String slug, + }); + @POST('/api/diets/{id}/start') Future startDiet({ @Path() required int id, diff --git a/lib/features/feed/presentation/widgets/diets_widget.dart b/lib/features/feed/presentation/widgets/diets_widget.dart index 3b0a7662..fbd4730b 100644 --- a/lib/features/feed/presentation/widgets/diets_widget.dart +++ b/lib/features/feed/presentation/widgets/diets_widget.dart @@ -39,7 +39,7 @@ class _DietsWidgetState extends State { onTap: () => GoRouter.of(context).pushNamed( 'aboutDietScreen', extra: { - 'diet': widget.diet, + 'slug': widget.diet.slug, 'index': widget.index, 'navigateToComments': false, }, @@ -177,7 +177,7 @@ class _DietsWidgetState extends State { icon: Icons.chat_bubble_outline, text: widget.diet.totalComments.toString(), onTap: () => - GoRouter.of(context).pushNamed('aboutDietScreen', extra: {'diet': widget.diet, 'index': widget.index, 'navigateToComments': true}), + GoRouter.of(context).pushNamed('aboutDietScreen', extra: {'slug': widget.diet.slug, 'index': widget.index, 'navigateToComments': true}), ), const SizedBox( width: 12, diff --git a/lib/features/my_diets/presentation/widgets/my_diet_widget.dart b/lib/features/my_diets/presentation/widgets/my_diet_widget.dart index 587e05ca..3ca732f8 100644 --- a/lib/features/my_diets/presentation/widgets/my_diet_widget.dart +++ b/lib/features/my_diets/presentation/widgets/my_diet_widget.dart @@ -52,7 +52,7 @@ class _MyDietWidgetState extends State { Stack( children: [ InkWell( - onTap: () => GoRouter.of(context).pushNamed('aboutDietScreen', extra: {'diet': widget.diet, 'navigateToComments': false}), + onTap: () => GoRouter.of(context).pushNamed('aboutDietScreen', extra: {'slug': widget.diet.slug, 'navigateToComments': false}), child: ClipRRect( borderRadius: const BorderRadius.vertical(top: Radius.circular(12)), child: CachedNetworkImage(