import 'package:flutter/material.dart'; import 'package:meals/data/dummy_categories.dart'; import 'package:meals/screens/CategoriesScreen.dart'; import 'package:meals/screens/MealsScreen.dart'; import 'package:meals/screens/filters.dart'; import 'package:meals/widgets/main_drawer.dart'; import '../models/Meal.dart'; const kDefaultFilters = { Filter.glutenFree: false, Filter.lactoseFree: false, Filter.veggie: false, Filter.vegan: false, }; class TabsScreen extends StatefulWidget { const TabsScreen({Key? key}) : super(key: key); @override State createState() => _TabsScreenState(); } class _TabsScreenState extends State { int _selectedPageIndex = 0; final List _favoriteMeals = []; Map _selectedFilters = kDefaultFilters; void _showInfoMessage(String message) { ScaffoldMessenger.of(context).clearSnackBars(); ScaffoldMessenger.of(context) .showSnackBar(SnackBar(content: Text(message))); } void _selectPage(int index) { setState(() { _selectedPageIndex = index; }); } void _toggleFavoriteMeal(Meal meal) { if (_favoriteMeals.contains(meal)) { setState(() { _favoriteMeals.remove(meal); }); _showInfoMessage('Meal is no longer a favorite'); } else { setState(() { _favoriteMeals.add(meal); _showInfoMessage('Meal has been added to your favorites'); }); } } void _setScreen(String identifier) async { Navigator.of(context).pop(); switch (identifier) { case 'filters': final results = await Navigator.of(context) .push>(MaterialPageRoute( builder: (ctx) => FiltersScreen( currentFilters: _selectedFilters, ))); setState(() { _selectedFilters = results ?? kDefaultFilters; }); break; } } @override Widget build(BuildContext context) { Widget activePage; String? activePageTitle; final availableMeals = dummyMeals.where((meal) { if (_selectedFilters[Filter.glutenFree]! && !meal.isGlutenFree) { return false; } if (_selectedFilters[Filter.lactoseFree]! && !meal.isLactoseFree) { return false; } if (_selectedFilters[Filter.veggie]! && !meal.isVegetarian) { return false; } if (_selectedFilters[Filter.vegan]! && !meal.isVegan) { return false; } return true; }).toList(); switch (_selectedPageIndex) { case 1: activePageTitle = 'Favorites'; activePage = MealsScreen( meals: _favoriteMeals, onToggleFavorite: _toggleFavoriteMeal, ); break; default: activePageTitle = 'Pick your category'; activePage = CategoriesScreen( availableMeals: availableMeals, onToggleFavorite: _toggleFavoriteMeal, ); } return Scaffold( appBar: AppBar(title: Text(activePageTitle)), drawer: MainDrawer( onSelectScreen: _setScreen, ), body: activePage, bottomNavigationBar: BottomNavigationBar( onTap: _selectPage, currentIndex: _selectedPageIndex, items: const [ BottomNavigationBarItem( icon: Icon(Icons.set_meal), label: 'Categories'), BottomNavigationBarItem(icon: Icon(Icons.star), label: 'Favorites'), ], ), ); } }