From 5cb121d7337ed2bbedd23f100cfabb3bee8c5990 Mon Sep 17 00:00:00 2001 From: misha Date: Mon, 16 Mar 2026 10:32:12 +0300 Subject: [PATCH] fat(recipes, diets): added list refreshing --- .../presentation/create_diet_screen.dart | 10 +++++----- .../pages/recipe_create_screen.dart | 4 ++-- .../my_diets/presentation/my_diets_screen.dart | 12 +++++++++++- .../presentation/widgets/my_diet_widget.dart | 18 +++++++++++++++--- .../presentation/pages/my_recipes_screen.dart | 10 ++++++++-- .../presentation/widgets/my_recipe_widget.dart | 16 ++++++++++++++-- 6 files changed, 55 insertions(+), 15 deletions(-) diff --git a/lib/features/create_diet/presentation/create_diet_screen.dart b/lib/features/create_diet/presentation/create_diet_screen.dart index 5d95e783..c04f1e1c 100644 --- a/lib/features/create_diet/presentation/create_diet_screen.dart +++ b/lib/features/create_diet/presentation/create_diet_screen.dart @@ -103,7 +103,7 @@ class _CreateDietScreenContentState extends State { if (state.published) { Future.delayed(const Duration(milliseconds: 500), () { if (!context.mounted) return; - context.pop(); + context.pop(true); showBottomSheetWithBlur( userRootNavigator: true, context: context, @@ -113,7 +113,7 @@ class _CreateDietScreenContentState extends State { } else if (state.drafted) { Future.delayed(const Duration(milliseconds: 500), () { if (!context.mounted) return; - context.pop(); + context.pop(true); showBottomSheetWithBlur( context: context, child: SuccessPublishedDietOrPlanBottomSheet(title: state.dietData.name ?? 'Диета', isDrafted: true), @@ -231,7 +231,7 @@ class _CreateDietScreenContentState extends State { if (dietState == DietState.draft) { Future.delayed(const Duration(milliseconds: 500), () { if (!context.mounted) return; - context.pop(); + context.pop(true); showBottomSheetWithBlur( userRootNavigator: true, context: context, @@ -241,7 +241,7 @@ class _CreateDietScreenContentState extends State { } else { Future.delayed(const Duration(milliseconds: 500), () { if (!context.mounted) return; - context.pop(); + context.pop(true); showBottomSheetWithBlur( context: context, child: SuccessPublishedDietOrPlanBottomSheet(title: state.dietData.name ?? 'Диета', isDrafted: true), @@ -304,7 +304,7 @@ class _CreateDietScreenContentState extends State { } else { Future.delayed(const Duration(milliseconds: 500), () { if (!context.mounted) return; - context.pop(); + context.pop(true); showBottomSheetWithBlur( userRootNavigator: true, context: context, diff --git a/lib/features/create_recipe/presentation/pages/recipe_create_screen.dart b/lib/features/create_recipe/presentation/pages/recipe_create_screen.dart index a749186d..d4b622aa 100644 --- a/lib/features/create_recipe/presentation/pages/recipe_create_screen.dart +++ b/lib/features/create_recipe/presentation/pages/recipe_create_screen.dart @@ -109,7 +109,7 @@ class _RecipeCreateScreenState extends State { if (isSuccess) { Future.delayed(const Duration(milliseconds: 500), () { if (!context.mounted) return; - context.pop(); + context.pop('active'); showBottomSheetWithBlur( userRootNavigator: true, context: context, @@ -157,7 +157,7 @@ class _RecipeCreateScreenState extends State { }); if (isSuccess) { if (!context.mounted) return; - context.pop(); + context.pop('drafted'); } else { if (!context.mounted) return; showErrorDialog(context, title: 'Не удалось сохранить черновик'); diff --git a/lib/features/my_diets/presentation/my_diets_screen.dart b/lib/features/my_diets/presentation/my_diets_screen.dart index 1c5bad54..25662b1c 100644 --- a/lib/features/my_diets/presentation/my_diets_screen.dart +++ b/lib/features/my_diets/presentation/my_diets_screen.dart @@ -107,7 +107,17 @@ class MyDietsScreenContent extends StatelessWidget { ), ), const SizedBox(width: 12), - AddItemButton(onTap: () => GoRouter.of(context).pushNamed(CreateDietScreen.name, extra: {'isEditing': false})), + AddItemButton( + onTap: () async { + final result = await GoRouter.of(context).pushNamed( + CreateDietScreen.name, + extra: {'isEditing': false}, + ); + if (!context.mounted) return; + if (result == true) { + await context.read().loadAllDiets(); + } + }), const SizedBox(width: 4), ], ), 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 0799fc77..e2236b96 100644 --- a/lib/features/my_diets/presentation/widgets/my_diet_widget.dart +++ b/lib/features/my_diets/presentation/widgets/my_diet_widget.dart @@ -38,9 +38,14 @@ class MyDietWidget extends StatefulWidget { class _MyDietWidgetState extends State { Future _editDiet(Diet diet, BuildContext context) async{ - await GoRouter.of(context).pushNamed(CreateDietScreen.name, extra: {'diet': diet, 'isEditing': true}); + final result = await GoRouter.of(context).pushNamed( + CreateDietScreen.name, + extra: {'diet': diet, 'isEditing': true}, + ); if (!context.mounted) return; - await context.read().loadAllDiets(); + if (result == true) { + await context.read().loadAllDiets(); + } } void _suggestDiet(Diet diet) { @@ -88,7 +93,14 @@ class _MyDietWidgetState extends State { void _createBasedOnChosen(Diet diet, BuildContext context) async { await showErrorDialog(context, title: 'Предупреждение', description: 'Вы переходите к созданию новой диеты на основе скопированной'); if (!context.mounted) return; - GoRouter.of(context).pushNamed(CreateDietScreen.name, extra: {'diet': diet, 'isEditing': false}); + final result = await GoRouter.of(context).pushNamed( + CreateDietScreen.name, + extra: {'diet': diet, 'isEditing': false}, + ); + if (!context.mounted) return; + if (result == true) { + await context.read().loadAllDiets(); + } } void _deleteDiet(Diet diet, BuildContext context) async { diff --git a/lib/features/recipe/presentation/pages/my_recipes_screen.dart b/lib/features/recipe/presentation/pages/my_recipes_screen.dart index f3fc4b36..36359d0b 100644 --- a/lib/features/recipe/presentation/pages/my_recipes_screen.dart +++ b/lib/features/recipe/presentation/pages/my_recipes_screen.dart @@ -74,8 +74,14 @@ class MyRecipesScreen extends StatelessWidget { ), const SizedBox(width: 8), InkWell( - onTap: () { - context.push(RecipeCreateScreen.path); + onTap: () async { + final result = await context.push(RecipeCreateScreen.path); + if (!context.mounted) return; + if (result == MyRecipesCubit.drafted) { + await context.read().setDraftedState(); + } else if (result == MyRecipesCubit.active) { + await context.read().setActiveState(); + } }, borderRadius: BorderRadius.circular(100), child: Container( diff --git a/lib/features/recipe/presentation/widgets/my_recipe_widget.dart b/lib/features/recipe/presentation/widgets/my_recipe_widget.dart index 31c92082..9d0269de 100644 --- a/lib/features/recipe/presentation/widgets/my_recipe_widget.dart +++ b/lib/features/recipe/presentation/widgets/my_recipe_widget.dart @@ -155,7 +155,13 @@ class _MyRecipeWidgetState extends State { final fullRecipe = await context.read().getRecipeById(widget.recipe.slug); if (context.mounted) { Navigator.pop(context); // close dialog - context.push(RecipeCreateScreen.path, extra: fullRecipe); + final result = await context.push(RecipeCreateScreen.path, extra: fullRecipe); + if (!context.mounted) return; + if (result == MyRecipesCubit.drafted) { + await context.read().setDraftedState(); + } else if (result == MyRecipesCubit.active) { + await context.read().setActiveState(); + } } }, height: 52, @@ -236,10 +242,16 @@ class _MyRecipeWidgetState extends State { } else { showErrorToast('Заполните все необходимые поля для публикации рецепта'); if (context.mounted) { - context.push(RecipeCreateScreen.path, extra: { + final result = await context.push(RecipeCreateScreen.path, extra: { 'recipe': fullRecipe, 'autoValidate': true, }); + if (!context.mounted) return; + if (result == MyRecipesCubit.drafted) { + await context.read().setDraftedState(); + } else if (result == MyRecipesCubit.active) { + await context.read().setActiveState(); + } } } await createCubit.close();