Implemented Navigation

This commit is contained in:
Mohammad Salameh
2024-02-14 13:26:09 +03:00
parent 2707124a10
commit 3f1f8e72b3
13 changed files with 191 additions and 75 deletions
+22 -1
View File
@@ -1,3 +1,24 @@
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 SceneProvider extends ChangeNotifier {}
class HomeProvider extends ChangeNotifier {
int pageIndex = 0;
final List<Widget> 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();
}
}
@@ -0,0 +1,15 @@
import 'package:flutter/material.dart';
class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget {
const DefaultAppBar({super.key});
@override
Widget build(BuildContext context) {
return AppBar(
title: const Text('Syncrow'),
);
}
@override
Size get preferredSize => const Size.fromHeight(50);
}
+14 -40
View File
@@ -1,6 +1,9 @@
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});
@@ -8,46 +11,17 @@ class HomeView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (BuildContext context) => SceneProvider(),
builder: (context, child) => Scaffold(
appBar: AppBar(
title: const Text('Syncrow'),
),
body: const Center(
child: Text('Home'),
),
bottomNavigationBar: BottomNavigationBar(
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',
),
],
),
create: (BuildContext context) => HomeProvider(),
builder: (context, child) => Consumer<HomeProvider>(
builder: (context, provider, child) {
return Scaffold(
appBar: const DefaultAppBar(),
body: provider.pageIndex == 0
? const HomeViewBody()
: provider.currentPage,
bottomNavigationBar: const DefaultNavBar(),
);
},
),
);
}
@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
class HomeViewBody extends StatelessWidget {
const HomeViewBody({
super.key,
});
@override
Widget build(BuildContext context) {
return const Center(
child: Text('Home'),
);
}
}
+3 -7
View File
@@ -10,13 +10,9 @@ class ProfileView extends StatelessWidget {
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (BuildContext context) => ProfileProvider(),
builder: (context, child) => _buildPage(context),
builder: (context, child) => const Center(
child: Text('Profile'),
),
);
}
Widget _buildPage(BuildContext context) {
final provider = context.read<ProfileProvider>();
return Container();
}
}
+2 -11
View File
@@ -1,21 +1,12 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:syncrow_app/features/home/provider/provider.dart';
class SceneView extends StatelessWidget {
const SceneView({super.key});
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (BuildContext context) => SceneProvider(),
builder: (context, child) => _buildPage(context),
return const Center(
child: Text('Scene'),
);
}
Widget _buildPage(BuildContext context) {
final provider = context.read<SceneProvider>();
return Container();
}
}
@@ -0,0 +1,58 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:syncrow_app/features/home/provider/provider.dart';
class DefaultNavBar extends StatelessWidget {
const DefaultNavBar({
super.key,
});
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (BuildContext context) => HomeProvider(),
child: BottomNavigationBar(
onTap: (int index) {
context.read<HomeProvider>().updatePageIndex(index, context);
},
currentIndex: context.watch<HomeProvider>().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',
),
],
),
);
}
}
+3 -7
View File
@@ -10,13 +10,9 @@ class SmartView extends StatelessWidget {
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (BuildContext context) => SmartProvider(),
builder: (context, child) => _buildPage(context),
builder: (context, child) => const Center(
child: Text('Smart'),
),
);
}
Widget _buildPage(BuildContext context) {
final provider = context.read<SmartProvider>();
return Container();
}
}
+29
View File
@@ -0,0 +1,29 @@
import 'package:flutter/material.dart';
import 'package:syncrow_app/navigation/route_manager.dart';
import 'package:syncrow_app/navigation/routing_constants.dart';
class SplashView extends StatelessWidget {
const SplashView({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
icon: const Icon(Icons.arrow_forward),
onPressed: () {
RouteManager().routerManagerPopAndPushNamed(
routeName: Routes.homeRoute,
context: context,
);
},
),
],
),
body: const Center(
child: Text('Splash Screen'),
),
);
}
}