Merge branch 'development_new_design_2.0' of https://gitlab.com/Cloud_Solution/diplomatic-quarter into development_new_design_2.0

# Conflicts:
#	lib/pages/MyAppointments/AppointmentDetails.dart
merge-requests/390/head
haroon amjad 3 years ago
commit 9cf9e297cf

@ -1394,6 +1394,25 @@ const Map localizedValues = {
"enter-passport-number": {"en": "Please confirm or update your passport number:", "ar": "الرجاء تأكيد أو تحديث رقم جواز السفر الخاص بك:"},
"valid-passport-number": {"en": "Please enter valid passport number", "ar": "الرجاء إدخال رقم جواز سفر صالح"},
"continue-plan": {"en": "Continue with the treatment plan?", "ar": "إكمال الخطة العلاجية؟"},
"about-app": {"en": "About the app", "ar": "عن التطبيق"},
"about-points": {
"length": {"en": "16", "ar": "16"},
"1": {"en": "Online Appointment Booking & rescheduling", "ar": "حجز المواعيد إلكترونياً و إعادة جدولتها"},
"2": {"en": "Insurance approval status", "ar": "موافقات شركات التأمين الطبية"},
"3": {"en": "Find A doctor", "ar": "معلومات الأطباء والبحث عنهم وسؤالهم"},
"4": {"en": "Ask your doctor", "ar": "اسأل طبيبك"},
"5": {"en": "Medical prescriptions", "ar": "الوصفات الطبية"},
"6": {"en": "Lab results", "ar": "نتائج التحاليل المخبرية"},
"7": {"en": "Hospitals contact numbers", "ar": "أرقام هواتف جميع المستشفيات"},
"8": {"en": "Doctor profiles", "ar": "ملف الطبيب"},
"9": {"en": "Hospitals locations", "ar": "مواقع المستشفيات على الخريطة"},
"10": {"en": "Pharmacies Locations", "ar": "مواقع الصيدليات على الخريطة"},
"11": {"en": "Hospital's Virtual Tour", "ar": "جولة افتراضية داخل المستشفيات"},
"12": {"en": "Official Social Media", "ar": "مواقع التواصل الاجتماعي الخاصة بالمجموعة"},
"13": {"en": "Vaccines Schedule", "ar": "جدول التطعيمات"},
"14": {"en": "Health Calculators", "ar": "حاسبات صحية"},
"15": {"en": "Other Services", "ar": "خدمات أخرى"}
},
"dental-procedure-list": {"en": "Dental Procedures for this Appointment: ", "ar": "إجراءات الأسنان لهذا الموعد:"},
"time-needed": {"en": "Time Needed:", "ar": "الوقت اللازم:"},
"total-time-needed": {"en": "Total Appointment Time:", "ar": "وقت المواعيد الكلي:"},

@ -32,3 +32,4 @@ const PHARMACY_AUTORZIE_TOKEN = 'PHARMACY_AUTORZIE_TOKEN';
const H2O_UNIT = 'H2O_UNIT';
const H2O_REMINDER = 'H2O_REMINDER';
const LIVECARE_CLINIC_DATA = 'LIVECARE_CLINIC_DATA';
const DOCTOR_SCHEDULE_DATE_SEL = 'DOCTOR_SCHEDULE_DATE_SEL';

@ -9,6 +9,7 @@ import 'package:diplomaticquarterapp/pages/MyAppointments/models/DoctorScheduleR
class MedicalService extends BaseService {
List<AppoitmentAllHistoryResultList> appoitmentAllHistoryResultList = List();
List<DoctorScheduleResponse> doctorScheduleResponse = List();
List<String> freeSlots = [];
getAppointmentHistory({bool isActiveAppointment = false}) async {
hasError = false;
super.error = "";
@ -46,7 +47,7 @@ class MedicalService extends BaseService {
}, body: body);
}
Future<Map> getSchedule(DoctorList doctorRequest) async {
getSchedule(DoctorList doctorRequest) async {
Map<String, dynamic> request;
request = {
'DoctorID': doctorRequest.doctorID,
@ -61,8 +62,29 @@ class MedicalService extends BaseService {
}, onFailure: (String error, int statusCode) {
throw error;
}, body: request);
doctorScheduleResponse.clear();
localRes['List_DoctorWorkingHoursTable'].forEach((item) =>
{doctorScheduleResponse.add(DoctorScheduleResponse.fromJson(item))});
}
getFreeSlot(DoctorList doctorRequest) async {
Map<String, dynamic> request;
request = {
'DoctorID': doctorRequest.doctorID,
'ProjectID': doctorRequest.projectID,
'ClinicID': doctorRequest.clinicID,
'DoctorWorkingHoursDays': 7
};
dynamic localRes;
await baseAppClient.post(GET_DOCTOR_FREE_SLOTS,
onSuccess: (response, statusCode) async {
localRes = response;
}, onFailure: (String error, int statusCode) {
throw error;
}, body: request);
freeSlots.clear();
localRes['FreeTimeSlots'].forEach((item) => freeSlots.add(item));
// localRes['List_DoctorWorkingHoursTable'].forEach((item) =>
// {doctorScheduleResponse.add(DoctorScheduleResponse.fromJson(item))});
}
}

@ -14,7 +14,7 @@ class MedicalViewModel extends BaseViewModel {
_medicalService.appoitmentAllHistoryResultList;
List<DoctorScheduleResponse> get getDoctorScheduleList =>
_medicalService.doctorScheduleResponse;
List<String> get freeSlots => _medicalService.freeSlots;
getAppointmentHistory() async {
if (authenticatedUserObject.isLogin) {
setState(ViewState.Busy);
@ -38,4 +38,16 @@ class MedicalViewModel extends BaseViewModel {
setState(ViewState.Idle);
}
}
getFreeSlots(DoctorList doctorRequest) async {
if (authenticatedUserObject.isLogin) {
setState(ViewState.Busy);
await _medicalService.getFreeSlot(doctorRequest);
if (_medicalService.hasError) {
error = _medicalService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
}
}

@ -64,6 +64,7 @@ class _BloodCholesterolState extends State<BloodCholesterol> {
return AppScaffold(
isShowAppBar: true,
appBarTitle: TranslationBase.of(context).bloodCholesterol,
isShowDecPage: false,
body: Padding(
padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView(

@ -66,6 +66,7 @@ class _TriglyceridesState extends State<Triglycerides> {
return AppScaffold(
isShowAppBar: true,
appBarTitle: TranslationBase.of(context).triglycerides,
isShowDecPage: false,
body: Padding(
padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView(

@ -8,7 +8,8 @@ class MyWebView extends StatelessWidget {
final String title;
final String selectedUrl;
final Completer<WebViewController> _controller = Completer<WebViewController>();
final Completer<WebViewController> _controller =
Completer<WebViewController>();
MyWebView({
@required this.title,
@ -20,6 +21,7 @@ class MyWebView extends StatelessWidget {
return AppScaffold(
isShowAppBar: true,
appBarTitle: title,
isShowDecPage: false,
body: WebView(
initialUrl: selectedUrl,
javascriptMode: JavascriptMode.unrestricted,

@ -119,7 +119,7 @@ class _DoctorProfileState extends State<DoctorProfile> with TickerProviderStateM
Navigator.push(
context,
FadePage(
page: SchedulePage(widget.doctor),
page: SchedulePage(doctorList: widget.doctor),
),
);
},

@ -23,8 +23,11 @@ class DocAvailableAppointments extends StatefulWidget {
static String selectedDate;
static String selectedTime;
bool isLiveCareAppointment;
DocAvailableAppointments({@required this.doctor, @required this.isLiveCareAppointment});
final dynamic doctorSchedule;
DocAvailableAppointments(
{@required this.doctor,
this.doctorSchedule,
@required this.isLiveCareAppointment});
@override
_DocAvailableAppointmentsState createState() => _DocAvailableAppointmentsState();
@ -66,6 +69,7 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
WidgetsBinding.instance.addPostFrameCallback((_) async {
getCurrentLanguage();
if (widget.isLiveCareAppointment)
getDoctorScheduledFreeSlots(context, widget.doctor);
else {
@ -334,9 +338,24 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
freeSlotsResponse = res['FreeTimeSlots'];
print("res['FreeTimeSlots']");
print(res['FreeTimeSlots'].length);
_getJSONSlots().then((value) => {
setState(() => {_events.clear(), _events = value})
});
_getJSONSlots().then((value) {
setState(() => {
_events.clear(),
_events = value,
if (widget.doctorSchedule != null)
{
_calendarController.setSelectedDay(
DateUtil.convertStringToDate(
widget.doctorSchedule['Date']),
isProgrammatic: true),
_onDaySelected(
DateUtil.convertStringToDate(
widget.doctorSchedule['Date']),
List())
}
});
});
} else {
DocAvailableAppointments.areAppointmentsAvailable = false;
}

@ -1,5 +1,6 @@
import 'package:diplomaticquarterapp/pages/ContactUs/widgets/card_common_contat.dart';
import 'package:diplomaticquarterapp/uitl/location_util.dart';
import 'package:diplomaticquarterapp/widgets/data_display/medical/medical_profile_item.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
@ -31,48 +32,75 @@ class _ContactUsPageState extends State<ContactUsPage> {
showNewAppBar: true,
showNewAppBarTitle: true,
backgroundColor: Color(0xffF8F8F8),
body: Container(
margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
child: CardCommonContact(
image: 'assets/images/new-design/find_us_icon.png',
text: TranslationBase.of(context).findUs,
subText: "",
type: 0,
),
),
Expanded(
child: CardCommonContact(image: 'assets/images/new-design/feedback_icon.png', text: TranslationBase.of(context).feedback, subText: "", type: 1),
),
],
),
Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
child: CardCommonContact(
image: 'assets/images/new-design/live_chat_icon.png',
text: TranslationBase.of(context).liveChat,
subText: TranslationBase.of(context).service,
type: 2,
),
),
Expanded(
child: Container(),
),
],
),
],
),
body: GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.only(top: 25),
shrinkWrap: true,
children: [
CardCommonContact(
image: 'assets/images/new-design/find_us_icon.png',
text: TranslationBase.of(context).findUs,
subText: "",
type: 0,
),
CardCommonContact(
image: 'assets/images/new-design/feedback_icon.png',
text: TranslationBase.of(context).feedback,
subText: "",
type: 1,
),
CardCommonContact(
image: 'assets/images/new-design/live_chat_icon.png',
text: TranslationBase.of(context).liveChat,
subText: "",
type: 2,
),
],
),
// Container(
// margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: <Widget>[
// Row(
// mainAxisSize: MainAxisSize.max,
// mainAxisAlignment: MainAxisAlignment.start,
// children: <Widget>[
// Expanded(
// child: CardCommonContact(
// image: 'assets/images/new-design/find_us_icon.png',
// text: TranslationBase.of(context).findUs,
// subText: "",
// type: 0,
// ),
// ),
// Expanded(
// child: CardCommonContact(image: 'assets/images/new-design/feedback_icon.png', text: TranslationBase.of(context).feedback, subText: "", type: 1),
// ),
// ],
// ),
// Row(
// mainAxisSize: MainAxisSize.max,
// mainAxisAlignment: MainAxisAlignment.start,
// children: <Widget>[
// Expanded(
// child: CardCommonContact(
// image: 'assets/images/new-design/live_chat_icon.png',
// text: TranslationBase.of(context).liveChat,
// subText: TranslationBase.of(context).service,
// type: 2,
// ),
// ),
// Expanded(
// child: Container(),
// ),
// ],
// ),
// ],
// ),
// ),
);
}
}

@ -4,6 +4,7 @@ import 'package:diplomaticquarterapp/core/viewModels/contactus/findus_view_model
import 'package:diplomaticquarterapp/pages/ContactUs/findus/hospitrals_page.dart';
import 'package:diplomaticquarterapp/pages/ContactUs/findus/pharmacies_page.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -15,8 +16,7 @@ class FindUsPage extends StatefulWidget {
_FindUsPageState createState() => _FindUsPageState();
}
class _FindUsPageState extends State<FindUsPage>
with SingleTickerProviderStateMixin {
class _FindUsPageState extends State<FindUsPage> with SingleTickerProviderStateMixin {
TabController _tabController;
@override
void initState() {
@ -40,89 +40,42 @@ class _FindUsPageState extends State<FindUsPage>
isShowAppBar: true,
isShowDecPage: false,
appBarTitle: 'Locations',
showNewAppBar: true,
showNewAppBarTitle: true,
backgroundColor: Color(0xffF8F8F8),
baseViewModel: model,
body: Scaffold(
extendBodyBehindAppBar: true,
appBar: PreferredSize(
preferredSize: Size.fromHeight(65.0),
child: Stack(
children: <Widget>[
Positioned(
bottom: 1,
left: 0,
right: 0,
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: Container(
color: Theme.of(context)
.scaffoldBackgroundColor
.withOpacity(0.8),
height: 70.0,
),
),
),
Center(
child: Container(
height: 60.0,
margin: EdgeInsets.only(top: 10.0),
width: MediaQuery.of(context).size.width * 0.92, // 0.9,
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: Theme.of(context).dividerColor,
width: 0.9), //width: 0.7
),
color: Colors.white),
child: Center(
child: TabBar(
isScrollable: true,
controller: _tabController,
indicatorWeight: 5.0,
indicatorSize: TabBarIndicatorSize.tab,
labelColor: Theme.of(context).primaryColor,
labelPadding:
EdgeInsets.only(top: 4.0, left: 35.0, right: 35.0),
unselectedLabelColor: Colors.grey[800],
tabs: [
Container(
width: MediaQuery.of(context).size.width * 0.30,
child: Center(
child: Texts(' Hospitals '),
),
),
Container(
width: MediaQuery.of(context).size.width * 0.30,
child: Center(
child: Texts(' Pharmacies '),
),
),
],
),
),
),
),
],
body: Column(
children: <Widget>[
TabBar(
controller: _tabController,
indicatorWeight: 3.0,
indicatorSize: TabBarIndicatorSize.tab,
labelColor: Color(0xff2B353E),
unselectedLabelColor: Color(0xff575757),
labelPadding: EdgeInsets.only(top: 15, bottom: 13, left: 20, right: 20),
labelStyle: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.48,
),
unselectedLabelStyle: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
letterSpacing: -0.48,
),
tabs: [Text(TranslationBase.of(context).hospitals), Text(TranslationBase.of(context).pharmacies)],
),
),
body: Column(
children: <Widget>[
Expanded(
child: TabBarView(
physics: BouncingScrollPhysics(),
controller: _tabController,
children: <Widget>[
HospitalsPage(
findusHospitalModelList: model.FindusHospitalModelList,
), //SendFeedbackPage(),
PharmaciesPage(
findusPharmaciesModelList:
model.FindusPharmaciesModelList,
) //StatusFeedbackPage()
],
),
)
],
),
Expanded(
child: TabBarView(
physics: BouncingScrollPhysics(),
controller: _tabController,
children: <Widget>[
HospitalsPage(findusHospitalModelList: model.FindusHospitalModelList), //SendFeedbackPage(),
PharmaciesPage(findusPharmaciesModelList: model.FindusPharmaciesModelList) //StatusFeedbackPage()
],
),
)
],
),
),
);

@ -1,6 +1,7 @@
import 'package:diplomaticquarterapp/core/model/contactus/get_hmg_locations.dart';
import 'package:diplomaticquarterapp/core/viewModels/contactus/findus_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -22,7 +23,180 @@ class HospitalsPage extends StatefulWidget {
class _HospitalsPageState extends State<HospitalsPage> {
@override
Widget build(BuildContext context) {
return AppScaffold(
return SingleChildScrollView(
physics: BouncingScrollPhysics(),
padding: EdgeInsets.only(bottom: 21, top: 21, left: 21, right: 21),
child: Column(
children: [
ListView.separated(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
padding: EdgeInsets.zero,
separatorBuilder: (context, index) => SizedBox(height: 14),
itemBuilder: (context, index) {
GetHMGLocationsModel _location = widget.findusHospitalModelList[index];
return Container(
padding: const EdgeInsets.only(left: 12, right: 12, top: 12, bottom: 12),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
boxShadow: [
BoxShadow(
color: Color(0xff000000).withOpacity(.05),
//spreadRadius: 5,
blurRadius: 27,
offset: Offset(0, -3),
),
],
color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
InkWell(
onTap: () {
showDialog(
context: context,
builder: (_) => AssetGiffyDialog(
title: Text(
_location.locationName,
style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.w600),
),
image: Image.network(
_location.projectImageURL.toString(),
fit: BoxFit.cover,
),
buttonCancelText: Text(TranslationBase.of(context).cancel),
buttonCancelColor: Colors.grey,
onlyCancelButton: true,
),
);
},
child: ClipRRect(
borderRadius: BorderRadius.circular(12),
child: Image.network(
_location.projectImageURL.toString(),
width: 48,
height: 48,
fit: BoxFit.cover,
),
),
),
Expanded(
child: Padding(
padding: EdgeInsets.only(left: 12, right: 12),
child: Text(
_location.locationName?.trim() ?? "",
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
color: Color(0xff2E303A),
letterSpacing: -0.56,
),
),
),
), //model.cOCItemList[index].cOCTitl
IconButton(
icon: Icon(
Icons.location_on,
color: Color(0xff2B353E),
),
constraints: BoxConstraints(),
padding: EdgeInsets.all(8),
tooltip: '',
onPressed: () {
setState(() {
MapsLauncher.launchCoordinates(double.parse(_location.latitude), double.parse(_location.longitude), _location.locationName);
});
},
),
IconButton(
icon: Icon(
Icons.phone,
color: Color(0xff2B353E),
),
constraints: BoxConstraints(),
padding: EdgeInsets.all(8),
tooltip: '',
onPressed: () {
setState(() {
launch("tel://" + _location.phoneNumber);
});
},
),
],
),
);
},
itemCount: widget.findusHospitalModelList.length,
),
Container(
margin: EdgeInsets.only(top: 14),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
boxShadow: [
BoxShadow(
color: Color(0xff000000).withOpacity(.05),
//spreadRadius: 5,
blurRadius: 27,
offset: Offset(0, -3),
),
],
color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
IconButton(
icon: new Image.asset('assets/images/new-design/youtube.png'),
iconSize: 48,
tooltip: 'Youtube',
onPressed: () {
setState(() {
launch("https://www.youtube.com/c/DrsulaimanAlhabibHospitals");
});
},
),
IconButton(
icon: new Image.asset('assets/images/new-design/linkedin.png'),
tooltip: 'LinkedIn',
iconSize: 48,
onPressed: () {
setState(() {
launch("https://www.linkedin.com/company/drsulaiman-alhabib-medical-group");
});
},
),
IconButton(
icon: new Image.asset('assets/images/new-design/twitter.png'),
tooltip: 'Twitter',
iconSize: 48,
onPressed: () {
setState(() {
launch("https://twitter.com/HMG");
});
},
),
IconButton(
icon: new Image.asset('assets/images/new-design/facebook.png'),
tooltip: 'facebook',
iconSize: 48,
onPressed: () {
setState(() {
launch("https://www.facebook.com/DrSulaimanAlHabib?ref=tn_tnmn");
});
},
),
],
),
),
],
),
);
AppScaffold(
isShowDecPage: false,
body: SingleChildScrollView(
child: Container(
@ -46,65 +220,37 @@ class _HospitalsPageState extends State<HospitalsPage> {
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
InkWell(
onTap: () {
showDialog(
context: context,
builder: (_) =>
AssetGiffyDialog(
builder: (_) => AssetGiffyDialog(
title: Text(
widget
.findusHospitalModelList[
index]
.locationName,
style: TextStyle(
fontSize: 22.0,
fontWeight:
FontWeight
.w600),
widget.findusHospitalModelList[index].locationName,
style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.w600),
),
image: Image.network(
widget
.findusHospitalModelList[
index]
.projectImageURL
.toString(),
widget.findusHospitalModelList[index].projectImageURL.toString(),
fit: BoxFit.cover,
),
buttonCancelText:
Text('cancel'),
buttonCancelColor:
Colors.grey,
buttonCancelText: Text('cancel'),
buttonCancelColor: Colors.grey,
onlyCancelButton: true,
));
},
child: Container(
width: 70,
height: 70,
child: Image.network(widget
.findusHospitalModelList[
index]
.projectImageURL
.toString())),
child: Container(width: 70, height: 70, child: Image.network(widget.findusHospitalModelList[index].projectImageURL.toString())),
),
Expanded(
flex: 4,
child: Container(
margin: EdgeInsets.only(
left: 5,
right: 5,
top: 10,
bottom: 1),
margin: EdgeInsets.only(left: 5, right: 5, top: 10, bottom: 1),
child: Texts(
'${widget.findusHospitalModelList[index].locationName}',
textAlign: TextAlign.start,
@ -112,14 +258,12 @@ class _HospitalsPageState extends State<HospitalsPage> {
Expanded(
flex: 2,
child: Row(
crossAxisAlignment:
CrossAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
IconButton(
icon: Icon(
Icons.location_on,
color: Theme.of(context)
.primaryColor,
color: Theme.of(context).primaryColor,
size: 35,
),
// icon: new Image.asset(
@ -127,27 +271,15 @@ class _HospitalsPageState extends State<HospitalsPage> {
tooltip: '',
onPressed: () {
setState(() {
MapsLauncher.launchCoordinates(
double.parse(widget
.findusHospitalModelList[
index]
.latitude),
double.parse(widget
.findusHospitalModelList[
index]
.longitude),
widget
.findusHospitalModelList[
index]
.locationName);
MapsLauncher.launchCoordinates(double.parse(widget.findusHospitalModelList[index].latitude),
double.parse(widget.findusHospitalModelList[index].longitude), widget.findusHospitalModelList[index].locationName);
});
},
),
IconButton(
icon: Icon(
Icons.phone,
color: Theme.of(context)
.primaryColor,
color: Theme.of(context).primaryColor,
size: 35,
),
// icon: new Image.asset(
@ -156,11 +288,7 @@ class _HospitalsPageState extends State<HospitalsPage> {
onPressed: () {
setState(() {
// _volume += 10;
launch("tel://" +
widget
.findusHospitalModelList[
index]
.phoneNumber);
launch("tel://" + widget.findusHospitalModelList[index].phoneNumber);
});
},
),
@ -193,32 +321,27 @@ class _HospitalsPageState extends State<HospitalsPage> {
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
IconButton(
icon: new Image.asset(
'assets/images/new-design/youtube.png'),
icon: new Image.asset('assets/images/new-design/youtube.png'),
iconSize: 70,
tooltip: 'Youtube',
onPressed: () {
setState(() {
launch(
"https://www.youtube.com/c/DrsulaimanAlhabibHospitals");
launch("https://www.youtube.com/c/DrsulaimanAlhabibHospitals");
});
},
),
IconButton(
icon: new Image.asset(
'assets/images/new-design/linkedin.png'),
icon: new Image.asset('assets/images/new-design/linkedin.png'),
tooltip: 'LinkedIn',
iconSize: 70,
onPressed: () {
setState(() {
launch(
"https://www.linkedin.com/company/drsulaiman-alhabib-medical-group");
launch("https://www.linkedin.com/company/drsulaiman-alhabib-medical-group");
});
},
),
IconButton(
icon: new Image.asset(
'assets/images/new-design/twitter.png'),
icon: new Image.asset('assets/images/new-design/twitter.png'),
tooltip: 'Twitter',
iconSize: 70,
onPressed: () {
@ -228,14 +351,12 @@ class _HospitalsPageState extends State<HospitalsPage> {
},
),
IconButton(
icon: new Image.asset(
'assets/images/new-design/facebook.png'),
icon: new Image.asset('assets/images/new-design/facebook.png'),
tooltip: 'facebook',
iconSize: 70,
onPressed: () {
setState(() {
launch(
"https://www.facebook.com/DrSulaimanAlHabib?ref=tn_tnmn");
launch("https://www.facebook.com/DrSulaimanAlHabib?ref=tn_tnmn");
});
},
),

@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/contactus/get_hmg_locations.dart';
import 'package:diplomaticquarterapp/core/viewModels/contactus/findus_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -22,239 +23,199 @@ class PharmaciesPage extends StatefulWidget {
class _PharmaciesPageState extends State<PharmaciesPage> {
@override
Widget build(BuildContext context) {
return AppScaffold(
isShowDecPage: false,
body: SingleChildScrollView(
child: Container(
margin: EdgeInsets.only(left: 15, right: 15, top: 70),
child: Column(
children: [
...List.generate(
widget.findusPharmaciesModelList.length,
(index) => Container(
decoration: BoxDecoration(
shape: BoxShape.rectangle,
border: Border.all(color: Colors.white, width: 0.5),
borderRadius: BorderRadius.all(Radius.circular(5)),
color: Colors.white,
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.center,
children: <Widget>[
InkWell(
onTap: () {
showDialog(
context: context,
builder: (_) =>
AssetGiffyDialog(
title: Text(
widget
.findusPharmaciesModelList[
index]
.locationName,
style: TextStyle(
fontSize: 22.0,
fontWeight:
FontWeight
.w600),
),
image: widget
.findusPharmaciesModelList[
index]
.projectImageURL !=
null
? Image.network(
widget
.findusPharmaciesModelList[
index]
.projectImageURL,
fit: BoxFit.cover,
)
: Image.network(
'https://hmgwebservices.com/Images/Hospitals/15.jpg',
fit: BoxFit.cover,
),
buttonCancelText:
Text('cancel'),
// buttonCancelText:Text(model.user.projectID) ,
buttonCancelColor:
Colors.grey,
onlyCancelButton: true,
));
},
child: Container(
width: 70,
height: 70,
child: Image.network(widget
.findusPharmaciesModelList[
index]
.projectImageURL !=
null
? widget
.findusPharmaciesModelList[
index]
.projectImageURL
.toString()
: 'https://hmgwebservices.com/Images/Hospitals/15.jpg')),
),
Expanded(
flex: 4,
child: Container(
margin: EdgeInsets.only(
left: 5, right: 5),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Texts(
'${widget.findusPharmaciesModelList[index].locationName}',
textAlign: TextAlign.start,
),
SizedBox(
height: 4,
),
Texts(
'${widget.findusPharmaciesModelList[index].cityName}',
textAlign: TextAlign.center,
),
],
),
),
),
//model.cOCItemList[index].cOCTitl
Expanded(
flex: 2,
child: Row(
children: [
IconButton(
icon: Icon(Icons.location_on,color: Theme.of(context).primaryColor,size: 35,),
tooltip: '',
onPressed: () {
setState(() {
MapsLauncher.launchCoordinates(
double.parse(widget
.findusPharmaciesModelList[
index]
.latitude),
double.parse(widget
.findusPharmaciesModelList[
index]
.longitude),
widget
.findusPharmaciesModelList[
index]
.locationName);
});
},
),
IconButton(
icon: Icon(Icons.phone,color: Theme.of(context).primaryColor,size: 35,),
tooltip: 'I',
onPressed: () {
setState(() {
launch("tel://" +
widget
.findusPharmaciesModelList[
index]
.phoneNumber);
});
},
),
],
),
),
],
),
return SingleChildScrollView(
physics: BouncingScrollPhysics(),
padding: EdgeInsets.only(bottom: 21, top: 21, left: 21, right: 21),
child: Column(
children: [
ListView.separated(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
padding: EdgeInsets.zero,
separatorBuilder: (context, index) => SizedBox(height: 14),
itemBuilder: (context, index) {
GetHMGLocationsModel _location = widget.findusPharmaciesModelList[index];
return Container(
padding: const EdgeInsets.only(left: 12, right: 12, top: 12, bottom: 12),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
boxShadow: [
BoxShadow(
color: Color(0xff000000).withOpacity(.05),
//spreadRadius: 5,
blurRadius: 27,
offset: Offset(0, -3),
),
],
color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
InkWell(
onTap: () {
showDialog(
context: context,
builder: (_) => AssetGiffyDialog(
title: Text(
_location.locationName,
style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.w600),
),
image: _location.projectImageURL != null
? Image.network(
_location.projectImageURL,
fit: BoxFit.cover,
)
: Image.network(
'https://hmgwebservices.com/Images/Hospitals/15.jpg',
fit: BoxFit.cover,
),
],
),
Divider(
height: 4.5,
color: Colors.grey[500],
)
],
buttonCancelText: Text(TranslationBase.of(context).cancel),
// buttonCancelText:Text(model.user.projectID) ,
buttonCancelColor: Colors.grey,
onlyCancelButton: true,
),
),
)),
SizedBox(
height: 8,
),
Container(
width: double.infinity,
height: 100,
color: Colors.white,
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
IconButton(
icon: new Image.asset(
'assets/images/new-design/youtube.png'),
iconSize: 70,
tooltip: 'Youtube',
onPressed: () {
setState(() {
// _volume += 10;
launch(
"https://www.youtube.com/c/DrsulaimanAlhabibHospitals");
});
);
},
child: ClipRRect(
borderRadius: BorderRadius.circular(12),
child: Image.network(
_location?.projectImageURL?.toString() ?? 'https://hmgwebservices.com/Images/Hospitals/15.jpg',
width: 48,
height: 48,
fit: BoxFit.cover,
),
),
),
IconButton(
icon: new Image.asset(
'assets/images/new-design/linkedin.png'),
tooltip: 'LinkedIn',
iconSize: 70,
onPressed: () {
setState(() {
launch(
"https://www.linkedin.com/company/drsulaiman-alhabib-medical-group");
});
},
Expanded(
child: Padding(
padding: EdgeInsets.only(left: 12, right: 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
_location.locationName?.trim() ?? "",
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
color: Color(0xff2E303A),
letterSpacing: -0.56,
),
),
SizedBox(
height: 4,
),
Text(
_location.cityName?.trim() ?? "",
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
color: Color(0xff2E303A),
letterSpacing: -0.56,
),
),
],
),
),
),
IconButton(
icon: new Image.asset(
'assets/images/new-design/twitter.png'),
tooltip: 'Twitter',
iconSize: 70,
icon: Icon(
Icons.location_on,
color: Color(0xff2B353E),
),
constraints: BoxConstraints(),
padding: EdgeInsets.all(8),
tooltip: '',
onPressed: () {
setState(() {
launch("https://twitter.com/HMG");
MapsLauncher.launchCoordinates(double.parse(_location.latitude), double.parse(_location.longitude), _location.locationName);
});
},
),
IconButton(
icon: new Image.asset(
'assets/images/new-design/facebook.png'),
tooltip: 'facebook',
iconSize: 70,
icon: Icon(
Icons.phone,
color: Color(0xff2B353E),
),
constraints: BoxConstraints(),
padding: EdgeInsets.all(8),
tooltip: '',
onPressed: () {
setState(() {
launch(
"https://www.facebook.com/DrSulaimanAlHabib?ref=tn_tnmn");
launch("tel://" + _location.phoneNumber);
});
},
),
],
),
),
],
);
},
itemCount: widget.findusPharmaciesModelList.length,
),
Container(
margin: EdgeInsets.only(top: 14),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
boxShadow: [
BoxShadow(
color: Color(0xff000000).withOpacity(.05),
//spreadRadius: 5,
blurRadius: 27,
offset: Offset(0, -3),
),
],
color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
IconButton(
icon: new Image.asset('assets/images/new-design/youtube.png'),
iconSize: 48,
tooltip: 'Youtube',
onPressed: () {
setState(() {
launch("https://www.youtube.com/c/DrsulaimanAlhabibHospitals");
});
},
),
IconButton(
icon: new Image.asset('assets/images/new-design/linkedin.png'),
tooltip: 'LinkedIn',
iconSize: 48,
onPressed: () {
setState(() {
launch("https://www.linkedin.com/company/drsulaiman-alhabib-medical-group");
});
},
),
IconButton(
icon: new Image.asset('assets/images/new-design/twitter.png'),
tooltip: 'Twitter',
iconSize: 48,
onPressed: () {
setState(() {
launch("https://twitter.com/HMG");
});
},
),
IconButton(
icon: new Image.asset('assets/images/new-design/facebook.png'),
tooltip: 'facebook',
iconSize: 48,
onPressed: () {
setState(() {
launch("https://www.facebook.com/DrSulaimanAlHabib?ref=tn_tnmn");
});
},
),
],
),
),
),
],
),
);
}

@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/ContactUs/LiveChat/livechat_page.dart';
import 'package:diplomaticquarterapp/pages/ContactUs/findus/findus_page.dart';
import 'package:diplomaticquarterapp/pages/feedback/feedback_home_page.dart';
import 'package:diplomaticquarterapp/widgets/data_display/medical/medical_profile_item.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
@ -14,11 +15,7 @@ class CardCommonContact extends StatelessWidget {
final text;
final subText;
final type;
const CardCommonContact(
{@required this.image,
@required this.text,
@required this.subText,
@required this.type});
const CardCommonContact({@required this.image, @required this.text, @required this.subText, @required this.type});
@override
Widget build(BuildContext context) {
@ -27,31 +24,37 @@ class CardCommonContact extends StatelessWidget {
onTap: () {
navigateToSearch(context, this.type);
},
child: Container(
child:
// MedicalProfileItem(
// imagePath: image,
// title: text,
// subTitle: subText,
// isPngImage: true,
// )
Container(
margin: EdgeInsets.fromLTRB(9.0, 9.0, 9.0, 9.0),
decoration: BoxDecoration(boxShadow: [
BoxShadow(color: Colors.grey[400], blurRadius: 2.0, spreadRadius: 0.0)
], borderRadius: BorderRadius.circular(10), color: Colors.white),
decoration: BoxDecoration(boxShadow: [BoxShadow(color: Colors.grey[400], blurRadius: 2.0, spreadRadius: 0.0)], borderRadius: BorderRadius.circular(10), color: Colors.white),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
margin: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 0.0),
child: Texts(this.text,
// overflow: TextOverflow.clip,
color:secondaryColor,
// overflow: TextOverflow.clip,
color: secondaryColor,
fontWeight: FontWeight.w700,
fontSize: 20.0),
),
Container(
margin: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0),
child: Texts(this.subText,
color: Colors.black, fontSize: 15.0),
child: Texts(this.subText, color: Colors.black, fontSize: 15.0),
),
Align(
alignment: projectViewModel.isArabic? Alignment.bottomLeft:Alignment.bottomRight,
alignment: projectViewModel.isArabic ? Alignment.bottomLeft : Alignment.bottomRight,
child: Container(
margin: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 8.0),
margin: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 8.0),
child: Image.asset(this.image, width: 60.0, height: 60.0),
),
),
@ -62,7 +65,6 @@ class CardCommonContact extends StatelessWidget {
}
Future navigateToSearch(context, type) async {
if (type == 0) {
Navigator.push(context, FadePage(page: FindUsPage()));
} else if (type == 1) {
@ -70,7 +72,6 @@ class CardCommonContact extends StatelessWidget {
} else if (type == 2) {
//LiveChatPage
Navigator.push(context, FadePage(page: LiveChatPage()));
}
}
}

@ -21,17 +21,18 @@ import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:rating_bar/rating_bar.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'widgets/AppointmentActions.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
class AppointmentDetails extends StatefulWidget {
AppoitmentAllHistoryResultList appo;
static bool isLoading = false;
final dynamic doctorSchedule;
static bool showFooterButton = false;
final int parentIndex;
AppointmentDetails({@required this.appo, this.parentIndex});
AppointmentDetails({@required this.appo, this.parentIndex, this.doctorSchedule});
@override
_AppointmentDetailsState createState() => _AppointmentDetailsState();
@ -40,6 +41,7 @@ class AppointmentDetails extends StatefulWidget {
class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTickerProviderStateMixin {
static TabController _tabController;
AppSharedPreferences sharedPref = AppSharedPreferences();
List<DoctorRateDetails> doctorDetailsList = List();
ToDoCountProviderModel toDoProvider;
@ -48,13 +50,17 @@ class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTick
@override
void initState() {
_tabController = new TabController(length: 2, vsync: this);
AppointmentDetails.showFooterButton = false;
if (widget.doctorSchedule != null) {
_tabController = new TabController(length: 2, vsync: this, initialIndex: 1);
widget.appo.appointmentDate = widget.doctorSchedule['Date'];
} else {
_tabController = new TabController(length: 2, vsync: this);
}
doctorList.doctorID = widget.appo.doctorID;
doctorList.clinicID = widget.appo.clinicID;
doctorList.projectID = widget.appo.projectID;
setTab();
super.initState();
}
@ -176,7 +182,7 @@ class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTick
Navigator.push(
context,
FadePage(
page: SchedulePage(doctorList),
page: SchedulePage(doctorList: doctorList),
),
);
},
@ -217,7 +223,7 @@ class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTick
physics: NeverScrollableScrollPhysics(),
children: [
AppointmentActions(appo: widget.appo, tabController: _tabController, enableFooterButton: enableFooterButton),
DocAvailableAppointments(doctor: getDoctorObject(), isLiveCareAppointment: widget.appo.isLiveCareAppointment)
DocAvailableAppointments(doctor: getDoctorObject(), doctorSchedule: widget.doctorSchedule, isLiveCareAppointment: widget.appo.isLiveCareAppointment)
],
controller: _tabController,
),
@ -580,7 +586,13 @@ class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTick
}
void openSchedule() {
Navigator.push(context, FadePage(page: SchedulePage(getDoctorObject())));
Navigator.push(context, FadePage(page: SchedulePage(doctorList: getDoctorObject())));
}
setTab() async {
var scheduleDoctor = await sharedPref.getObject(DOCTOR_SCHEDULE_DATE_SEL);
widget.appo.appointmentDate = scheduleDoctor['Date'];
}
confirmAppointment() {

@ -1,4 +1,5 @@
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
import 'package:diplomaticquarterapp/pages/MyAppointments/AppointmentDetails.dart';
import 'package:diplomaticquarterapp/pages/MyAppointments/models/DoctorScheduleResponse.dart';
import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/indicator.dart';
@ -6,16 +7,22 @@ import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsLis
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/medical_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart';
class SchedulePage extends StatefulWidget {
final DoctorList doctorList;
SchedulePage(this.doctorList);
final AppoitmentAllHistoryResultList appo;
SchedulePage({
this.appo,
this.doctorList,
});
@override
_SchedulePageState createState() => _SchedulePageState();
}
@ -25,139 +32,226 @@ class _SchedulePageState extends State<SchedulePage> {
PageController _pageController = PageController();
double currentPage = 0;
int selectedindex = 0;
bool isLoading = true;
List weeks = [];
List<DoctorScheduleResponse> doctorScheduleResponse = [];
final List<Widget> introWidgetsList = <Widget>[
Text('Hello'),
Text('Hi'),
Text('hey')
];
int weekMS = 604800 * 1000;
DoctorList doctorList;
List<String> freeSlots = [];
bool isPageChange = false;
AppSharedPreferences sharedPref = AppSharedPreferences();
@override
void initState() {
//getSchedule(widget.doctorList, context);
// _pageController.addListener(() {
// setState(() {
// currentPage = _pageController.page;
// });
// });
this.doctorList = widget.doctorList;
super.initState();
}
@override
Widget build(BuildContext context) {
return BaseView<MedicalViewModel>(
onModelReady: (model) => model.getDoctorSchedule(widget.doctorList),
builder: (_, model, widget) => AppScaffold(
appBarTitle: TranslationBase.of(context).schedule,
isShowAppBar: true,
baseViewModel: model,
body: SizedBox(
height: MediaQuery.of(context).size.height,
child: Stack(
children: [
Container(
child: PageView.builder(
controller: _pageController,
itemCount: 3,
onPageChanged: (index) {
setState(() {
this.currentPage = index.toDouble();
});
},
itemBuilder: (context, index) {
return Container(
child: ListView.builder(
itemCount: model.getDoctorScheduleList.length,
itemBuilder: (context, index) => ClipRRect(
borderRadius: const BorderRadius.all(
Radius.circular(20.0)),
child: Container(
padding: EdgeInsets.only(
left: 10,
right: 10,
top: 20,
bottom: 20),
margin: EdgeInsets.only(
left: 20,
right: 20,
top: 7,
bottom: 7),
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: Colors.green,
offset: Offset(-10, 0)),
],
borderRadius:
const BorderRadius.all(
Radius.circular(10.0)),
color: Colors.white),
child: Row(
children: [
Expanded(
child: Row(children: [
Column(
children: [
Texts(
model
.getDoctorScheduleList[
index]
.dayName,
color:
HexColor('#0bb690'),
),
Texts(
DateUtil
.getDayMonthYearDateFormatted(
DateUtil
.convertStringToDate(
model
.getDoctorScheduleList[
index]
.date,
),
onModelReady: (model) => model.getDoctorSchedule(doctorList),
builder: (_, model, widget) => BaseView<MedicalViewModel>(
onModelReady: (model2) => model2.getFreeSlots(doctorList),
builder: (_, model2, widget2) {
if (model.freeSlots.length > 0 && isPageChange == false) {
this.freeSlots = model.freeSlots;
this.doctorScheduleResponse = model.getDoctorScheduleList;
this.generateWeeksSchedules();
}
return AppScaffold(
appBarTitle: TranslationBase.of(context).schedule,
isShowAppBar: true,
baseViewModel: model2,
body: SizedBox(
height: MediaQuery.of(context).size.height,
child: Stack(
children: [
Container(
margin: EdgeInsets.only(top: 40),
child: PageView.builder(
controller: _pageController,
itemCount: weeks.length,
onPageChanged: (index) {
setState(() {
isPageChange = true;
this.currentPage = index.toDouble();
});
},
itemBuilder: (context, index) {
return Container(
child: ListView.builder(
itemCount: weeks[index].length,
itemBuilder: (context, index2) =>
InkWell(
onTap: () {
openBookAppointment(
weeks[index][index2]);
},
child: Row(
children: [
Expanded(
flex: 1,
child: Padding(
padding:
EdgeInsets.only(
left: 20),
child: Row(
children: [
Column(
children: [
Texts(
weeks[index][index2]
[
'DayName'],
fontSize:
13,
),
Texts(
getDayMonths(
DateUtil
.convertStringToDate(
weeks[index][index2]['Date'],
),
),
fontWeight:
FontWeight.bold,
fontSize:
18,
)
],
)
])),
),
color:
HexColor('#0bb690'),
)
],
)
]),
),
Expanded(
child: Texts(
model
.getDoctorScheduleList[
index]
.workingHours,
color: HexColor('#0bb690'),
),
)
],
)))));
},
)),
PageViewIndicator(
isActive: true,
currentPage: this.currentPage,
length: introWidgetsList.length,
)
],
))));
Expanded(
flex: 3,
child: ClipRRect(
borderRadius:
const BorderRadius
.all(
Radius.circular(
20.0)),
child: Container(
padding:
EdgeInsets.only(
left:
10,
right:
10,
top: 20,
bottom:
20),
margin: EdgeInsets.only(
left: 20,
right: 20,
top: 7,
bottom: 7),
decoration: BoxDecoration(
boxShadow: [
weeks[index][index2]['fullDay'] ==
false
? BoxShadow(
color: Colors.green,
offset: Offset(-5, 0))
: BoxShadow(),
],
borderRadius:
const BorderRadius.all(Radius.circular(
10.0)),
color: Colors
.white),
child: Row(
children: [
Expanded(
child:
Texts(
weeks[index][index2]
[
'WorkingHours'],
fontWeight:
FontWeight.w400,
),
)
],
))),
)
],
))));
},
)),
PageViewIndicator(
isActive: true,
currentPage: this.currentPage,
length: weeks.length,
)
],
)));
}));
}
generateWeeksSchedules() {
this.weeks.clear();
for (var i = 0; i < 8; i++) {
var weekSchedule = generateNewWeekSchedule(i);
this.markWeekFreeDays(weekSchedule);
this.weeks.add(weekSchedule);
}
//print(this.weeks);
}
markWeekFreeDays(schedule) {
for (var workDay in schedule) {
workDay['fullDay'] = !this.hasFreeSlot(workDay['Date']);
}
}
generateNewWeekSchedule(weekIndex) {
var weekMSOffset = weekIndex * weekMS;
var newWeekSchedule = [];
for (var workDay in this.doctorScheduleResponse) {
Map<String, dynamic> newWorkDay = Map();
newWorkDay['Date'] = DateUtil.convertDateMSToJsonDate(
DateUtil.convertStringToDate(workDay.date).millisecondsSinceEpoch +
weekMSOffset);
newWorkDay['DayName'] = workDay.dayName;
newWorkDay['WorkingHours'] = workDay.workingHours;
newWeekSchedule.add(newWorkDay);
}
return newWeekSchedule;
}
hasFreeSlot(String jsonDate) {
var date = DateUtil.convertStringToDate(jsonDate);
var scheduleDay = date;
for (var event in this.freeSlots) {
var date = DateUtil.convertStringToDate(event);
var nDate = DateTime(date.year, date.month, date.day);
if (nDate.millisecondsSinceEpoch == scheduleDay.millisecondsSinceEpoch) {
return true;
}
}
return false;
}
String getDayMonths(DateTime dateTime) {
String dateFormat =
'${dateTime.day} ${DateUtil.getMonth(dateTime.month).toString().substring(0, 3)}';
return dateFormat;
}
//getSchedule(DoctorList doctor, BuildContext context) {
//GifLoaderDialogUtils.showMyDialog(context);
//service = new DoctorsListService();
// service.getSchedule(doctor).then((value) {
// doctorScheduleResponse.clear();
// setState(() {
// value['List_DoctorWorkingHoursTable'].forEach((item) => {
// doctorScheduleResponse.add(DoctorScheduleResponse.fromJson(item))
// });
// GifLoaderDialogUtils.hideDialog(context);
// });
// });
// }
openBookAppointment(selectedDate) {
//sharedPref.setObject(DOCTOR_SCHEDULE_DATE_SEL, selectedDate);
Navigator.push(
context,
FadePage(
page: AppointmentDetails(
appo: widget.appo,
doctorSchedule: selectedDate,
),
),
);
}
}

@ -17,11 +17,11 @@ class PageViewIndicator extends StatelessWidget {
Widget _indicator(bool isActive) {
return Positioned(
bottom: 10,
top: 20,
left: 0,
right: 0,
child: Container(
margin: EdgeInsets.only(bottom: 35),
margin: EdgeInsets.only(top: 0),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
@ -37,7 +37,7 @@ class PageViewIndicator extends StatelessWidget {
Widget circleBar(bool isActive) {
return AnimatedContainer(
duration: Duration(milliseconds: 150),
margin: EdgeInsets.symmetric(horizontal: 8),
margin: EdgeInsets.symmetric(horizontal: 3),
height: isActive ? 12 : 8,
width: isActive ? 12 : 8,
decoration: BoxDecoration(

@ -41,13 +41,14 @@ class _WelcomeLogin extends State<WelcomeLogin> {
physics: BouncingScrollPhysics(),
children: [
SizedBox(height: 12),
Align(
alignment: Alignment.centerLeft,
child: SvgPicture.asset(
"assets/images/new/hmg_icon.svg",
height: 62,
width: 62,
),
Row(
children: [
SvgPicture.asset(
"assets/images/new/hmg_icon.svg",
height: 62,
width: 62,
),
],
),
SizedBox(height: 24),
Text(

@ -0,0 +1,10 @@
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
class AboutApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AppScaffold(isShowAppBar: true, appBarTitle: TranslationBase.of(context).aboutApp, isShowDecPage: false, body: Container());
}
}

@ -33,6 +33,14 @@ class _Settings extends State<Settings> with TickerProviderStateMixin {
AppGlobal.context = context;
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
icon: Icon(Icons.info, color: Colors.white),
onPressed: () {
//openInfoPage()
},
)
],
bottom: TabBar(
// isScrollable: true,
@ -51,8 +59,7 @@ class _Settings extends State<Settings> with TickerProviderStateMixin {
controller: _tabController,
),
title: Text(TranslationBase.of(context).settings,
style:
TextStyle(color: Theme.of(context).textTheme.bodyText2.color)),
style: TextStyle(color: Colors.white)),
leading: Builder(
builder: (BuildContext context) {
return ArrowBack();

@ -70,6 +70,15 @@ class DateUtil {
return dateFormat;
}
static String convertDateMSToJsonDate(utc) {
var dt = new DateTime.fromMicrosecondsSinceEpoch(utc);
return "/Date(" +
(dt.millisecondsSinceEpoch * 1000).toString() +
'+0300' +
")/";
}
/// check Date
/// [dateString] String we want to convert
static String checkDate(DateTime checkedTime) {

@ -2137,6 +2137,8 @@ class TranslationBase {
String get validPassportNumber => localizedValues["valid-passport-number"][locale.languageCode];
String get continuePlan => localizedValues["continue-plan"][locale.languageCode];
String get dentalProcedureList => localizedValues["dental-procedure-list"][locale.languageCode];
String get aboutApp => localizedValues["about-app"][locale.languageCode];
String get aboutPointsLength => localizedValues["about-points"]['length'][locale.languageCode];
String get timeNeeded => localizedValues["time-needed"][locale.languageCode];
String get totalTimeNeeded => localizedValues["total-time-needed"][locale.languageCode];
}
@ -2156,6 +2158,6 @@ class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {
bool shouldReload(TranslationBaseDelegate old) => false;
}
extension xTranslationBase on TranslationBase{
extension xTranslationBase on TranslationBase {
isArabic() => locale.languageCode == "ar";
}
}

@ -16,10 +16,11 @@ class MedicalProfileItem extends StatelessWidget {
final String title;
final String subTitle;
final bool hasBadge = false;
final bool isPngImage;
bool isEnable;
Color imgColor;
MedicalProfileItem({@required this.imagePath, @required this.title, @required this.subTitle, hasBadge, this.isEnable = true, this.imgColor});
MedicalProfileItem({@required this.imagePath, @required this.title, @required this.subTitle, hasBadge, this.isEnable = true, this.imgColor, this.isPngImage = false});
@override
Widget build(BuildContext context) {
@ -46,12 +47,19 @@ class MedicalProfileItem extends StatelessWidget {
// ),
// ),
mFlex(1),
SvgPicture.asset(
"assets/images/new/services/$imagePath",
height: SizeConfig.widthMultiplier * 7,
width: SizeConfig.widthMultiplier * 7,
color: imgColor,
),
isPngImage
? Image.asset(
imagePath,
height: SizeConfig.widthMultiplier * 7,
width: SizeConfig.widthMultiplier * 7,
color: imgColor,
)
: SvgPicture.asset(
"assets/images/new/services/$imagePath",
height: SizeConfig.widthMultiplier * 7,
width: SizeConfig.widthMultiplier * 7,
color: imgColor,
),
mFlex(2),
Text(
title,

Loading…
Cancel
Save