import 'package:flutter/material.dart'; import 'package:flutter_navigation/data/dummy_data.dart'; import 'package:flutter_navigation/screens/categories.dart'; import 'package:flutter_navigation/screens/meals.dart'; import 'package:flutter_navigation/widgets/main_drawer.dart'; import '../models/meal.dart'; import 'filters.dart'; const kInitialFilters = { Filter.glutenFree: false, Filter.lactoseFree: false, Filter.vegetarien: false, Filter.vegan: false, }; class TabsScreen extends StatefulWidget { const TabsScreen({super.key}); @override State createState() { return _TabsScreenState(); } } class _TabsScreenState extends State { int _selectedPageIndex = 0; final List _favoriteMeals = []; Map _selectedFilters = kInitialFilters; void _showInfoMessage(String message) { ScaffoldMessenger.of(context).clearSnackBars(); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(message)), ); } void _toggleMealFavoriteStatus(Meal meal) { final isExisting = _favoriteMeals.contains(meal); if (isExisting) { setState(() { _favoriteMeals.remove(meal); _showInfoMessage('Meal is no longer a favorite.'); }); } else { _favoriteMeals.add(meal); _showInfoMessage('Marked as a favorite.'); } } void _selectPage(int index) { setState(() { _selectedPageIndex = index; }); } void _setScreen(String identifier) async { Navigator.of(context).pop(); if (identifier == 'filters') { final result = await Navigator.of(context).push>( MaterialPageRoute( builder: (ctx) => FiltersScreen( currentFilters: _selectedFilters, ), ), ); setState(() { _selectedFilters = result ?? kInitialFilters; }); } } @override Widget build(BuildContext context) { final availableMeals = dummyMeals.where((meal) { if (_selectedFilters[Filter.glutenFree]! && !meal.isGlutenFree) { return false; } if (_selectedFilters[Filter.lactoseFree]! && !meal.isLactoseFree) { return false; } if (_selectedFilters[Filter.vegetarien]! && !meal.isVegetarian) { return false; } if (_selectedFilters[Filter.vegan]! && !meal.isVegan) { return false; } return true; }).toList(); Widget activePage = CategoriesScreen( onToggleFavorites: _toggleMealFavoriteStatus, availableMeals: availableMeals, ); var activePageTitle = 'Categories'; if (_selectedPageIndex == 1) { activePage = MealsScreen( meals: _favoriteMeals, onToggleFavorites: _toggleMealFavoriteStatus, ); activePageTitle = 'Your Favorites'; } 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', ), ], ), ); } }