You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
meals/lib/screens/tabs.dart

79 lines
2.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:meals/screens/CategoriesScreen.dart';
import 'package:meals/screens/MealsScreen.dart';
import '../models/Meal.dart';
class TabsScreen extends StatefulWidget {
const TabsScreen({Key? key}) : super(key: key);
@override
State<TabsScreen> createState() => _TabsScreenState();
}
class _TabsScreenState extends State<TabsScreen> {
int _selectedPageIndex = 0;
final List<Meal> _favoriteMeals = [];
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');
});
}
}
@override
Widget build(BuildContext context) {
Widget activePage;
String? activePageTitle;
switch (_selectedPageIndex) {
case 1:
activePageTitle = 'Favorites';
activePage = MealsScreen(
meals: _favoriteMeals,
onToggleFavorite: _toggleFavoriteMeal,
);
break;
default:
activePageTitle = 'Pick your category';
activePage = CategoriesScreen(
onToggleFavorite: _toggleFavoriteMeal,
);
}
return Scaffold(
appBar: AppBar(title: Text(activePageTitle)),
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'),
],
),
);
}
}