diff --git a/lib/cubit/index_cubit.dart b/lib/cubit/index_cubit.dart new file mode 100644 index 0000000..f3916e2 --- /dev/null +++ b/lib/cubit/index_cubit.dart @@ -0,0 +1,9 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; + +class IndexCubit extends Cubit { + IndexCubit() : super(0); + + void changeIndex(int newIndex) { + emit(newIndex); + } +} diff --git a/lib/main.dart b/lib/main.dart index 9210bc0..4c476fb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,16 +1,23 @@ import 'package:flutter/material.dart'; import 'package:adaptive_theme/adaptive_theme.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:learn/cubit/index_cubit.dart'; import 'package:learn/pages/about.dart'; -import 'package:learn/pages/atoz.dart'; -import 'package:learn/pages/birds.dart'; -import 'package:learn/pages/animals.dart'; -import 'package:learn/pages/parts.dart'; -import 'package:learn/pages/shapes.dart'; -import 'package:learn/pages/solar.dart'; +import 'package:learn/pages/modules/atoz.dart'; +import 'package:learn/pages/modules/birds.dart'; +import 'package:learn/pages/modules/animals.dart'; +import 'package:learn/pages/explore.dart'; +import 'package:learn/pages/favorite.dart'; +import 'package:learn/pages/modules/parts.dart'; +import 'package:learn/pages/modules/shapes.dart'; +import 'package:learn/pages/modules/solar.dart'; import 'package:learn/utils/routes.dart'; import 'package:learn/widgets/drawer.dart'; -import 'package:learn/pages/colours.dart'; +import 'package:learn/pages/modules/colours.dart'; import 'package:fluttertoast/fluttertoast.dart'; +import 'package:learn/widgets/navbar/navbar.dart'; + +import 'pages/home.dart'; DateTime? currentBackPressTime; @@ -31,290 +38,44 @@ class MyApp extends StatelessWidget { light: ThemeData.light(), dark: ThemeData.dark(), initial: savedThemeMode ?? AdaptiveThemeMode.light, - builder: (theme, darkTheme) => MaterialApp( - debugShowCheckedModeBanner: false, - title: 'Home', - theme: theme, - darkTheme: darkTheme, - home: const MyHomePage(), - routes: { - AllRoutes.homeRoute: (context) => const MyHomePage(), - AllRoutes.atozRoute: (context) => const AtoZ(), - AllRoutes.birdsRoute: (context) => BirdsPage(), - AllRoutes.shapesRoute: (context) => const ShapesPage(), - AllRoutes.partsRoute: (context) => const PartsPage(), - AllRoutes.solarRoute: (context) => PlanetsPage(), - AllRoutes.animalRoute: (context) => AnimalsPage(), - AllRoutes.colourRoute: (context) => const ColoursPage(), - AllRoutes.aboutRoute: (context) => const AboutPage(), - }, - ), - ); - } -} - -class MyHomePage extends StatefulWidget { - const MyHomePage({Key? key}) : super(key: key); - - @override - State createState() => _MyHomePageState(); -} - -class _MyHomePageState extends State { - bool _isImageClicked1 = false; - bool _isImageClicked2 = false; - bool _isImageClicked3 = false; - bool _isImageClicked4 = false; - bool _isDarkTheme = false; - - Future _onBackPressed() { - DateTime now = DateTime.now(); - if (currentBackPressTime == null || - now.difference(currentBackPressTime!) > const Duration(seconds: 2)) { - currentBackPressTime = now; - Fluttertoast.showToast( - msg: "Press back again to exit", - toastLength: Toast.LENGTH_SHORT, - gravity: ToastGravity.BOTTOM, - ); - return Future.value(false); - } - return Future.value(true); - } - - @override - Widget build(BuildContext context) { - return WillPopScope( - onWillPop: _onBackPressed, - child: Scaffold( - appBar: AppBar( - title: const Text( - 'Home', - style: TextStyle(fontWeight: FontWeight.bold), - ), - actions: [ - IconButton( - icon: Icon( - _isDarkTheme ? Icons.dark_mode : Icons.light_mode, + builder: (theme, darkTheme) => BlocProvider( + create: (context) => IndexCubit(), + child: BlocBuilder( + builder: (context, index) { + return MaterialApp( + debugShowCheckedModeBanner: false, + title: 'Home', + theme: theme, + darkTheme: darkTheme, + home: Scaffold( + body: const [ + MyHomePage(), + ExplorePage(), + FavoritePage(), + AboutPage(), + ][index], + bottomNavigationBar: const BottomNavBar(), ), - onPressed: () { - setState(() { - _isDarkTheme = !_isDarkTheme; - }); - final themeMode = Theme.of(context).brightness == Brightness.dark - ? AdaptiveThemeMode.light - : AdaptiveThemeMode.dark; - AdaptiveTheme.of(context).setThemeMode(themeMode); + routes: { + AllRoutes.homeRoute: (context) => const MyHomePage(), + AllRoutes.atozRoute: (context) => const AtoZ(), + AllRoutes.birdsRoute: (context) => BirdsPage(), + AllRoutes.shapesRoute: (context) => const ShapesPage(), + AllRoutes.partsRoute: (context) => const PartsPage(), + AllRoutes.solarRoute: (context) => PlanetsPage(), + AllRoutes.animalRoute: (context) => AnimalsPage(), + AllRoutes.colourRoute: (context) => const ColoursPage(), + AllRoutes.aboutRoute: (context) => const AboutPage(), + AllRoutes.exploreRoute: (context) => const ExplorePage(), + AllRoutes.favoriteRoute: (context) => const FavoritePage(), }, - ), - ], - ), - body: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(38.0), - child: Column( - children: [ - GestureDetector( - onTap: () { - setState(() { - _isImageClicked1 = !_isImageClicked1; - }); - Future.delayed(const Duration(milliseconds: 300), () { - Navigator.pushNamed(context, AllRoutes.atozRoute); - }); - }, - child: AnimatedContainer( - duration: const Duration(milliseconds: 300), - curve: Curves.easeInOut, - height: _isImageClicked1 ? 325 : 350, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.black, width: 2), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.2), - spreadRadius: 2, - blurRadius: 5, - offset: const Offset(0, 3), - ), - ], - image: const DecorationImage( - image: AssetImage('assets/images/alphabets.jpg'), - fit: BoxFit.cover, - ), - ), - ), - ), - const SizedBox(height: 20), - const Text( - 'ALPHABETS', - style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), - ), - const Text("Learn A to Z with pronunciation and an example"), - const SizedBox( - height: 20, - ), - GestureDetector( - onTap: () { - setState(() { - _isImageClicked2 = !_isImageClicked2; - }); - Future.delayed(const Duration(milliseconds: 300), () { - Navigator.pushNamed(context, AllRoutes.animalRoute); - }); - }, - child: AnimatedContainer( - duration: const Duration(milliseconds: 300), - curve: Curves.easeInOut, - height: _isImageClicked2 ? 325 : 350, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.black, width: 2), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.2), - spreadRadius: 2, - blurRadius: 5, - offset: const Offset(0, 3), - ), - ], - image: const DecorationImage( - image: AssetImage('assets/images/animals.jpg'), - fit: BoxFit.cover, - ), - ), - ), - ), - const SizedBox(height: 20), - const Text( - 'ANIMALS', - style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), - ), - const Text("Learn about animals and their voices"), - const SizedBox( - height: 20, - ), - GestureDetector( - onTap: () { - setState(() { - _isImageClicked3 = !_isImageClicked3; - }); - Future.delayed(const Duration(milliseconds: 300), () { - Navigator.pushNamed(context, AllRoutes.partsRoute); - }); - }, - child: AnimatedContainer( - duration: const Duration(milliseconds: 300), - curve: Curves.easeInOut, - height: _isImageClicked3 ? 325 : 350, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.black, width: 2), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.2), - spreadRadius: 2, - blurRadius: 5, - offset: const Offset(0, 3), - ), - ], - image: const DecorationImage( - image: AssetImage('assets/body/body.jpg'), - fit: BoxFit.cover, - ), - ), - ), - ), - const SizedBox(height: 20), - const Text( - 'BODY PARTS', - style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), - ), - const Text("Know about body parts and their pronunciation."), - const SizedBox(height: 20), - GestureDetector( - onTap: () { - setState(() { - _isImageClicked4 = !_isImageClicked4; - }); - Future.delayed(const Duration(milliseconds: 300), () { - Navigator.pushNamed(context, AllRoutes.birdsRoute); - }); - }, - child: AnimatedContainer( - duration: const Duration(milliseconds: 300), - curve: Curves.easeInOut, - height: _isImageClicked4 ? 325 : 350, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.black, width: 2), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.2), - spreadRadius: 2, - blurRadius: 5, - offset: const Offset(0, 3), - ), - ], - image: const DecorationImage( - image: AssetImage('assets/images/birds.jpg'), - fit: BoxFit.cover, - ), - ), - ), - ), - const SizedBox(height: 20), - const Text( - 'BIRDS', - style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), - ), - const Text("Look out for Birds with their sounds."), - - const SizedBox(height: 20), - GestureDetector( - onTap: () { - setState(() { - _isImageClicked4 = !_isImageClicked4; - }); - Future.delayed(const Duration(milliseconds: 300), () { - Navigator.pushNamed(context, AllRoutes.colourRoute); - }); - }, - child: AnimatedContainer( - duration: const Duration(milliseconds: 300), - curve: Curves.easeInOut, - height: _isImageClicked4 ? 325 : 350, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.black, width: 2), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.2), - spreadRadius: 2, - blurRadius: 5, - offset: const Offset(0, 3), - ), - ], - image: const DecorationImage( - image: AssetImage('assets/images/colours/colors-cover.png'), - fit: BoxFit.cover, - ), - ), - ), - ), - const SizedBox(height: 20), - const Text( - 'COLOURS', - style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), - ), - const Text("Explore and learn about the colours!"), - - ], - ), - ), + ); + }, ), - drawer: const MyDrawer(), ), ); } } + + + diff --git a/lib/pages/explore.dart b/lib/pages/explore.dart new file mode 100644 index 0000000..5017895 --- /dev/null +++ b/lib/pages/explore.dart @@ -0,0 +1,18 @@ +import 'package:flutter/material.dart'; + +// Explore Page +// All the modules will be placed here like alphabets, animals, etc... +// TODO: Implement the Explore Page + +class ExplorePage extends StatelessWidget { + const ExplorePage({super.key}); + + @override + Widget build(BuildContext context) { + return const Scaffold( + body: Center( + child: Text("Explore Page"), + ) + ); + } +} \ No newline at end of file diff --git a/lib/pages/favorite.dart b/lib/pages/favorite.dart new file mode 100644 index 0000000..bebd58d --- /dev/null +++ b/lib/pages/favorite.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; + +class FavoritePage extends StatelessWidget { + const FavoritePage({super.key}); + + // Favorite Page + // All the favorited modules by the user will be placed here + // TODO: Implement the Favorite Page + + @override + Widget build(BuildContext context) { + return Center( + child: Text("Favorited Items here"), + ); + } +} \ No newline at end of file diff --git a/lib/pages/home.dart b/lib/pages/home.dart new file mode 100644 index 0000000..cb749e3 --- /dev/null +++ b/lib/pages/home.dart @@ -0,0 +1,273 @@ +import 'package:adaptive_theme/adaptive_theme.dart'; +import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:learn/main.dart'; + +import '../utils/routes.dart'; +import '../widgets/drawer.dart'; + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key}) : super(key: key); + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + bool _isImageClicked1 = false; + bool _isImageClicked2 = false; + bool _isImageClicked3 = false; + bool _isImageClicked4 = false; + bool _isDarkTheme = false; + + Future _onBackPressed() { + DateTime now = DateTime.now(); + if (currentBackPressTime == null || + now.difference(currentBackPressTime!) > const Duration(seconds: 2)) { + currentBackPressTime = now; + Fluttertoast.showToast( + msg: "Press back again to exit", + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + ); + return Future.value(false); + } + return Future.value(true); + } + + @override + Widget build(BuildContext context) { + return WillPopScope( + onWillPop: _onBackPressed, + child: Scaffold( + appBar: AppBar( + title: const Text( + 'Home', + style: TextStyle(fontWeight: FontWeight.bold), + ), + actions: [ + IconButton( + icon: Icon( + _isDarkTheme ? Icons.dark_mode : Icons.light_mode, + ), + onPressed: () { + setState(() { + _isDarkTheme = !_isDarkTheme; + }); + final themeMode = + Theme.of(context).brightness == Brightness.dark + ? AdaptiveThemeMode.light + : AdaptiveThemeMode.dark; + AdaptiveTheme.of(context).setThemeMode(themeMode); + }, + ), + ], + ), + body: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(38.0), + child: Column( + children: [ + GestureDetector( + onTap: () { + setState(() { + _isImageClicked1 = !_isImageClicked1; + }); + Future.delayed(const Duration(milliseconds: 300), () { + Navigator.pushNamed(context, AllRoutes.atozRoute); + }); + }, + child: AnimatedContainer( + duration: const Duration(milliseconds: 300), + curve: Curves.easeInOut, + height: _isImageClicked1 ? 325 : 350, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.black, width: 2), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + spreadRadius: 2, + blurRadius: 5, + offset: const Offset(0, 3), + ), + ], + image: const DecorationImage( + image: AssetImage('assets/images/alphabets.jpg'), + fit: BoxFit.cover, + ), + ), + ), + ), + const SizedBox(height: 20), + const Text( + 'ALPHABETS', + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), + ), + const Text("Learn A to Z with pronunciation and an example"), + const SizedBox( + height: 20, + ), + GestureDetector( + onTap: () { + setState(() { + _isImageClicked2 = !_isImageClicked2; + }); + Future.delayed(const Duration(milliseconds: 300), () { + Navigator.pushNamed(context, AllRoutes.animalRoute); + }); + }, + child: AnimatedContainer( + duration: const Duration(milliseconds: 300), + curve: Curves.easeInOut, + height: _isImageClicked2 ? 325 : 350, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.black, width: 2), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + spreadRadius: 2, + blurRadius: 5, + offset: const Offset(0, 3), + ), + ], + image: const DecorationImage( + image: AssetImage('assets/images/animals.jpg'), + fit: BoxFit.cover, + ), + ), + ), + ), + const SizedBox(height: 20), + const Text( + 'ANIMALS', + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), + ), + const Text("Learn about animals and their voices"), + const SizedBox( + height: 20, + ), + GestureDetector( + onTap: () { + setState(() { + _isImageClicked3 = !_isImageClicked3; + }); + Future.delayed(const Duration(milliseconds: 300), () { + Navigator.pushNamed(context, AllRoutes.partsRoute); + }); + }, + child: AnimatedContainer( + duration: const Duration(milliseconds: 300), + curve: Curves.easeInOut, + height: _isImageClicked3 ? 325 : 350, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.black, width: 2), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + spreadRadius: 2, + blurRadius: 5, + offset: const Offset(0, 3), + ), + ], + image: const DecorationImage( + image: AssetImage('assets/body/body.jpg'), + fit: BoxFit.cover, + ), + ), + ), + ), + const SizedBox(height: 20), + const Text( + 'BODY PARTS', + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), + ), + const Text("Know about body parts and their pronunciation."), + const SizedBox(height: 20), + GestureDetector( + onTap: () { + setState(() { + _isImageClicked4 = !_isImageClicked4; + }); + Future.delayed(const Duration(milliseconds: 300), () { + Navigator.pushNamed(context, AllRoutes.birdsRoute); + }); + }, + child: AnimatedContainer( + duration: const Duration(milliseconds: 300), + curve: Curves.easeInOut, + height: _isImageClicked4 ? 325 : 350, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.black, width: 2), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + spreadRadius: 2, + blurRadius: 5, + offset: const Offset(0, 3), + ), + ], + image: const DecorationImage( + image: AssetImage('assets/images/birds.jpg'), + fit: BoxFit.cover, + ), + ), + ), + ), + const SizedBox(height: 20), + const Text( + 'BIRDS', + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), + ), + const Text("Look out for Birds with their sounds."), + const SizedBox(height: 20), + GestureDetector( + onTap: () { + setState(() { + _isImageClicked4 = !_isImageClicked4; + }); + Future.delayed(const Duration(milliseconds: 300), () { + Navigator.pushNamed(context, AllRoutes.colourRoute); + }); + }, + child: AnimatedContainer( + duration: const Duration(milliseconds: 300), + curve: Curves.easeInOut, + height: _isImageClicked4 ? 325 : 350, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.black, width: 2), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + spreadRadius: 2, + blurRadius: 5, + offset: const Offset(0, 3), + ), + ], + image: const DecorationImage( + image: AssetImage( + 'assets/images/colours/colors-cover.png'), + fit: BoxFit.cover, + ), + ), + ), + ), + const SizedBox(height: 20), + const Text( + 'COLOURS', + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), + ), + const Text("Explore and learn about the colours!"), + ], + ), + ), + ), + drawer: const MyDrawer(), + ), + ); + } +} diff --git a/lib/pages/animals.dart b/lib/pages/modules/animals.dart similarity index 100% rename from lib/pages/animals.dart rename to lib/pages/modules/animals.dart diff --git a/lib/pages/atoz.dart b/lib/pages/modules/atoz.dart similarity index 100% rename from lib/pages/atoz.dart rename to lib/pages/modules/atoz.dart diff --git a/lib/pages/birds.dart b/lib/pages/modules/birds.dart similarity index 100% rename from lib/pages/birds.dart rename to lib/pages/modules/birds.dart diff --git a/lib/pages/colours.dart b/lib/pages/modules/colours.dart similarity index 100% rename from lib/pages/colours.dart rename to lib/pages/modules/colours.dart diff --git a/lib/pages/parts.dart b/lib/pages/modules/parts.dart similarity index 100% rename from lib/pages/parts.dart rename to lib/pages/modules/parts.dart diff --git a/lib/pages/shapes.dart b/lib/pages/modules/shapes.dart similarity index 100% rename from lib/pages/shapes.dart rename to lib/pages/modules/shapes.dart diff --git a/lib/pages/solar.dart b/lib/pages/modules/solar.dart similarity index 100% rename from lib/pages/solar.dart rename to lib/pages/modules/solar.dart diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index deed67b..b3159dc 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -1,8 +1,8 @@ import 'dart:ui'; -import '../pages/animals.dart'; -import '../pages/atoz.dart'; -import '../pages/birds.dart'; +import '../pages/modules/animals.dart'; +import '../pages/modules/atoz.dart'; +import '../pages/modules/birds.dart'; class AppConstants { static const List candidates = [ diff --git a/lib/utils/routes.dart b/lib/utils/routes.dart index eab793d..fa39316 100644 --- a/lib/utils/routes.dart +++ b/lib/utils/routes.dart @@ -1,7 +1,8 @@ - class AllRoutes { static String loginRoute = "/login"; static String homeRoute = "/home"; + static String exploreRoute = "/explore"; + static String favoriteRoute = "/favorite"; static String animalRoute = "/animals"; static String birdsRoute = "/birds"; static String shapesRoute = "/shapes"; @@ -10,5 +11,4 @@ class AllRoutes { static String atozRoute = "/atoz"; static String aboutRoute = "/about"; static String colourRoute = "/colours"; - } diff --git a/lib/widgets/navbar/navbar.dart b/lib/widgets/navbar/navbar.dart new file mode 100644 index 0000000..fa64c4b --- /dev/null +++ b/lib/widgets/navbar/navbar.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:learn/cubit/index_cubit.dart'; + +class BottomNavBar extends StatefulWidget { + const BottomNavBar({super.key}); + + @override + State createState() => _BottomNavBarState(); +} + +class _BottomNavBarState extends State { + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, index) { + final currentPageIndex = index; + return NavigationBar( + selectedIndex: currentPageIndex, + onDestinationSelected: (index) { + context.read().changeIndex(index); + }, + destinations: const [ + NavigationDestination( + icon: Icon(Icons.home_rounded), + label: "Home", + ), + NavigationDestination( + icon: Icon(Icons.search_rounded), + label: "Explore", + ), + NavigationDestination( + icon: Icon(Icons.favorite_rounded), + label: "Favorite", + ), + NavigationDestination( + icon: Icon(Icons.person_rounded), + label: "About", + ), + ], + ); + }, + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index b1849e9..cd7e9d7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.0" async: dependency: transitive description: @@ -29,10 +29,18 @@ packages: dependency: transitive description: name: audio_session - sha256: "6fdf255ed3af86535c96452c33ecff1245990bb25a605bfb1958661ccc3d467f" + sha256: a49af9981eec5d7cd73b37bacb6ee73f8143a6a9f9bd5b6021e6c346b9b6cf4e url: "https://pub.dev" source: hosted - version: "0.1.18" + version: "0.1.19" + bloc: + dependency: transitive + description: + name: bloc + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" + url: "https://pub.dev" + source: hosted + version: "8.1.4" boolean_selector: dependency: transitive description: @@ -93,10 +101,10 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" file: dependency: transitive description: @@ -118,14 +126,22 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 + url: "https://pub.dev" + source: hosted + version: "8.1.5" flutter_card_swiper: dependency: "direct main" description: name: flutter_card_swiper - sha256: "05bbbc11a0f57a6b9294cebe857d4d3dfdfbdad4e1628f4dc910c317d9684319" + sha256: "880ad669017154d6d1f8c3abd861db08af97b3b7b0f7d7d5cbde690a9253811d" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.1" flutter_lints: dependency: "direct dev" description: @@ -138,10 +154,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -172,18 +188,26 @@ packages: dependency: "direct main" description: name: google_fonts - sha256: f0b8d115a13ecf827013ec9fc883390ccc0e87a96ed5347a3114cac177ef18e8 + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 + url: "https://pub.dev" + source: hosted + version: "6.2.1" + google_nav_bar: + dependency: "direct main" + description: + name: google_nav_bar + sha256: "1c8e3882fa66ee7b74c24320668276ca23affbd58f0b14a24c1e5590f4d07ab0" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "5.0.6" http: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" http_parser: dependency: transitive description: @@ -196,10 +220,10 @@ packages: dependency: "direct main" description: name: just_audio - sha256: b607cd1a43bac03d85c3aaee00448ff4a589ef2a77104e3d409889ff079bf823 + sha256: b7cb6bbf3750caa924d03f432ba401ec300fd90936b3f73a9b33d58b1e96286b url: "https://pub.dev" source: hosted - version: "0.9.36" + version: "0.9.37" just_audio_platform_interface: dependency: transitive description: @@ -272,6 +296,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.11.0" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" path: dependency: transitive description: @@ -292,26 +324,26 @@ packages: dependency: transitive description: name: path_provider - sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b + sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.4" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" + sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" path_provider_linux: dependency: transitive description: @@ -360,6 +392,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + provider: + dependency: transitive + description: + name: provider + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + url: "https://pub.dev" + source: hosted + version: "6.1.2" rxdart: dependency: transitive description: @@ -372,26 +412,26 @@ packages: dependency: transitive description: name: shared_preferences - sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.3" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.2.2" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" + sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" url: "https://pub.dev" source: hosted - version: "2.3.5" + version: "2.4.0" shared_preferences_linux: dependency: transitive description: @@ -412,10 +452,10 @@ packages: dependency: transitive description: name: shared_preferences_web - sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.3.0" shared_preferences_windows: dependency: transitive description: @@ -497,26 +537,26 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c + sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" url: "https://pub.dev" source: hosted - version: "6.2.4" + version: "6.2.6" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f" + sha256: "360a6ed2027f18b73c8d98e159dda67a61b7f2e0f6ec26e86c3ada33b0621775" url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.3.1" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + sha256: "7068716403343f6ba4969b4173cbf3b84fc768042124bc2c011e5d782b24fe89" url: "https://pub.dev" source: hosted - version: "6.2.4" + version: "6.3.0" url_launcher_linux: dependency: transitive description: @@ -529,26 +569,26 @@ packages: dependency: transitive description: name: url_launcher_macos - sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.2.0" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.1" url_launcher_windows: dependency: transitive description: @@ -561,34 +601,34 @@ packages: dependency: transitive description: name: uuid - sha256: cd210a09f7c18cbe5a02511718e0334de6559871052c90a90c0cca46a4aa81c8 + sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" url: "https://pub.dev" source: hosted - version: "4.3.3" + version: "4.4.0" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" url: "https://pub.dev" source: hosted - version: "1.1.10+1" + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -609,18 +649,18 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" win32: dependency: transitive description: name: win32 - sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" + sha256: "0eaf06e3446824099858367950a813472af675116bf63f008a4c2a75ae13e9cb" url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "5.5.0" xdg_directories: dependency: transitive description: @@ -638,5 +678,5 @@ packages: source: hosted version: "6.5.0" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.19.2" diff --git a/pubspec.yaml b/pubspec.yaml index 0e1c10e..1488252 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -43,6 +43,8 @@ dependencies: flutter_card_swiper: ^7.0.0 adaptive_theme: ^3.6.0 fluttertoast: ^8.2.5 + google_nav_bar: ^5.0.6 + flutter_bloc: ^8.1.5 dev_dependencies: flutter_test: