Merge branch 'mohammad' into 'development'
Mohammad See merge request Cloud_Solution/doctor_app_flutter!100merge-requests/101/head
commit
ec81a16c0d
@ -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,102 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:doctor_app_flutter/config/config.dart';
|
||||
import 'package:doctor_app_flutter/config/size_config.dart';
|
||||
import 'package:doctor_app_flutter/providers/auth_provider.dart';
|
||||
import 'package:doctor_app_flutter/providers/patients_provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hexcolor/hexcolor.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ShowTimerText extends StatefulWidget {
|
||||
ShowTimerText({Key key, this.model});
|
||||
final model;
|
||||
|
||||
@override
|
||||
_ShowTimerTextState createState() => _ShowTimerTextState();
|
||||
}
|
||||
|
||||
class _ShowTimerTextState extends State<ShowTimerText> {
|
||||
String timerText = (TIMER_MIN - 1).toString() + ':59';
|
||||
int min = TIMER_MIN - 1;
|
||||
int sec = 59;
|
||||
Timer _timer;
|
||||
|
||||
AuthProvider authProv;
|
||||
|
||||
resendCode() {
|
||||
min = TIMER_MIN - 1;
|
||||
sec = 59;
|
||||
_timer = Timer.periodic(Duration(seconds: 1), (Timer timer) {
|
||||
if (min <= 0 && sec <= 0) {
|
||||
timer.cancel();
|
||||
} else {
|
||||
setState(() {
|
||||
sec = sec - 1;
|
||||
if (sec == 0 && min == 0) {
|
||||
min = 0;
|
||||
sec = 0;
|
||||
} else if (sec == 0) {
|
||||
min = min - 1;
|
||||
sec = 59;
|
||||
}
|
||||
timerText = min.toString() + ':' + sec.toString();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
resendCode();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_timer.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
authProv = Provider.of<AuthProvider>(context);
|
||||
return Center(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
InkWell(
|
||||
onTap: min != 0 || sec != 0
|
||||
? null
|
||||
: () {
|
||||
resendActivatioinCode();
|
||||
},
|
||||
child: Text(
|
||||
min == 0 && sec == 0 ? 'Resend Login Code' : timerText,
|
||||
style: TextStyle(
|
||||
fontSize: 3.0 * SizeConfig.textMultiplier,
|
||||
color:
|
||||
min == 0 && sec == 0 ? Colors.blue : Hexcolor('#B8382C'),
|
||||
fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
resendActivatioinCode() {
|
||||
authProv
|
||||
.sendActivationCodeByOtpNotificationType(widget.model)
|
||||
.then((res) => {
|
||||
// print('$value')
|
||||
if (res['MessageStatus'] == 1)
|
||||
{resendCode()}
|
||||
else
|
||||
{helpers.showErrorToast(res['ErrorEndUserMessage'])}
|
||||
})
|
||||
.catchError((err) {
|
||||
helpers.showErrorToast();
|
||||
});
|
||||
}
|
||||
}
|
@ -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