From ac8a7a4b96c9a853d236a906d79c24bed621523a Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Tue, 5 Mar 2024 21:39:03 +0100 Subject: [PATCH] 166 Start --- lib/main.dart | 4 +-- lib/screens/categories.dart | 9 ++----- lib/screens/meals.dart | 15 ++++++++--- lib/screens/tabs.dart | 54 +++++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 12 deletions(-) create mode 100644 lib/screens/tabs.dart diff --git a/lib/main.dart b/lib/main.dart index 4784686..722c946 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:flutter_navigation/screens/tabs.dart'; import 'package:google_fonts/google_fonts.dart'; -import 'package:flutter_navigation/screens/categories.dart'; final theme = ThemeData( useMaterial3: true, @@ -23,7 +23,7 @@ class App extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: theme, - home: const CategoriesScreen(), + home: const TabsScreen(), ); } } diff --git a/lib/screens/categories.dart b/lib/screens/categories.dart index 8ebbc00..cf522bf 100644 --- a/lib/screens/categories.dart +++ b/lib/screens/categories.dart @@ -23,11 +23,7 @@ class CategoriesScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Pick your category'), - ), - body: GridView( + return GridView( padding: const EdgeInsets.all(24), gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, @@ -44,7 +40,6 @@ class CategoriesScreen extends StatelessWidget { }, ) ], - ), - ); + ); } } diff --git a/lib/screens/meals.dart b/lib/screens/meals.dart index dc2f3e7..a77d37b 100644 --- a/lib/screens/meals.dart +++ b/lib/screens/meals.dart @@ -5,9 +5,13 @@ import 'package:flutter_navigation/widgets/meal_item.dart'; import '../models/meal.dart'; class MealsScreen extends StatelessWidget { - const MealsScreen({super.key, required this.title, required this.meals}); + const MealsScreen({ + super.key, + this.title, + required this.meals, + }); - final String title; + final String? title; final List meals; void selectMeal(BuildContext context, Meal meal) { @@ -51,9 +55,14 @@ class MealsScreen extends StatelessWidget { }), ); } + + if (title == null) { + return content; + } + return Scaffold( appBar: AppBar( - title: Text(title), + title: Text(title!), ), body: content, ); diff --git a/lib/screens/tabs.dart b/lib/screens/tabs.dart new file mode 100644 index 0000000..3382a4d --- /dev/null +++ b/lib/screens/tabs.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_navigation/screens/categories.dart'; +import 'package:flutter_navigation/screens/meals.dart'; + +class TabsScreen extends StatefulWidget { + const TabsScreen({super.key}); + + @override + State createState() { + return _TabsScreenState(); + } +} + +class _TabsScreenState extends State { + int _selectedPageIndex = 0; + + void _selectPage(int index) { + setState(() { + _selectedPageIndex = index; + }); + } + + @override + Widget build(BuildContext context) { + Widget activePage = const CategoriesScreen(); + var activePageTitle = 'Categories'; + + if (_selectedPageIndex == 1) { + activePage = const MealsScreen(meals: []); + activePageTitle = 'Your Favorites'; + } + + 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', + ), + ], + ), + ); + } +}