feat: refactor RecipesScreen and RecipesViewNotifier to support dynamic view modes and column selection

This commit is contained in:
Nils-Johan Gynther
2026-04-25 07:09:15 +02:00
parent fe3d8581a8
commit ba4e931f5c
3 changed files with 110 additions and 52 deletions
+37 -12
View File
@@ -4,6 +4,9 @@ import 'package:go_router/go_router.dart';
import '../../features/auth/data/auth_providers.dart';
import '../../features/recipes/data/recipes_grid_provider.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
const _adminDestination = _AppDestination(
path: '/admin',
@@ -102,18 +105,40 @@ class AppShell extends ConsumerWidget {
appBar: AppBar(
title: Text(selectedDestination.title),
actions: [
if (isRecipesRoute)
PopupMenuButton<int>(
icon: const Icon(Icons.grid_view),
tooltip: 'Välj antal kolumner',
onSelected: (columns) =>
ref.read(recipesGridProvider.notifier).setColumns(columns),
itemBuilder: (context) => const [
PopupMenuItem(value: 2, child: Text('2 kolumner')),
PopupMenuItem(value: 4, child: Text('4 kolumner')),
PopupMenuItem(value: 6, child: Text('6 kolumner')),
PopupMenuItem(value: 8, child: Text('8 kolumner')),
],
if (isRecipesRoute) ...existing code...
Consumer(
builder: (context, ref, child) {
final view = ref.watch(recipesViewProvider).valueOrNull ??
(mode: RecipesViewMode.grid, columns: 2);
return Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
tooltip: view.mode == RecipesViewMode.grid
? 'Visa som lista'
: 'Visa som grid',
icon: Icon(view.mode == RecipesViewMode.grid
? Icons.view_list
: Icons.grid_view),
onPressed: () =>
ref.read(recipesViewProvider.notifier).toggleMode(),
),
if (view.mode == RecipesViewMode.grid)
PopupMenuButton<int>(
icon: const Icon(Icons.grid_view),
tooltip: 'Välj antal kolumner',
onSelected: (columns) =>
ref.read(recipesViewProvider.notifier).setColumns(columns),
itemBuilder: (context) => const [
PopupMenuItem(value: 2, child: Text('2 kolumner')),
PopupMenuItem(value: 4, child: Text('4 kolumner')),
PopupMenuItem(value: 6, child: Text('6 kolumner')),
PopupMenuItem(value: 8, child: Text('8 kolumner')),
],
),
],
);
},
),
IconButton(
tooltip: 'Logga ut',