fix: issue-1049, issue-1039, issue-1035, issue-1032, issue-995, issue-993

This commit is contained in:
misha
2026-08-26 08:42:47 +03:00
parent 6265e865e9
commit de7bf8dc19
22 changed files with 509 additions and 192 deletions

View File

@@ -92,6 +92,7 @@ class DietsCubit extends Cubit<DietsState> {
}) async {
try {
_query = query;
currentPage = 1;
final type = _types[state.filterState.typeIndex];
final duration = _durationValues[state.filterState.durationIndex];
final sorting = _sortingValues[state.filterState.sortingIndex];

View File

@@ -149,6 +149,7 @@ class PlansCubit extends Cubit<PlansState> {
}) async {
try {
_query = query;
currentPage = 1;
final type = _types[state.filterState.typeIndex];
final duration = _durationValues[state.filterState.durationIndex];
final minPrice = state.filterState.priceFilter.$1;

View File

@@ -46,6 +46,7 @@ class RecipesCubit extends Cubit<RecipesState> {
}) async {
try {
_query = query;
currentPage = 1;
final recipesList = await feedRepository.getRecipes(
tags: _selectedTags.toList(),
query: query,

View File

@@ -123,6 +123,19 @@ class _FeedScreenContentState extends State<FeedScreenContent> {
super.dispose();
}
Future<void> _openCreateAndReloadFeed({
required Future<Object?> Function() openCreate,
required Future<void> Function() reload,
}) async {
final result = await openCreate();
if (!mounted) {
return;
}
if (shouldReloadFeedAfterCreate(result)) {
await reload();
}
}
@override
Widget build(BuildContext context) {
FlutterNativeSplash.remove();
@@ -254,26 +267,43 @@ class _FeedScreenContentState extends State<FeedScreenContent> {
const SizedBox(width: 12),
switch (_selectedChipIndex) {
1 when !hidePlans => AddItemButton(
onTap: state.profile?.roles.contains('consultant') ?? false ? () => GoRouter.of(context).pushNamed(CreatePlanScreen.name) : null,
onTap: state.profile?.roles.contains('consultant') ?? false
? () => _openCreateAndReloadFeed(
openCreate: () => GoRouter.of(context).pushNamed(CreatePlanScreen.name),
reload: () => context.read<PlansCubit>().loadPlans(),
)
: null,
),
2 when hidePlans => AddItemButton(
onTap: state.profile?.roles.contains('consultant') ?? false ? () => GoRouter.of(context).pushNamed(RecipeCreateScreen.name) : null,
onTap: state.profile?.roles.contains('consultant') ?? false
? () => _openCreateAndReloadFeed(
openCreate: () => GoRouter.of(context).pushNamed(RecipeCreateScreen.name),
reload: () => context.read<RecipesCubit>().loadRecipesList(),
)
: null,
),
3 when !hidePlans => AddItemButton(
onTap: state.profile?.roles.contains('consultant') ?? false ? () => GoRouter.of(context).pushNamed(RecipeCreateScreen.name) : null,
onTap: state.profile?.roles.contains('consultant') ?? false
? () => _openCreateAndReloadFeed(
openCreate: () => GoRouter.of(context).pushNamed(RecipeCreateScreen.name),
reload: () => context.read<RecipesCubit>().loadRecipesList(),
)
: null,
),
3 when hidePlans => AddItemButton(
onTap: state.profile?.roles.contains('consultant') ?? false
? () async {
await GoRouter.of(context).pushNamed(CreateDietScreen.name, extra: {'isEditing': false});
}
? () => _openCreateAndReloadFeed(
openCreate: () => GoRouter.of(context).pushNamed(CreateDietScreen.name, extra: {'isEditing': false}),
reload: () => context.read<DietsCubit>().loadDiets(),
)
: null,
),
4 when !hidePlans => AddItemButton(
onTap: state.profile?.roles.contains('consultant') ?? false
? () async {
await GoRouter.of(context).pushNamed(CreateDietScreen.name);
}
? () => _openCreateAndReloadFeed(
openCreate: () => GoRouter.of(context).pushNamed(CreateDietScreen.name),
reload: () => context.read<DietsCubit>().loadDiets(),
)
: null,
),
_ => const AddItemButton(key: AppKeys.feedScreenBlogPostCreationButton),
@@ -301,6 +331,9 @@ class _FeedScreenContentState extends State<FeedScreenContent> {
}
}
/// Create screens pop `true` (diet/plan) or `'active'` (recipe) after a successful publish.
bool shouldReloadFeedAfterCreate(Object? result) => result == true || result == 'active';
enum ViewableContentType {
plans,
posts,