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

76 lines
2.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:meals/providers/favorites_provider.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 '../providers/filters_provider.dart';
class TabsScreen extends ConsumerStatefulWidget {
const TabsScreen({Key? key}) : super(key: key);
@override
ConsumerState<TabsScreen> createState() => _TabsScreenState();
}
class _TabsScreenState extends ConsumerState<TabsScreen> {
int _selectedPageIndex = 0;
void _selectPage(int index) {
setState(() {
_selectedPageIndex = index;
});
}
void _setScreen(String identifier) async {
Navigator.of(context).pop();
switch (identifier) {
case 'filters':
await Navigator.of(context).push<Map<Filter, bool>>(
MaterialPageRoute(builder: (ctx) => const FiltersScreen()));
break;
}
}
@override
Widget build(BuildContext context) {
Widget activePage;
String? activePageTitle;
final availableMeals = ref.watch(filteredMealsProvider);
switch (_selectedPageIndex) {
case 1:
activePageTitle = 'Favorites';
activePage = MealsScreen(
meals: ref.watch(favoriteMealsProvider),
);
break;
default:
activePageTitle = 'Pick your category';
activePage = CategoriesScreen(
availableMeals: availableMeals,
);
}
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'),
],
),
);
}
}