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 5 years ago
commit 9cf9e297cf

@ -1394,6 +1394,25 @@ const Map localizedValues = {
"enter-passport-number": {"en": "Please confirm or update your passport number:", "ar": "الرجاء تأكيد أو تحديث رقم جواز السفر الخاص بك:"}, "enter-passport-number": {"en": "Please confirm or update your passport number:", "ar": "الرجاء تأكيد أو تحديث رقم جواز السفر الخاص بك:"},
"valid-passport-number": {"en": "Please enter valid passport number", "ar": "الرجاء إدخال رقم جواز سفر صالح"}, "valid-passport-number": {"en": "Please enter valid passport number", "ar": "الرجاء إدخال رقم جواز سفر صالح"},
"continue-plan": {"en": "Continue with the treatment plan?", "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": "إجراءات الأسنان لهذا الموعد:"}, "dental-procedure-list": {"en": "Dental Procedures for this Appointment: ", "ar": "إجراءات الأسنان لهذا الموعد:"},
"time-needed": {"en": "Time Needed:", "ar": "الوقت اللازم:"}, "time-needed": {"en": "Time Needed:", "ar": "الوقت اللازم:"},
"total-time-needed": {"en": "Total Appointment Time:", "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_UNIT = 'H2O_UNIT';
const H2O_REMINDER = 'H2O_REMINDER'; const H2O_REMINDER = 'H2O_REMINDER';
const LIVECARE_CLINIC_DATA = 'LIVECARE_CLINIC_DATA'; 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 { class MedicalService extends BaseService {
List<AppoitmentAllHistoryResultList> appoitmentAllHistoryResultList = List(); List<AppoitmentAllHistoryResultList> appoitmentAllHistoryResultList = List();
List<DoctorScheduleResponse> doctorScheduleResponse = List(); List<DoctorScheduleResponse> doctorScheduleResponse = List();
List<String> freeSlots = [];
getAppointmentHistory({bool isActiveAppointment = false}) async { getAppointmentHistory({bool isActiveAppointment = false}) async {
hasError = false; hasError = false;
super.error = ""; super.error = "";
@ -46,7 +47,7 @@ class MedicalService extends BaseService {
}, body: body); }, body: body);
} }
Future<Map> getSchedule(DoctorList doctorRequest) async { getSchedule(DoctorList doctorRequest) async {
Map<String, dynamic> request; Map<String, dynamic> request;
request = { request = {
'DoctorID': doctorRequest.doctorID, 'DoctorID': doctorRequest.doctorID,
@ -61,8 +62,29 @@ class MedicalService extends BaseService {
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
throw error; throw error;
}, body: request); }, body: request);
doctorScheduleResponse.clear();
localRes['List_DoctorWorkingHoursTable'].forEach((item) => localRes['List_DoctorWorkingHoursTable'].forEach((item) =>
{doctorScheduleResponse.add(DoctorScheduleResponse.fromJson(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; _medicalService.appoitmentAllHistoryResultList;
List<DoctorScheduleResponse> get getDoctorScheduleList => List<DoctorScheduleResponse> get getDoctorScheduleList =>
_medicalService.doctorScheduleResponse; _medicalService.doctorScheduleResponse;
List<String> get freeSlots => _medicalService.freeSlots;
getAppointmentHistory() async { getAppointmentHistory() async {
if (authenticatedUserObject.isLogin) { if (authenticatedUserObject.isLogin) {
setState(ViewState.Busy); setState(ViewState.Busy);
@ -38,4 +38,16 @@ class MedicalViewModel extends BaseViewModel {
setState(ViewState.Idle); 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( return AppScaffold(
isShowAppBar: true, isShowAppBar: true,
appBarTitle: TranslationBase.of(context).bloodCholesterol, appBarTitle: TranslationBase.of(context).bloodCholesterol,
isShowDecPage: false,
body: Padding( body: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView( child: SingleChildScrollView(

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

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

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

@ -23,8 +23,11 @@ class DocAvailableAppointments extends StatefulWidget {
static String selectedDate; static String selectedDate;
static String selectedTime; static String selectedTime;
bool isLiveCareAppointment; bool isLiveCareAppointment;
final dynamic doctorSchedule;
DocAvailableAppointments({@required this.doctor, @required this.isLiveCareAppointment}); DocAvailableAppointments(
{@required this.doctor,
this.doctorSchedule,
@required this.isLiveCareAppointment});
@override @override
_DocAvailableAppointmentsState createState() => _DocAvailableAppointmentsState(); _DocAvailableAppointmentsState createState() => _DocAvailableAppointmentsState();
@ -66,6 +69,7 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
WidgetsBinding.instance.addPostFrameCallback((_) async { WidgetsBinding.instance.addPostFrameCallback((_) async {
getCurrentLanguage(); getCurrentLanguage();
if (widget.isLiveCareAppointment) if (widget.isLiveCareAppointment)
getDoctorScheduledFreeSlots(context, widget.doctor); getDoctorScheduledFreeSlots(context, widget.doctor);
else { else {
@ -334,9 +338,24 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
freeSlotsResponse = res['FreeTimeSlots']; freeSlotsResponse = res['FreeTimeSlots'];
print("res['FreeTimeSlots']"); print("res['FreeTimeSlots']");
print(res['FreeTimeSlots'].length); 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 { } else {
DocAvailableAppointments.areAppointmentsAvailable = false; DocAvailableAppointments.areAppointmentsAvailable = false;
} }

@ -1,5 +1,6 @@
import 'package:diplomaticquarterapp/pages/ContactUs/widgets/card_common_contat.dart'; import 'package:diplomaticquarterapp/pages/ContactUs/widgets/card_common_contat.dart';
import 'package:diplomaticquarterapp/uitl/location_util.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:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -31,48 +32,75 @@ class _ContactUsPageState extends State<ContactUsPage> {
showNewAppBar: true, showNewAppBar: true,
showNewAppBarTitle: true, showNewAppBarTitle: true,
backgroundColor: Color(0xffF8F8F8), backgroundColor: Color(0xffF8F8F8),
body: Container( body: GridView(
margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0), gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
child: Column( physics: NeverScrollableScrollPhysics(),
crossAxisAlignment: CrossAxisAlignment.start, padding: EdgeInsets.only(top: 25),
children: <Widget>[ shrinkWrap: true,
Row( children: [
mainAxisSize: MainAxisSize.max, CardCommonContact(
mainAxisAlignment: MainAxisAlignment.start, image: 'assets/images/new-design/find_us_icon.png',
children: <Widget>[ text: TranslationBase.of(context).findUs,
Expanded( subText: "",
child: CardCommonContact( type: 0,
image: 'assets/images/new-design/find_us_icon.png', ),
text: TranslationBase.of(context).findUs, CardCommonContact(
subText: "", image: 'assets/images/new-design/feedback_icon.png',
type: 0, text: TranslationBase.of(context).feedback,
), subText: "",
), type: 1,
Expanded( ),
child: 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: "",
Row( type: 2,
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(),
),
],
),
],
),
), ),
// 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/hospitrals_page.dart';
import 'package:diplomaticquarterapp/pages/ContactUs/findus/pharmacies_page.dart'; import 'package:diplomaticquarterapp/pages/ContactUs/findus/pharmacies_page.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.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/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -15,8 +16,7 @@ class FindUsPage extends StatefulWidget {
_FindUsPageState createState() => _FindUsPageState(); _FindUsPageState createState() => _FindUsPageState();
} }
class _FindUsPageState extends State<FindUsPage> class _FindUsPageState extends State<FindUsPage> with SingleTickerProviderStateMixin {
with SingleTickerProviderStateMixin {
TabController _tabController; TabController _tabController;
@override @override
void initState() { void initState() {
@ -40,89 +40,42 @@ class _FindUsPageState extends State<FindUsPage>
isShowAppBar: true, isShowAppBar: true,
isShowDecPage: false, isShowDecPage: false,
appBarTitle: 'Locations', appBarTitle: 'Locations',
showNewAppBar: true,
showNewAppBarTitle: true,
backgroundColor: Color(0xffF8F8F8),
baseViewModel: model, baseViewModel: model,
body: Scaffold( body: Column(
extendBodyBehindAppBar: true, children: <Widget>[
appBar: PreferredSize( TabBar(
preferredSize: Size.fromHeight(65.0), controller: _tabController,
child: Stack( indicatorWeight: 3.0,
children: <Widget>[ indicatorSize: TabBarIndicatorSize.tab,
Positioned( labelColor: Color(0xff2B353E),
bottom: 1, unselectedLabelColor: Color(0xff575757),
left: 0, labelPadding: EdgeInsets.only(top: 15, bottom: 13, left: 20, right: 20),
right: 0, labelStyle: TextStyle(
child: BackdropFilter( fontSize: 16,
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), fontWeight: FontWeight.w600,
child: Container( letterSpacing: -0.48,
color: Theme.of(context) ),
.scaffoldBackgroundColor unselectedLabelStyle: TextStyle(
.withOpacity(0.8), fontSize: 16,
height: 70.0, fontWeight: FontWeight.w600,
), letterSpacing: -0.48,
), ),
), tabs: [Text(TranslationBase.of(context).hospitals), Text(TranslationBase.of(context).pharmacies)],
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 '),
),
),
],
),
),
),
),
],
), ),
), Expanded(
body: Column( child: TabBarView(
children: <Widget>[ physics: BouncingScrollPhysics(),
Expanded( controller: _tabController,
child: TabBarView( children: <Widget>[
physics: BouncingScrollPhysics(), HospitalsPage(findusHospitalModelList: model.FindusHospitalModelList), //SendFeedbackPage(),
controller: _tabController, PharmaciesPage(findusPharmaciesModelList: model.FindusPharmaciesModelList) //StatusFeedbackPage()
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/model/contactus/get_hmg_locations.dart';
import 'package:diplomaticquarterapp/core/viewModels/contactus/findus_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/contactus/findus_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.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/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -22,7 +23,180 @@ class HospitalsPage extends StatefulWidget {
class _HospitalsPageState extends State<HospitalsPage> { class _HospitalsPageState extends State<HospitalsPage> {
@override @override
Widget build(BuildContext context) { 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, isShowDecPage: false,
body: SingleChildScrollView( body: SingleChildScrollView(
child: Container( child: Container(
@ -46,65 +220,37 @@ class _HospitalsPageState extends State<HospitalsPage> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[ children: <Widget>[
Row( Row(
mainAxisAlignment: mainAxisAlignment: MainAxisAlignment.spaceBetween,
MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
Expanded( Expanded(
child: Row( child: Row(
mainAxisAlignment: mainAxisAlignment: MainAxisAlignment.spaceBetween,
MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: <Widget>[ children: <Widget>[
InkWell( InkWell(
onTap: () { onTap: () {
showDialog( showDialog(
context: context, context: context,
builder: (_) => builder: (_) => AssetGiffyDialog(
AssetGiffyDialog(
title: Text( title: Text(
widget widget.findusHospitalModelList[index].locationName,
.findusHospitalModelList[ style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.w600),
index]
.locationName,
style: TextStyle(
fontSize: 22.0,
fontWeight:
FontWeight
.w600),
), ),
image: Image.network( image: Image.network(
widget widget.findusHospitalModelList[index].projectImageURL.toString(),
.findusHospitalModelList[
index]
.projectImageURL
.toString(),
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
buttonCancelText: buttonCancelText: Text('cancel'),
Text('cancel'), buttonCancelColor: Colors.grey,
buttonCancelColor:
Colors.grey,
onlyCancelButton: true, onlyCancelButton: true,
)); ));
}, },
child: Container( child: Container(width: 70, height: 70, child: Image.network(widget.findusHospitalModelList[index].projectImageURL.toString())),
width: 70,
height: 70,
child: Image.network(widget
.findusHospitalModelList[
index]
.projectImageURL
.toString())),
), ),
Expanded( Expanded(
flex: 4, flex: 4,
child: Container( child: Container(
margin: EdgeInsets.only( margin: EdgeInsets.only(left: 5, right: 5, top: 10, bottom: 1),
left: 5,
right: 5,
top: 10,
bottom: 1),
child: Texts( child: Texts(
'${widget.findusHospitalModelList[index].locationName}', '${widget.findusHospitalModelList[index].locationName}',
textAlign: TextAlign.start, textAlign: TextAlign.start,
@ -112,14 +258,12 @@ class _HospitalsPageState extends State<HospitalsPage> {
Expanded( Expanded(
flex: 2, flex: 2,
child: Row( child: Row(
crossAxisAlignment: crossAxisAlignment: CrossAxisAlignment.center,
CrossAxisAlignment.center,
children: [ children: [
IconButton( IconButton(
icon: Icon( icon: Icon(
Icons.location_on, Icons.location_on,
color: Theme.of(context) color: Theme.of(context).primaryColor,
.primaryColor,
size: 35, size: 35,
), ),
// icon: new Image.asset( // icon: new Image.asset(
@ -127,27 +271,15 @@ class _HospitalsPageState extends State<HospitalsPage> {
tooltip: '', tooltip: '',
onPressed: () { onPressed: () {
setState(() { setState(() {
MapsLauncher.launchCoordinates( MapsLauncher.launchCoordinates(double.parse(widget.findusHospitalModelList[index].latitude),
double.parse(widget double.parse(widget.findusHospitalModelList[index].longitude), widget.findusHospitalModelList[index].locationName);
.findusHospitalModelList[
index]
.latitude),
double.parse(widget
.findusHospitalModelList[
index]
.longitude),
widget
.findusHospitalModelList[
index]
.locationName);
}); });
}, },
), ),
IconButton( IconButton(
icon: Icon( icon: Icon(
Icons.phone, Icons.phone,
color: Theme.of(context) color: Theme.of(context).primaryColor,
.primaryColor,
size: 35, size: 35,
), ),
// icon: new Image.asset( // icon: new Image.asset(
@ -156,11 +288,7 @@ class _HospitalsPageState extends State<HospitalsPage> {
onPressed: () { onPressed: () {
setState(() { setState(() {
// _volume += 10; // _volume += 10;
launch("tel://" + launch("tel://" + widget.findusHospitalModelList[index].phoneNumber);
widget
.findusHospitalModelList[
index]
.phoneNumber);
}); });
}, },
), ),
@ -193,32 +321,27 @@ class _HospitalsPageState extends State<HospitalsPage> {
mainAxisAlignment: MainAxisAlignment.spaceAround, mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [ children: [
IconButton( IconButton(
icon: new Image.asset( icon: new Image.asset('assets/images/new-design/youtube.png'),
'assets/images/new-design/youtube.png'),
iconSize: 70, iconSize: 70,
tooltip: 'Youtube', tooltip: 'Youtube',
onPressed: () { onPressed: () {
setState(() { setState(() {
launch( launch("https://www.youtube.com/c/DrsulaimanAlhabibHospitals");
"https://www.youtube.com/c/DrsulaimanAlhabibHospitals");
}); });
}, },
), ),
IconButton( IconButton(
icon: new Image.asset( icon: new Image.asset('assets/images/new-design/linkedin.png'),
'assets/images/new-design/linkedin.png'),
tooltip: 'LinkedIn', tooltip: 'LinkedIn',
iconSize: 70, iconSize: 70,
onPressed: () { onPressed: () {
setState(() { setState(() {
launch( launch("https://www.linkedin.com/company/drsulaiman-alhabib-medical-group");
"https://www.linkedin.com/company/drsulaiman-alhabib-medical-group");
}); });
}, },
), ),
IconButton( IconButton(
icon: new Image.asset( icon: new Image.asset('assets/images/new-design/twitter.png'),
'assets/images/new-design/twitter.png'),
tooltip: 'Twitter', tooltip: 'Twitter',
iconSize: 70, iconSize: 70,
onPressed: () { onPressed: () {
@ -228,14 +351,12 @@ class _HospitalsPageState extends State<HospitalsPage> {
}, },
), ),
IconButton( IconButton(
icon: new Image.asset( icon: new Image.asset('assets/images/new-design/facebook.png'),
'assets/images/new-design/facebook.png'),
tooltip: 'facebook', tooltip: 'facebook',
iconSize: 70, iconSize: 70,
onPressed: () { onPressed: () {
setState(() { setState(() {
launch( launch("https://www.facebook.com/DrSulaimanAlHabib?ref=tn_tnmn");
"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/model/contactus/get_hmg_locations.dart';
import 'package:diplomaticquarterapp/core/viewModels/contactus/findus_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/contactus/findus_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.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/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -22,239 +23,199 @@ class PharmaciesPage extends StatefulWidget {
class _PharmaciesPageState extends State<PharmaciesPage> { class _PharmaciesPageState extends State<PharmaciesPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppScaffold( return SingleChildScrollView(
isShowDecPage: false, physics: BouncingScrollPhysics(),
body: SingleChildScrollView( padding: EdgeInsets.only(bottom: 21, top: 21, left: 21, right: 21),
child: Container( child: Column(
margin: EdgeInsets.only(left: 15, right: 15, top: 70), children: [
child: Column( ListView.separated(
children: [ physics: NeverScrollableScrollPhysics(),
...List.generate( shrinkWrap: true,
widget.findusPharmaciesModelList.length, padding: EdgeInsets.zero,
(index) => Container( separatorBuilder: (context, index) => SizedBox(height: 14),
decoration: BoxDecoration( itemBuilder: (context, index) {
shape: BoxShape.rectangle, GetHMGLocationsModel _location = widget.findusPharmaciesModelList[index];
border: Border.all(color: Colors.white, width: 0.5), return Container(
borderRadius: BorderRadius.all(Radius.circular(5)), padding: const EdgeInsets.only(left: 12, right: 12, top: 12, bottom: 12),
color: Colors.white, decoration: BoxDecoration(
), borderRadius: BorderRadius.all(
child: Padding( Radius.circular(10.0),
padding: const EdgeInsets.all(8.0), ),
child: Column( boxShadow: [
crossAxisAlignment: CrossAxisAlignment.start, BoxShadow(
children: <Widget>[ color: Color(0xff000000).withOpacity(.05),
Row( //spreadRadius: 5,
mainAxisAlignment: blurRadius: 27,
MainAxisAlignment.spaceBetween, offset: Offset(0, -3),
children: <Widget>[ ),
Expanded( ],
child: Row( color: Colors.white),
mainAxisAlignment: child: Row(
MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: crossAxisAlignment: CrossAxisAlignment.center,
CrossAxisAlignment.center, children: <Widget>[
children: <Widget>[ InkWell(
InkWell( onTap: () {
onTap: () { showDialog(
showDialog( context: context,
context: context, builder: (_) => AssetGiffyDialog(
builder: (_) => title: Text(
AssetGiffyDialog( _location.locationName,
title: Text( style: TextStyle(fontSize: 22.0, fontWeight: FontWeight.w600),
widget ),
.findusPharmaciesModelList[ image: _location.projectImageURL != null
index] ? Image.network(
.locationName, _location.projectImageURL,
style: TextStyle( fit: BoxFit.cover,
fontSize: 22.0, )
fontWeight: : Image.network(
FontWeight 'https://hmgwebservices.com/Images/Hospitals/15.jpg',
.w600), fit: BoxFit.cover,
),
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);
});
},
),
],
),
),
],
),
), ),
], buttonCancelText: Text(TranslationBase.of(context).cancel),
), // buttonCancelText:Text(model.user.projectID) ,
Divider( buttonCancelColor: Colors.grey,
height: 4.5, onlyCancelButton: true,
color: Colors.grey[500],
)
],
), ),
), );
)),
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( Expanded(
icon: new Image.asset( child: Padding(
'assets/images/new-design/linkedin.png'), padding: EdgeInsets.only(left: 12, right: 12),
tooltip: 'LinkedIn', child: Column(
iconSize: 70, crossAxisAlignment: CrossAxisAlignment.start,
onPressed: () { children: [
setState(() { Text(
launch( _location.locationName?.trim() ?? "",
"https://www.linkedin.com/company/drsulaiman-alhabib-medical-group"); 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( IconButton(
icon: new Image.asset( icon: Icon(
'assets/images/new-design/twitter.png'), Icons.location_on,
tooltip: 'Twitter', color: Color(0xff2B353E),
iconSize: 70, ),
constraints: BoxConstraints(),
padding: EdgeInsets.all(8),
tooltip: '',
onPressed: () { onPressed: () {
setState(() { setState(() {
launch("https://twitter.com/HMG"); MapsLauncher.launchCoordinates(double.parse(_location.latitude), double.parse(_location.longitude), _location.locationName);
}); });
}, },
), ),
IconButton( IconButton(
icon: new Image.asset( icon: Icon(
'assets/images/new-design/facebook.png'), Icons.phone,
tooltip: 'facebook', color: Color(0xff2B353E),
iconSize: 70, ),
constraints: BoxConstraints(),
padding: EdgeInsets.all(8),
tooltip: '',
onPressed: () { onPressed: () {
setState(() { setState(() {
launch( launch("tel://" + _location.phoneNumber);
"https://www.facebook.com/DrSulaimanAlHabib?ref=tn_tnmn");
}); });
}, },
), ),
], ],
), ),
), );
], },
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/LiveChat/livechat_page.dart';
import 'package:diplomaticquarterapp/pages/ContactUs/findus/findus_page.dart'; import 'package:diplomaticquarterapp/pages/ContactUs/findus/findus_page.dart';
import 'package:diplomaticquarterapp/pages/feedback/feedback_home_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/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -14,11 +15,7 @@ class CardCommonContact extends StatelessWidget {
final text; final text;
final subText; final subText;
final type; final type;
const CardCommonContact( const CardCommonContact({@required this.image, @required this.text, @required this.subText, @required this.type});
{@required this.image,
@required this.text,
@required this.subText,
@required this.type});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -27,31 +24,37 @@ class CardCommonContact extends StatelessWidget {
onTap: () { onTap: () {
navigateToSearch(context, this.type); 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), margin: EdgeInsets.fromLTRB(9.0, 9.0, 9.0, 9.0),
decoration: BoxDecoration(boxShadow: [ decoration: BoxDecoration(boxShadow: [BoxShadow(color: Colors.grey[400], blurRadius: 2.0, spreadRadius: 0.0)], borderRadius: BorderRadius.circular(10), color: Colors.white),
BoxShadow(color: Colors.grey[400], blurRadius: 2.0, spreadRadius: 0.0)
], borderRadius: BorderRadius.circular(10), color: Colors.white),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container( Container(
margin: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 0.0), margin: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 0.0),
child: Texts(this.text, child: Texts(this.text,
// overflow: TextOverflow.clip, // overflow: TextOverflow.clip,
color:secondaryColor, color: secondaryColor,
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
fontSize: 20.0), fontSize: 20.0),
), ),
Container( Container(
margin: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0), margin: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0),
child: Texts(this.subText, child: Texts(this.subText, color: Colors.black, fontSize: 15.0),
color: Colors.black, fontSize: 15.0),
), ),
Align( Align(
alignment: projectViewModel.isArabic? Alignment.bottomLeft:Alignment.bottomRight, alignment: projectViewModel.isArabic ? Alignment.bottomLeft : Alignment.bottomRight,
child: Container( 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), child: Image.asset(this.image, width: 60.0, height: 60.0),
), ),
), ),
@ -62,7 +65,6 @@ class CardCommonContact extends StatelessWidget {
} }
Future navigateToSearch(context, type) async { Future navigateToSearch(context, type) async {
if (type == 0) { if (type == 0) {
Navigator.push(context, FadePage(page: FindUsPage())); Navigator.push(context, FadePage(page: FindUsPage()));
} else if (type == 1) { } else if (type == 1) {
@ -70,7 +72,6 @@ class CardCommonContact extends StatelessWidget {
} else if (type == 2) { } else if (type == 2) {
//LiveChatPage //LiveChatPage
Navigator.push(context, FadePage(page: 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:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:rating_bar/rating_bar.dart'; import 'package:rating_bar/rating_bar.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'widgets/AppointmentActions.dart'; import 'widgets/AppointmentActions.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
class AppointmentDetails extends StatefulWidget { class AppointmentDetails extends StatefulWidget {
AppoitmentAllHistoryResultList appo; AppoitmentAllHistoryResultList appo;
static bool isLoading = false; static bool isLoading = false;
final dynamic doctorSchedule;
static bool showFooterButton = false; static bool showFooterButton = false;
final int parentIndex; final int parentIndex;
AppointmentDetails({@required this.appo, this.parentIndex}); AppointmentDetails({@required this.appo, this.parentIndex, this.doctorSchedule});
@override @override
_AppointmentDetailsState createState() => _AppointmentDetailsState(); _AppointmentDetailsState createState() => _AppointmentDetailsState();
@ -40,6 +41,7 @@ class AppointmentDetails extends StatefulWidget {
class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTickerProviderStateMixin { class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTickerProviderStateMixin {
static TabController _tabController; static TabController _tabController;
AppSharedPreferences sharedPref = AppSharedPreferences();
List<DoctorRateDetails> doctorDetailsList = List(); List<DoctorRateDetails> doctorDetailsList = List();
ToDoCountProviderModel toDoProvider; ToDoCountProviderModel toDoProvider;
@ -48,13 +50,17 @@ class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTick
@override @override
void initState() { void initState() {
_tabController = new TabController(length: 2, vsync: this);
AppointmentDetails.showFooterButton = false; 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.doctorID = widget.appo.doctorID;
doctorList.clinicID = widget.appo.clinicID; doctorList.clinicID = widget.appo.clinicID;
doctorList.projectID = widget.appo.projectID; doctorList.projectID = widget.appo.projectID;
setTab();
super.initState(); super.initState();
} }
@ -176,7 +182,7 @@ class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTick
Navigator.push( Navigator.push(
context, context,
FadePage( FadePage(
page: SchedulePage(doctorList), page: SchedulePage(doctorList: doctorList),
), ),
); );
}, },
@ -217,7 +223,7 @@ class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTick
physics: NeverScrollableScrollPhysics(), physics: NeverScrollableScrollPhysics(),
children: [ children: [
AppointmentActions(appo: widget.appo, tabController: _tabController, enableFooterButton: enableFooterButton), 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, controller: _tabController,
), ),
@ -580,7 +586,13 @@ class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTick
} }
void openSchedule() { 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() { confirmAppointment() {

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

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

@ -41,13 +41,14 @@ class _WelcomeLogin extends State<WelcomeLogin> {
physics: BouncingScrollPhysics(), physics: BouncingScrollPhysics(),
children: [ children: [
SizedBox(height: 12), SizedBox(height: 12),
Align( Row(
alignment: Alignment.centerLeft, children: [
child: SvgPicture.asset( SvgPicture.asset(
"assets/images/new/hmg_icon.svg", "assets/images/new/hmg_icon.svg",
height: 62, height: 62,
width: 62, width: 62,
), ),
],
), ),
SizedBox(height: 24), SizedBox(height: 24),
Text( 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; AppGlobal.context = context;
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
actions: [
IconButton(
icon: Icon(Icons.info, color: Colors.white),
onPressed: () {
//openInfoPage()
},
)
],
bottom: TabBar( bottom: TabBar(
// isScrollable: true, // isScrollable: true,
@ -51,8 +59,7 @@ class _Settings extends State<Settings> with TickerProviderStateMixin {
controller: _tabController, controller: _tabController,
), ),
title: Text(TranslationBase.of(context).settings, title: Text(TranslationBase.of(context).settings,
style: style: TextStyle(color: Colors.white)),
TextStyle(color: Theme.of(context).textTheme.bodyText2.color)),
leading: Builder( leading: Builder(
builder: (BuildContext context) { builder: (BuildContext context) {
return ArrowBack(); return ArrowBack();

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

@ -2137,6 +2137,8 @@ class TranslationBase {
String get validPassportNumber => localizedValues["valid-passport-number"][locale.languageCode]; String get validPassportNumber => localizedValues["valid-passport-number"][locale.languageCode];
String get continuePlan => localizedValues["continue-plan"][locale.languageCode]; String get continuePlan => localizedValues["continue-plan"][locale.languageCode];
String get dentalProcedureList => localizedValues["dental-procedure-list"][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 timeNeeded => localizedValues["time-needed"][locale.languageCode];
String get totalTimeNeeded => localizedValues["total-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; bool shouldReload(TranslationBaseDelegate old) => false;
} }
extension xTranslationBase on TranslationBase{ extension xTranslationBase on TranslationBase {
isArabic() => locale.languageCode == "ar"; isArabic() => locale.languageCode == "ar";
} }

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

Loading…
Cancel
Save