diff --git a/lib/features/home/home_provider.dart b/lib/features/home/home_provider.dart new file mode 100644 index 0000000..7011d66 --- /dev/null +++ b/lib/features/home/home_provider.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; +import 'package:syncrow_app/features/profile/profile_view.dart'; +import 'package:syncrow_app/features/scene/scene_view.dart'; +import 'package:syncrow_app/features/smart/smart_view.dart'; + +import 'home_state.dart'; +import 'widgets/home_view_body.dart'; + +class HomeProvider extends ChangeNotifier { + final state = HomeState(); + + static int pageIndex = 0; + + var bottomNavItems = [ + const BottomNavigationBarItem( + icon: Icon(Icons.home_outlined), + label: 'Home', + ), + const BottomNavigationBarItem( + icon: Icon(Icons.check_box_outlined), + label: 'Scene', + ), + const BottomNavigationBarItem( + icon: Icon(Icons.view_in_ar), + label: 'Smart', + ), + const BottomNavigationBarItem( + icon: Icon(Icons.account_circle), + label: 'Profile', + ), + ]; + + final List pages = [ + const HomeViewBody(), + const ScenePage(), + const SmartPage(), + const ProfilePage(), + ]; + + Widget currentPage() { + return pages[pageIndex]; + } + + void updatePageIndex(int index, BuildContext context) { + pageIndex = index; + notifyListeners(); + } +} diff --git a/lib/features/home/home_state.dart b/lib/features/home/home_state.dart new file mode 100644 index 0000000..5683482 --- /dev/null +++ b/lib/features/home/home_state.dart @@ -0,0 +1,5 @@ +class HomeState { + HomeState() { + // init some variables + } +} diff --git a/lib/features/home/view/home_view.dart b/lib/features/home/home_view.dart similarity index 51% rename from lib/features/home/view/home_view.dart rename to lib/features/home/home_view.dart index 16ca50a..dd4ced9 100644 --- a/lib/features/home/view/home_view.dart +++ b/lib/features/home/home_view.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:syncrow_app/features/home/provider/provider.dart'; -import 'package:syncrow_app/features/home/view/default_app_bar.dart'; -import 'package:syncrow_app/features/home/view/home_view_body.dart'; -import 'package:syncrow_app/features/shared_widgets/default_nav_bar.dart'; -class HomeView extends StatelessWidget { - const HomeView({super.key}); +import '../shared_widgets/default_nav_bar.dart'; +import 'home_provider.dart'; +import 'widgets/default_app_bar.dart'; + +class HomePage extends StatelessWidget { + const HomePage({super.key}); @override Widget build(BuildContext context) { @@ -16,9 +16,7 @@ class HomeView extends StatelessWidget { builder: (context, provider, child) { return Scaffold( appBar: const DefaultAppBar(), - body: provider.pageIndex == 0 - ? const HomeViewBody() - : provider.currentPage, + body: provider.currentPage(), bottomNavigationBar: const DefaultNavBar(), ); }, diff --git a/lib/features/home/models/home_model.dart b/lib/features/home/models/home_model.dart deleted file mode 100644 index 37135b3..0000000 --- a/lib/features/home/models/home_model.dart +++ /dev/null @@ -1,3 +0,0 @@ -class HomeModel { - -} diff --git a/lib/features/home/provider/provider.dart b/lib/features/home/provider/provider.dart deleted file mode 100644 index aa35a53..0000000 --- a/lib/features/home/provider/provider.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:syncrow_app/features/home/view/home_view.dart'; -import 'package:syncrow_app/features/profile/view/profile_view.dart'; -import 'package:syncrow_app/features/scene/view/scene_view.dart'; -import 'package:syncrow_app/features/smart/view/smart_view.dart'; - -class HomeProvider extends ChangeNotifier { - int pageIndex = 0; - - final List pages = [ - const HomeView(), - const SceneView(), - const SmartView(), - const ProfileView(), - ]; - - //get current page - Widget get currentPage => pages[pageIndex]; - - void updatePageIndex(int index, BuildContext context) { - pageIndex = index; - notifyListeners(); - } -} diff --git a/lib/features/home/view/default_app_bar.dart b/lib/features/home/widgets/default_app_bar.dart similarity index 100% rename from lib/features/home/view/default_app_bar.dart rename to lib/features/home/widgets/default_app_bar.dart diff --git a/lib/features/home/view/home_view_body.dart b/lib/features/home/widgets/home_view_body.dart similarity index 100% rename from lib/features/home/view/home_view_body.dart rename to lib/features/home/widgets/home_view_body.dart diff --git a/lib/features/profile/profile_provider.dart b/lib/features/profile/profile_provider.dart new file mode 100644 index 0000000..fbf17fc --- /dev/null +++ b/lib/features/profile/profile_provider.dart @@ -0,0 +1,7 @@ +import 'package:flutter/material.dart'; + +import 'profile_state.dart'; + +class ProfileProvider extends ChangeNotifier { + final state = ProfileState(); +} diff --git a/lib/features/profile/profile_state.dart b/lib/features/profile/profile_state.dart new file mode 100644 index 0000000..77b6db4 --- /dev/null +++ b/lib/features/profile/profile_state.dart @@ -0,0 +1,6 @@ +class ProfileState { + + ProfileState() { + // init some variables + } +} diff --git a/lib/features/profile/view/profile_view.dart b/lib/features/profile/profile_view.dart similarity index 66% rename from lib/features/profile/view/profile_view.dart rename to lib/features/profile/profile_view.dart index be3be2e..1e3ce43 100644 --- a/lib/features/profile/view/profile_view.dart +++ b/lib/features/profile/profile_view.dart @@ -1,17 +1,17 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import '../provider/profile_provider.dart'; +import 'profile_provider.dart'; -class ProfileView extends StatelessWidget { - const ProfileView({super.key}); +class ProfilePage extends StatelessWidget { + const ProfilePage({super.key}); @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (BuildContext context) => ProfileProvider(), builder: (context, child) => const Center( - child: Text('Profile'), + child: Text('Profile Page'), ), ); } diff --git a/lib/features/profile/provider/profile_provider.dart b/lib/features/profile/provider/profile_provider.dart deleted file mode 100644 index 7993b5f..0000000 --- a/lib/features/profile/provider/profile_provider.dart +++ /dev/null @@ -1,3 +0,0 @@ -import 'package:flutter/material.dart'; - -class ProfileProvider extends ChangeNotifier {} diff --git a/lib/features/scene/models/scene_model.dart b/lib/features/scene/models/scene_model.dart deleted file mode 100644 index e69de29..0000000 diff --git a/lib/features/scene/provider/provider.dart b/lib/features/scene/scene_provider.dart similarity index 60% rename from lib/features/scene/provider/provider.dart rename to lib/features/scene/scene_provider.dart index 5fb4e2e..152ce71 100644 --- a/lib/features/scene/provider/provider.dart +++ b/lib/features/scene/scene_provider.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; -class SceneProvider extends ChangeNotifier { +import 'scene_state.dart'; +class SceneProvider extends ChangeNotifier { + final state = SceneState(); } diff --git a/lib/features/scene/scene_state.dart b/lib/features/scene/scene_state.dart new file mode 100644 index 0000000..50d0764 --- /dev/null +++ b/lib/features/scene/scene_state.dart @@ -0,0 +1,6 @@ +class SceneState { + + SceneState() { + // init some variables + } +} diff --git a/lib/features/scene/scene_view.dart b/lib/features/scene/scene_view.dart new file mode 100644 index 0000000..bf4e920 --- /dev/null +++ b/lib/features/scene/scene_view.dart @@ -0,0 +1,18 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import 'scene_provider.dart'; + +class ScenePage extends StatelessWidget { + const ScenePage({super.key}); + + @override + Widget build(BuildContext context) { + return ChangeNotifierProvider( + create: (BuildContext context) => SceneProvider(), + builder: (context, child) => const Center( + child: Text('Scene Page'), + ), + ); + } +} diff --git a/lib/features/scene/view/scene_view.dart b/lib/features/scene/view/scene_view.dart deleted file mode 100644 index 135334b..0000000 --- a/lib/features/scene/view/scene_view.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:flutter/material.dart'; - -class SceneView extends StatelessWidget { - const SceneView({super.key}); - - @override - Widget build(BuildContext context) { - return const Center( - child: Text('Scene'), - ); - } -} diff --git a/lib/features/shared_widgets/default_nav_bar.dart b/lib/features/shared_widgets/default_nav_bar.dart index 514e05d..ec49627 100644 --- a/lib/features/shared_widgets/default_nav_bar.dart +++ b/lib/features/shared_widgets/default_nav_bar.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:syncrow_app/features/home/provider/provider.dart'; + +import '../home/home_provider.dart'; class DefaultNavBar extends StatelessWidget { const DefaultNavBar({ @@ -9,50 +10,21 @@ class DefaultNavBar extends StatelessWidget { @override Widget build(BuildContext context) { - return ChangeNotifierProvider( - create: (BuildContext context) => HomeProvider(), - child: BottomNavigationBar( - onTap: (int index) { - context.read().updatePageIndex(index, context); - }, - currentIndex: context.watch().pageIndex, - selectedIconTheme: const IconThemeData( - color: Colors.black, - ), - selectedLabelStyle: const TextStyle( - color: Colors.black, - ), - items: const [ - BottomNavigationBarItem( - icon: Icon( - Icons.home_outlined, - color: Colors.grey, - ), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon( - Icons.view_in_ar, - color: Colors.grey, - ), - label: 'Scene', - ), - BottomNavigationBarItem( - icon: Icon( - Icons.smart_toy_outlined, - color: Colors.grey, - ), - label: 'Smart', - ), - BottomNavigationBarItem( - icon: Icon( - Icons.account_circle, - color: Colors.grey, - ), - label: 'Account', - ), - ], - ), + return Consumer( + builder: (context, provider, child) { + return BottomNavigationBar( + onTap: (int index) => provider.updatePageIndex(index, context), + currentIndex: HomeProvider.pageIndex, + selectedItemColor: Colors.black, + unselectedItemColor: Colors.grey, + elevation: 10, + items: provider.bottomNavItems, + ); + }, ); } } + +class DefaultBottomNavBarItem extends BottomNavigationBarItem { + DefaultBottomNavBarItem({required super.icon}); +} diff --git a/lib/features/smart/provider/smart_provider.dart b/lib/features/smart/provider/smart_provider.dart deleted file mode 100644 index 84303c8..0000000 --- a/lib/features/smart/provider/smart_provider.dart +++ /dev/null @@ -1,3 +0,0 @@ -import 'package:flutter/material.dart'; - -class SmartProvider extends ChangeNotifier {} diff --git a/lib/features/smart/smart_provider.dart b/lib/features/smart/smart_provider.dart new file mode 100644 index 0000000..02a82c9 --- /dev/null +++ b/lib/features/smart/smart_provider.dart @@ -0,0 +1,7 @@ +import 'package:flutter/material.dart'; + +import 'smart_state.dart'; + +class SmartProvider extends ChangeNotifier { + final state = SmartState(); +} diff --git a/lib/features/smart/smart_state.dart b/lib/features/smart/smart_state.dart new file mode 100644 index 0000000..c3cec9a --- /dev/null +++ b/lib/features/smart/smart_state.dart @@ -0,0 +1,6 @@ +class SmartState { + + SmartState() { + // init some variables + } +} diff --git a/lib/features/smart/view/smart_view.dart b/lib/features/smart/smart_view.dart similarity index 67% rename from lib/features/smart/view/smart_view.dart rename to lib/features/smart/smart_view.dart index 56d1496..0abdfbe 100644 --- a/lib/features/smart/view/smart_view.dart +++ b/lib/features/smart/smart_view.dart @@ -1,17 +1,17 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import '../provider/smart_provider.dart'; +import 'smart_provider.dart'; -class SmartView extends StatelessWidget { - const SmartView({super.key}); +class SmartPage extends StatelessWidget { + const SmartPage({super.key}); @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (BuildContext context) => SmartProvider(), builder: (context, child) => const Center( - child: Text('Smart'), + child: Text('Smart Page'), ), ); } diff --git a/lib/navigation/router.dart b/lib/navigation/router.dart index 056b722..165f05c 100644 --- a/lib/navigation/router.dart +++ b/lib/navigation/router.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:syncrow_app/features/home/view/home_view.dart'; -import 'package:syncrow_app/features/profile/view/profile_view.dart'; -import 'package:syncrow_app/features/scene/view/scene_view.dart'; -import 'package:syncrow_app/features/smart/view/smart_view.dart'; +import 'package:syncrow_app/features/home/home_view.dart'; +import 'package:syncrow_app/features/profile/profile_view.dart'; +import 'package:syncrow_app/features/scene/scene_view.dart'; +import 'package:syncrow_app/features/smart/smart_view.dart'; import 'package:syncrow_app/features/splash/splash_view.dart'; import 'routing_constants.dart'; @@ -16,19 +16,19 @@ class Router { case Routes.homeRoute: return MaterialPageRoute( - builder: (_) => const HomeView(), settings: settings); + builder: (_) => const HomePage(), settings: settings); case Routes.profileRoute: return MaterialPageRoute( - builder: (_) => const ProfileView(), settings: settings); + builder: (_) => const ProfilePage(), settings: settings); case Routes.sceneRoute: return MaterialPageRoute( - builder: (_) => const SceneView(), settings: settings); + builder: (_) => const ScenePage(), settings: settings); case Routes.smartRoute: return MaterialPageRoute( - builder: (_) => const SmartView(), settings: settings); + builder: (_) => const SmartPage(), settings: settings); default: return MaterialPageRoute(