feat: enhance navigation by adding recipe links in inventory and pantry screens

This commit is contained in:
Nils-Johan Gynther
2026-04-24 14:13:26 +02:00
parent a39640d4ea
commit 13a0ab3584
7 changed files with 42 additions and 10 deletions
@@ -83,7 +83,7 @@ class _RecipeImportTabState extends ConsumerState<RecipeImportTab> {
context.push('/recipes/create', extra: <String, dynamic>{
'markdown': result.markdown,
'imageUrl': result.imageUrl,
});
}).then((_) => context.go('/recipes'));
} catch (e) {
if (!mounted) return;
setState(() => _error = mapErrorToUserMessage(e, context));
@@ -47,7 +47,7 @@ class _ConsumeInventoryScreenState
);
ref.invalidate(inventoryDetailProvider(widget.itemId));
ref.invalidate(inventoryProvider);
if (mounted) context.pop();
if (mounted) context.go('/inventory');
} catch (e) {
if (mounted) {
ScaffoldMessenger.of(context)
@@ -119,10 +119,21 @@ class InventoryScreen extends ConsumerWidget {
Positioned(
right: 16,
bottom: 16,
child: FloatingActionButton.extended(
onPressed: () => context.push('/inventory/create'),
icon: const Icon(Icons.add),
label: const Text('Lägg till'),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
FloatingActionButton.extended(
onPressed: () => context.push('/inventory/create'),
icon: const Icon(Icons.add),
label: const Text('Lägg till'),
),
const SizedBox(height: 8),
FloatingActionButton.extended(
onPressed: () => context.go('/recipes'),
icon: const Icon(Icons.restaurant_menu),
label: const Text('Recept'),
),
],
),
),
],
@@ -129,6 +129,11 @@ class _MealPlanScreenState extends ConsumerState<MealPlanScreen> {
onPressed: () => ref.read(mealPlanWeekOffsetProvider.notifier).reset(),
child: Text(l10n.mealPlanWeekCurrent),
),
IconButton(
tooltip: 'Gå till recept',
icon: const Icon(Icons.restaurant_menu),
onPressed: () => context.go('/recipes'),
),
],
),
const SizedBox(height: 12),
@@ -284,9 +284,19 @@ class _PantryScreenState extends ConsumerState<PantryScreen> {
return ListView(
padding: const EdgeInsets.all(16),
children: [
Text(
'Produkter du alltid räknar med att ha hemma.',
style: Theme.of(context).textTheme.bodyMedium,
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Produkter du alltid räknar med att ha hemma.',
style: Theme.of(context).textTheme.bodyMedium,
),
IconButton(
tooltip: 'Gå till recept',
icon: const Icon(Icons.restaurant_menu),
onPressed: () => context.go('/recipes'),
),
],
),
const SizedBox(height: 12),
Row(
@@ -36,6 +36,11 @@ class RecipeDetailScreen extends ConsumerWidget {
onPressed: () =>
context.push('/recipes/$recipeId/edit'),
),
IconButton(
tooltip: 'Gå till inventarie',
icon: const Icon(Icons.inventory_2_outlined),
onPressed: () => context.go('/inventory'),
),
_DeleteButton(recipe: recipeAsync.value!),
],
),
@@ -46,6 +51,7 @@ class RecipeDetailScreen extends ConsumerWidget {
onRetry: () => ref.invalidate(recipeDetailProvider(recipeId)),
),
data: (recipe) => CustomScrollView(
physics: const BouncingScrollPhysics(),
slivers: [
SliverAppBar(
expandedHeight: MediaQuery.of(context).size.height * 2 / 3,
@@ -218,7 +218,7 @@ class _RecipeEditScreenState extends ConsumerState<RecipeEditScreen> {
);
ref.invalidate(recipeDetailProvider(widget.recipeId));
ref.invalidate(recipesProvider);
if (mounted) context.pop();
if (mounted) context.go('/recipes/${widget.recipeId}');
} on ApiException catch (e) {
if (e.type == ApiErrorType.unauthorized) {
await ref.read(authStateProvider.notifier).logout();