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