change bottom bar navigation
parent
55de147885
commit
6d8289a0d4
@ -0,0 +1,98 @@
|
||||
import 'package:doctor_app_flutter/screens/dashboard_screen.dart';
|
||||
import 'package:doctor_app_flutter/screens/doctor/message_screen.dart';
|
||||
import 'package:doctor_app_flutter/screens/doctor/my_schedule_screen.dart';
|
||||
import 'package:doctor_app_flutter/screens/doctor/services_screen.dart';
|
||||
import 'package:doctor_app_flutter/widgets/shared/app_drawer_widget.dart';
|
||||
import 'package:doctor_app_flutter/widgets/shared/bottom_nav_bar.dart';
|
||||
import 'package:doctor_app_flutter/widgets/shared/profile_image_widget.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hexcolor/hexcolor.dart';
|
||||
|
||||
|
||||
class LandingPage extends StatefulWidget {
|
||||
@override
|
||||
_LandingPageState createState() => _LandingPageState();
|
||||
}
|
||||
|
||||
class _LandingPageState extends State<LandingPage> {
|
||||
int currentTab = 0;
|
||||
PageController pageController;
|
||||
|
||||
_changeCurrentTab(int tab) {
|
||||
setState(() {
|
||||
currentTab = tab;
|
||||
pageController.jumpToPage(tab);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
pageController = new PageController(keepPage: true);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
elevation: 0,
|
||||
backgroundColor: Hexcolor('#515B5D'),
|
||||
textTheme: TextTheme(
|
||||
headline6: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
|
||||
title: Text(getText(currentTab).toUpperCase()),
|
||||
leading: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return IconButton(
|
||||
icon: Icon(Icons.menu),
|
||||
color: Colors.white,
|
||||
onPressed: () => Scaffold.of(context).openDrawer(),
|
||||
);
|
||||
},
|
||||
),
|
||||
centerTitle: true,
|
||||
actions: <Widget>[
|
||||
ProfileImageWidget(
|
||||
height: 50,
|
||||
width: 50,
|
||||
url:
|
||||
"https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png",
|
||||
)
|
||||
],
|
||||
),
|
||||
drawer: Theme(
|
||||
data: Theme.of(context).copyWith(
|
||||
canvasColor: Colors.transparent,
|
||||
),
|
||||
child: SafeArea(child: AppDrawer()),
|
||||
),
|
||||
extendBody: true,
|
||||
body: PageView(
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
controller: pageController,
|
||||
children: [
|
||||
DashboardScreen(),
|
||||
MessagesScreen(),
|
||||
MyScheduleScreen(),
|
||||
ServicesScreen()
|
||||
],
|
||||
),
|
||||
bottomNavigationBar: BottomNavBar(changeIndex: _changeCurrentTab),
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
getText(currentTab) {
|
||||
switch (currentTab) {
|
||||
case 0:
|
||||
return "HOME";
|
||||
case 1:
|
||||
return "REPLAY";
|
||||
case 2:
|
||||
return "SCHEDULE";
|
||||
case 3:
|
||||
return 'SERVICES';
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,75 @@
|
||||
import 'package:doctor_app_flutter/presentation/doctor_app_icons.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'bottom_navigation_item.dart';
|
||||
|
||||
class BottomNavBar extends StatefulWidget {
|
||||
final ValueChanged<int> changeIndex;
|
||||
|
||||
BottomNavBar({Key key, this.changeIndex}) : super(key: key);
|
||||
|
||||
@override
|
||||
_BottomNavBarState createState() => _BottomNavBarState();
|
||||
}
|
||||
|
||||
class _BottomNavBarState extends State<BottomNavBar> {
|
||||
int _index = 0;
|
||||
|
||||
_changeIndex(int index) {
|
||||
widget.changeIndex(index);
|
||||
setState(() {
|
||||
_index = index;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BottomAppBar(
|
||||
elevation: 4,
|
||||
shape: CircularNotchedRectangle(),
|
||||
color: Colors.white,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 18),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
BottomNavigationItem(
|
||||
icon: DoctorApp.home_icon,
|
||||
activeIcon: DoctorApp.home_icon_active,
|
||||
changeIndex: _changeIndex,
|
||||
index: _index,
|
||||
currentIndex: 0,
|
||||
name: 'HOME',
|
||||
),
|
||||
BottomNavigationItem(
|
||||
icon: DoctorApp.message_icon,
|
||||
activeIcon: DoctorApp.message_icon_active,
|
||||
changeIndex: _changeIndex,
|
||||
index: _index,
|
||||
currentIndex: 1,
|
||||
name: 'REPLAY',
|
||||
),
|
||||
BottomNavigationItem(
|
||||
icon: DoctorApp.schedule_icon,
|
||||
activeIcon: DoctorApp.scdedule_icon_active,
|
||||
changeIndex: _changeIndex,
|
||||
index: _index,
|
||||
currentIndex: 2,
|
||||
name: 'SCHEDULE',
|
||||
),
|
||||
BottomNavigationItem(
|
||||
icon: DoctorApp.menu_icon,
|
||||
activeIcon: DoctorApp.menu_icon_active,
|
||||
changeIndex: _changeIndex,
|
||||
index: _index,
|
||||
currentIndex: 3,
|
||||
name: 'SERVICES',
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,68 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class BottomNavigationItem extends StatelessWidget {
|
||||
final IconData icon;
|
||||
final IconData activeIcon;
|
||||
final ValueChanged<int> changeIndex;
|
||||
final int index;
|
||||
final int currentIndex;
|
||||
final String name;
|
||||
|
||||
BottomNavigationItem(
|
||||
{this.icon,
|
||||
this.activeIcon,
|
||||
this.changeIndex,
|
||||
this.index,
|
||||
this.currentIndex,
|
||||
this.name});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Expanded(
|
||||
child: SizedBox(
|
||||
height: 70.0,
|
||||
child: Material(
|
||||
type: MaterialType.transparency,
|
||||
child: InkWell(
|
||||
highlightColor: Colors.transparent,
|
||||
splashColor: Colors.transparent,
|
||||
onTap: () => changeIndex(currentIndex),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
SizedBox(height: 15,),
|
||||
Container(
|
||||
// decoration: BoxDecoration(boxShadow: [
|
||||
// BoxShadow(
|
||||
// color: currentIndex == index
|
||||
// ? Color.fromRGBO(78, 62, 253, 0.4)
|
||||
// : Color.fromRGBO(78, 62, 253, 0),
|
||||
// blurRadius: 9.0,
|
||||
// spreadRadius: -4.0,
|
||||
// offset: Offset(0.0, 2.0))
|
||||
// ]),
|
||||
child: Icon(currentIndex == index ? activeIcon : icon,
|
||||
/*color: currentIndex == index
|
||||
? Theme.of(context).primaryColor
|
||||
: Theme.of(context).dividerColor,*/
|
||||
size: 22.0),
|
||||
),
|
||||
SizedBox(height: 5,),
|
||||
Text(
|
||||
name,
|
||||
style: TextStyle(
|
||||
color: currentIndex == index
|
||||
? Theme.of(context).primaryColor
|
||||
: Theme.of(context).dividerColor,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue