From eae46d7a80a06166e7a7d8b53f30285b0cb2af8f Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Tue, 12 Mar 2024 15:29:57 +0100 Subject: [PATCH] Abschnitt 10 --- lib/providers/favorites_provider.dart | 3 ++- lib/providers/filters_provider.dart | 20 ++++++++------- lib/providers/meals_provider.dart | 3 ++- lib/screens/filters.dart | 35 +++++++++++++-------------- lib/screens/meal_details.dart | 20 +++++++-------- lib/screens/tabs.dart | 5 ++-- 6 files changed, 44 insertions(+), 42 deletions(-) diff --git a/lib/providers/favorites_provider.dart b/lib/providers/favorites_provider.dart index bf47802..535c47a 100644 --- a/lib/providers/favorites_provider.dart +++ b/lib/providers/favorites_provider.dart @@ -1,6 +1,7 @@ -import 'package:flutter_meals/models/meal.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_meals/models/meal.dart'; + class FavoriteMealsNotifier extends StateNotifier> { FavoriteMealsNotifier() : super([]); diff --git a/lib/providers/filters_provider.dart b/lib/providers/filters_provider.dart index ef0f528..39912d0 100644 --- a/lib/providers/filters_provider.dart +++ b/lib/providers/filters_provider.dart @@ -1,6 +1,7 @@ -import 'package:flutter_meals/providers/meals_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_meals/providers/meals_provider.dart'; + enum Filter { glutenFree, lactoseFree, @@ -11,17 +12,18 @@ enum Filter { class FiltersNotifier extends StateNotifier> { FiltersNotifier() : super({ - Filter.glutenFree: false, - Filter.lactoseFree: false, - Filter.vegetarian: false, - Filter.vegan: false - }); + Filter.glutenFree: false, + Filter.lactoseFree: false, + Filter.vegetarian: false, + Filter.vegan: false + }); void setFilters(Map chosenFilters) { state = chosenFilters; } void setFilter(Filter filter, bool isActive) { + // state[filter] = isActive; // not allowed! => mutating state state = { ...state, filter: isActive, @@ -30,8 +32,8 @@ class FiltersNotifier extends StateNotifier> { } final filtersProvider = - StateNotifierProvider>( - (ref) => FiltersNotifier(), +StateNotifierProvider>( + (ref) => FiltersNotifier(), ); final filteredMealsProvider = Provider((ref) { @@ -53,4 +55,4 @@ final filteredMealsProvider = Provider((ref) { } return true; }).toList(); -}); \ No newline at end of file +}); diff --git a/lib/providers/meals_provider.dart b/lib/providers/meals_provider.dart index 9e9bcd8..d65106c 100644 --- a/lib/providers/meals_provider.dart +++ b/lib/providers/meals_provider.dart @@ -1,6 +1,7 @@ -import 'package:flutter_meals/data/dummy_data.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_meals/data/dummy_data.dart'; + final mealsProvider = Provider((ref) { return dummyMeals; }); diff --git a/lib/screens/filters.dart b/lib/screens/filters.dart index 86d6c83..7815d22 100644 --- a/lib/screens/filters.dart +++ b/lib/screens/filters.dart @@ -1,10 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_meals/providers/filters_provider.dart'; - // import 'package:flutter_meals/screens/tabs.dart'; // import 'package:flutter_meals/widgets/main_drawer.dart'; +import 'package:flutter_meals/providers/filters_provider.dart'; class FiltersScreen extends ConsumerWidget { const FiltersScreen({super.key}); @@ -29,14 +28,14 @@ class FiltersScreen extends ConsumerWidget { title: Text( 'Gluten-free', style: Theme.of(context).textTheme.titleLarge!.copyWith( - color: Theme.of(context).colorScheme.onBackground, - ), + color: Theme.of(context).colorScheme.onBackground, + ), ), subtitle: Text( 'Only include gluten-free meals.', style: Theme.of(context).textTheme.labelMedium!.copyWith( - color: Theme.of(context).colorScheme.onBackground, - ), + color: Theme.of(context).colorScheme.onBackground, + ), ), activeColor: Theme.of(context).colorScheme.tertiary, contentPadding: const EdgeInsets.only(left: 34, right: 22), @@ -51,14 +50,14 @@ class FiltersScreen extends ConsumerWidget { title: Text( 'Lactose-free', style: Theme.of(context).textTheme.titleLarge!.copyWith( - color: Theme.of(context).colorScheme.onBackground, - ), + color: Theme.of(context).colorScheme.onBackground, + ), ), subtitle: Text( 'Only include lactose-free meals.', style: Theme.of(context).textTheme.labelMedium!.copyWith( - color: Theme.of(context).colorScheme.onBackground, - ), + color: Theme.of(context).colorScheme.onBackground, + ), ), activeColor: Theme.of(context).colorScheme.tertiary, contentPadding: const EdgeInsets.only(left: 34, right: 22), @@ -73,14 +72,14 @@ class FiltersScreen extends ConsumerWidget { title: Text( 'Vegetarian', style: Theme.of(context).textTheme.titleLarge!.copyWith( - color: Theme.of(context).colorScheme.onBackground, - ), + color: Theme.of(context).colorScheme.onBackground, + ), ), subtitle: Text( 'Only include vegetarian meals.', style: Theme.of(context).textTheme.labelMedium!.copyWith( - color: Theme.of(context).colorScheme.onBackground, - ), + color: Theme.of(context).colorScheme.onBackground, + ), ), activeColor: Theme.of(context).colorScheme.tertiary, contentPadding: const EdgeInsets.only(left: 34, right: 22), @@ -95,14 +94,14 @@ class FiltersScreen extends ConsumerWidget { title: Text( 'Vegan', style: Theme.of(context).textTheme.titleLarge!.copyWith( - color: Theme.of(context).colorScheme.onBackground, - ), + color: Theme.of(context).colorScheme.onBackground, + ), ), subtitle: Text( 'Only include vegan meals.', style: Theme.of(context).textTheme.labelMedium!.copyWith( - color: Theme.of(context).colorScheme.onBackground, - ), + color: Theme.of(context).colorScheme.onBackground, + ), ), activeColor: Theme.of(context).colorScheme.tertiary, contentPadding: const EdgeInsets.only(left: 34, right: 22), diff --git a/lib/screens/meal_details.dart b/lib/screens/meal_details.dart index 8a544ed..ccd4d87 100644 --- a/lib/screens/meal_details.dart +++ b/lib/screens/meal_details.dart @@ -49,25 +49,25 @@ class MealDetailsScreen extends ConsumerWidget { Text( 'Ingredients', style: Theme.of(context).textTheme.titleLarge!.copyWith( - color: Theme.of(context).colorScheme.primary, - fontWeight: FontWeight.bold, - ), + color: Theme.of(context).colorScheme.primary, + fontWeight: FontWeight.bold, + ), ), const SizedBox(height: 14), for (final ingredient in meal.ingredients) Text( ingredient, style: Theme.of(context).textTheme.bodyMedium!.copyWith( - color: Theme.of(context).colorScheme.onBackground, - ), + color: Theme.of(context).colorScheme.onBackground, + ), ), const SizedBox(height: 24), Text( 'Steps', style: Theme.of(context).textTheme.titleLarge!.copyWith( - color: Theme.of(context).colorScheme.primary, - fontWeight: FontWeight.bold, - ), + color: Theme.of(context).colorScheme.primary, + fontWeight: FontWeight.bold, + ), ), const SizedBox(height: 14), for (final step in meal.steps) @@ -80,8 +80,8 @@ class MealDetailsScreen extends ConsumerWidget { step, textAlign: TextAlign.center, style: Theme.of(context).textTheme.bodyMedium!.copyWith( - color: Theme.of(context).colorScheme.onBackground, - ), + color: Theme.of(context).colorScheme.onBackground, + ), ), ), ], diff --git a/lib/screens/tabs.dart b/lib/screens/tabs.dart index be88158..408b377 100644 --- a/lib/screens/tabs.dart +++ b/lib/screens/tabs.dart @@ -54,10 +54,9 @@ class _TabsScreenState extends ConsumerState { var activePageTitle = 'Categories'; if (_selectedPageIndex == 1) { - final favoritesMeals = ref.watch(favoriteMealsProvider); - + final favoriteMeals = ref.watch(favoriteMealsProvider); activePage = MealsScreen( - meals: favoritesMeals, + meals: favoriteMeals, ); activePageTitle = 'Your Favorites'; }