Merge branches 'master' and 'my_trackers' of https://gitlab.com/Cloud_Solution/diplomatic-quarter into my_trackers

 Conflicts:
	lib/config/localized_values.dart
	lib/core/service/client/base_app_client.dart
	lib/locator.dart
	lib/pages/landing/landing_page.dart
er_location
Mohammad Aljammal 5 years ago
commit 3946f0355c

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -59,8 +59,15 @@ const GET_AMBULANCE_REQUEST=
'Services/Patients.svc/REST/PatientER_RRT_GetAllTransportationMethod';
///FindUs
const GET_FINDUS_REQUEST=
'Services/Lists.svc/REST/Get_HMG_Locations';
///LiveChat
const GET_LIVECHAT_REQUEST=
'Services/Patients.svc/REST/GetPatientICProjects';
///Reports
const REPORTS = 'Services/Doctors.svc/REST/GetPatientMedicalReportStatusInfo';

@ -227,7 +227,10 @@ const Map<String, Map<String, String>> localizedValues = {
'ar': 'مسح فوق رمز الاستجابة السريعة للتحقق في الجهاز في المستشفى'
},
"sendEmail": {"en": "Send Email", "ar": "ارسال نسخة"},
"EmailSentSuccessfully": {"en": "Email Sent Successfully", "ar": "تم إرسال البريد الإلكتروني بنجاح"},
"EmailSentSuccessfully": {
"en": "Email Sent Successfully",
"ar": "تم إرسال البريد الإلكتروني بنجاح"
},
"close": {"en": "Close", "ar": "مغلق"},
"booked": {"en": "Booked", "ar": "محجوز"},
"confirmed": {"en": "Confirmed", "ar": "مؤكد"},
@ -367,22 +370,32 @@ const Map<String, Map<String, String>> localizedValues = {
"consultation": {"en": "Consultation", "ar": "استشارة"},
"logs": {"en": "Logs", "ar": "السجلات"},
"textToSpeech": {"en": "How May I Help You?", "ar": "كيف يمكنني مساعدتك؟"},
"locationDialogMessage": {"en": "Allow the HMG app to access your location will assist you in showing the hospitals according to the nearest to you.", "ar": "السماح لتطبيق مجموعة الحبيب الطبية بالوصول إلى موقعك سيساعدك في إظهار المستشفيات وفقًا للأقرب إليك."},
"parking":{"en":"Parking","ar":"مواقف"},
"alhabiServices":{"en":"HMG Service","ar":"خدمات الحبيب"},
"parkingTitle":{"en":"Car service, car service, service to save parking information, return to it later, 1- By clicking on (Read the code), save the parking data. 2- By clicking on the button (view my car park), it shows you the cars location in Google Maps. 3- Read another position by pressing the Clear Position Data button.","ar":" خدمة المواقف، تتيح هذه الخدمة للمستخدم معلومات عن موقف السيارة ليسهل عليه العودة لها لاحقاً ، 1- بالضغط على زر(قراءة الكود) تستطيع حفظ البيانات الخاصة بالموقف. 2-بالضغط على زر(عرض موقف سيارتي) يعرض لك موقع السيارة في خرائط قوقل. 3- لإعادة قراءة موقف آخرعن طريق الضغط على زر(مسح بيانات الموقف). "},
"readBarcode":{"en":"Read Barcode","ar":"قراءة الكود"},
"showMyPark":{"en":"Show My Park","ar":"عرض بارك"},
"clearMyData":{"en":"clear My Data","ar":"امسح البيانات"},
"floor":{"en":"Floor:","ar":"الطابق"},
"gate":{"en":"Gate:","ar":"بوابة"},
"building":{"en":"Building:","ar":"المبنى"},
"branch":{"en":"Branch:","ar":"الفرع"},
"emergencyServices":{"en":"Emergency Services:","ar":"خدمات الطوارئ"},
"nearester":{"en":"Nearest ER:","ar":"أقرب طوارى"},
"locationa":{"en":"location:","ar":"الموقع"},
"ambulancerequest":{"en":"Ambulance :","ar":"طلب نقل "},
"requestA":{"en":"Request:","ar":"اسعاف"},
"locationDialogMessage": {
"en":
"Allow the HMG app to access your location will assist you in showing the hospitals according to the nearest to you.",
"ar":
"السماح لتطبيق مجموعة الحبيب الطبية بالوصول إلى موقعك سيساعدك في إظهار المستشفيات وفقًا للأقرب إليك."
},
"parking": {"en": "Parking", "ar": "مواقف"},
"alhabiServices": {"en": "HMG Service", "ar": "خدمات الحبيب"},
"parkingTitle": {
"en":
"Car service, car service, service to save parking information, return to it later, 1- By clicking on (Read the code), save the parking data. 2- By clicking on the button (view my car park), it shows you the cars location in Google Maps. 3- Read another position by pressing the Clear Position Data button.",
"ar":
" خدمة المواقف، تتيح هذه الخدمة للمستخدم معلومات عن موقف السيارة ليسهل عليه العودة لها لاحقاً ، 1- بالضغط على زر(قراءة الكود) تستطيع حفظ البيانات الخاصة بالموقف. 2-بالضغط على زر(عرض موقف سيارتي) يعرض لك موقع السيارة في خرائط قوقل. 3- لإعادة قراءة موقف آخرعن طريق الضغط على زر(مسح بيانات الموقف). "
},
"readBarcode": {"en": "Read Barcode", "ar": "قراءة الكود"},
"showMyPark": {"en": "Show My Park", "ar": "عرض بارك"},
"clearMyData": {"en": "clear My Data", "ar": "امسح البيانات"},
"floor": {"en": "Floor:", "ar": "الطابق"},
"gate": {"en": "Gate:", "ar": "بوابة"},
"building": {"en": "Building:", "ar": "المبنى"},
"branch": {"en": "Branch:", "ar": "الفرع"},
"emergencyServices": {"en": "Emergency Services:", "ar": "خدمات الطوارئ"},
"nearester": {"en": "Nearest ER:", "ar": "أقرب طوارى"},
"locationa": {"en": "location:", "ar": "الموقع"},
"ambulancerequest": {"en": "Ambulance :", "ar": "طلب نقل "},
"requestA": {"en": "Request:", "ar": "اسعاف"},
"MyAppointments": {"en": "My Appointments", "ar": "مواعيدي"},
"NoBookedAppointments": {
"en": "No Booked Appointments",
@ -450,6 +463,77 @@ const Map<String, Map<String, String>> localizedValues = {
"OrderDetails": {"en": "Order Details", "ar": "تفاصيل الطلب"},
"VitalSign": {"en": "Vital Sign", "ar": "العلامة حيوية"},
"MonthlyReports": {"en": "Monthly Reports", "ar": "تقارير شهرية"},
"km": {"en": "KMs:", "ar": "كم"},
"PatientHealthSummaryReport": {
"en": "Patient Health Summary Report",
"ar": " ملخص التقارير الشهرية"
},
"ToViewTheTermsAndConditions": {
"en": "To View The Terms And Conditions Report",
"ar": " عرض الشروط والأحكام "
},
"ClickHere": {"en": "Click here", "ar": "أنقر هنا"},
"IAgreeToTheTermsAndConditions": {
"en": "I agree to the terms and conditions ",
"ar": "أوافق على الشروط والاحكام "
},
"IAgreeToTheTermsAndConditionsSubtitle": {
"en": "I agree to the terms and conditions ",
"ar":
"هذا ملخص التقرير الصحي الشهري و الذي يسرد المؤشرات الصحية و نتائج التحاليل لأخر الزيارات. يرجى ملاحظة أن هذا التقرير هو تقرير يتم ارساله بشكل آلي من النظام و لا يعتبر رسمي و لا تؤخذ عليه أي قرارات طبية"
},
"Save": {"en": "Save", "ar": "حفظ "},
"UserAgreement": {"en": "User Agreement", "ar": "اتفاقية الخصوصية "},
"UpdateSuccessfully": {"en": "Update Successfully", "ar": "تم التحديث بنجاح"},
"CHECK_VACCINE_AVAILABILITY": {
"en": "CHECK VACCINE AVAILABILITY",
"ar": "تحقق من توافر اللقاح"
},
"MyVaccinesAvailability": {
"en": "MyVaccinesAvailability",
"ar": "توفر لقاحي"
},
"PaymentService": {"en": "Payment Service", "ar": "خدمة المدفوعات"},
"PaymentOnline": {"en": "Service", "ar": "الالكتروني"},
"OnlineCheckIn": {"en": "Online Check-In", "ar": "مدفوعات معلقة"},
"MyBalances": {"en": "My Balances", "ar": "رصيدي"},
"BalanceAmount": {"en": "Balance Amount", "ar": "رصيدالحساب"},
"TotalBalance": {"en": "Total Balance", "ar": "الرصيد الكلي"},
"CreateAdvancedPayment": {
"en": "Create Advanced Payment",
"ar": "إنشاء دفعة مقدمة"
},
"AdvancePayment": {"en": "Advance Payment", "ar": "الدفع مقدما"},
"AdvancePaymentLabel": {
"en":
"You can create and add an Advanced Payment for you account or other accounts.",
"ar": "يمكنك تحويل مبلغ لحسابك لدى المجموعة أو لحساب احد المراجعين"
},
"FileNumber": {"en": "File Number", "ar": "رقم الملف"},
"Amount": {"en": "Amount *", "ar": "المبلغ *"},
"DepositorEmail": {
"en": "Depositor Email *",
"ar": "البريد الإلكتروني للمودع *"
},
"Notes": {"en": "Notes", "ar": "ملاحظات"},
"SelectPatientName": {"en": "Select Patient Name", "ar": "اختر اسم المريض"},
"SelectFamilyPatientName": {"en": "Family Members", "ar": "أفراد الأسرة"},
"SelectHospital": {"en": "Select Hospital", "ar": "اختر المستشفى"},
"MyAccount": {"en": "My Account", "ar": "حسابي"},
"OtherAccount": {"en": "Other Account", "ar": "حساب آخر"},
"SelectBeneficiary": {"en": "Select Beneficiary", "ar": "حدد المستفيد"},
"ConfirmThePayment": {"en": "Confirm The Payment", "ar": "تأكيد عملية الدفع"},
"DepositorName": {"en": "Depositor Name", "ar": "اسم المودع *"},
"MobileNumber": {"en": "Mobile Number", "ar": "رقم الجوال"},
"Ok": {"en": "Ok", "ar": "حسنا"},
"TheVerificationCodeExpiresIn": {
"en": "The Verification Code Expires In",
"ar": "تنتهي صلاحية رمز التحقق في"
},
"PleaseEnterTheVerificationCode": {
"en": "Please enter the verification code send to",
"ar": "الرجاء إدخال رمز التحقق المرسل إلى"
},
"km":{"en":"KMs:","ar":"كم"},
"PatientHealthSummaryReport":{"en":"Patient Health Summary Report","ar":" ملخص التقارير الشهرية"},
"ToViewTheTermsAndConditions":{"en":"To View The Terms And Conditions Report","ar":" عرض الشروط والأحكام "},

@ -0,0 +1,80 @@
class GetHMGLocationsModel {
dynamic cityID;
String cityName;
dynamic cityNameN;
dynamic distanceInKilometers;
bool isActive;
String latitude;
int locationID;
String locationName;
dynamic locationNameN;
dynamic locationType;
String longitude;
int pharmacyLocationID;
String phoneNumber;
int projectID;
String projectImageURL;
int setupID;
dynamic sortOrder;
GetHMGLocationsModel(
{this.cityID,
this.cityName,
this.cityNameN,
this.distanceInKilometers,
this.isActive,
this.latitude,
this.locationID,
this.locationName,
this.locationNameN,
this.locationType,
this.longitude,
this.pharmacyLocationID,
this.phoneNumber,
this.projectID,
this.projectImageURL,
this.setupID,
this.sortOrder});
GetHMGLocationsModel.fromJson(Map<String, dynamic> json) {
cityID = json['CityID'];
cityName = json['CityName'];
cityNameN = json['CityNameN'];
distanceInKilometers = json['DistanceInKilometers'];
isActive = json['IsActive'];
latitude = json['Latitude'];
locationID = json['LocationID'];
locationName = json['LocationName'];
locationNameN = json['LocationNameN'];
locationType = json['LocationType'];
longitude = json['Longitude'];
pharmacyLocationID = json['PharmacyLocationID'];
phoneNumber = json['PhoneNumber'];
projectID = json['ProjectID'];
projectImageURL = json['ProjectImageURL'];
setupID = json['SetupID'];
sortOrder = json['SortOrder'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['CityID'] = this.cityID;
data['CityName'] = this.cityName;
data['CityNameN'] = this.cityNameN;
data['DistanceInKilometers'] = this.distanceInKilometers;
data['IsActive'] = this.isActive;
data['Latitude'] = this.latitude;
data['LocationID'] = this.locationID;
data['LocationName'] = this.locationName;
data['LocationNameN'] = this.locationNameN;
data['LocationType'] = this.locationType;
data['Longitude'] = this.longitude;
data['PharmacyLocationID'] = this.pharmacyLocationID;
data['PhoneNumber'] = this.phoneNumber;
data['ProjectID'] = this.projectID;
data['ProjectImageURL'] = this.projectImageURL;
data['SetupID'] = this.setupID;
data['SortOrder'] = this.sortOrder;
return data;
}
}

@ -0,0 +1,54 @@
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
class GetPatientICProjectsModel {
int id;
String projectName;
String projectNameN;
String value;
dynamic languageId;
DateTime createdOn;
String createdBy;
dynamic editedOn;
dynamic editedBy;
bool isActive;
GetPatientICProjectsModel(
{this.id,
this.projectName,
this.projectNameN,
this.value,
this.languageId,
this.createdOn,
this.createdBy,
this.editedOn,
this.editedBy,
this.isActive});
GetPatientICProjectsModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
projectName = json['ProjectName'];
projectNameN = json['ProjectNameN'];
value = json['Value'];
languageId = json['LanguageId'];
createdOn = DateUtil.convertStringToDate(json['CreatedOn']);
createdBy = json['CreatedBy'];
editedOn = json['EditedOn'];
editedBy = json['EditedBy'];
isActive = json['IsActive'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['ProjectName'] = this.projectName;
data['ProjectNameN'] = this.projectNameN;
data['Value'] = this.value;
data['LanguageId'] = this.languageId;
data['CreatedOn'] = this.createdOn;
data['CreatedBy'] = this.createdBy;
data['EditedOn'] = this.editedOn;
data['EditedBy'] = this.editedBy;
data['IsActive'] = this.isActive;
return data;
}
}

@ -55,21 +55,24 @@ class BaseAppClient {
body['DeviceTypeID'] = DeviceTypeID;
body['PatientType'] = body.containsKey('PatientType')
? body['PatientType'] != null ? body['PatientType'] : PATIENT_TYPE
: PATIENT_TYPE;
if(!body.containsKey('IsPublicRequest')) {
body['PatientType'] = body.containsKey('PatientType')
? body['PatientType'] != null ? body['PatientType'] : PATIENT_TYPE
: PATIENT_TYPE;
body['PatientTypeID'] = body.containsKey('PatientTypeID')
? body['PatientTypeID'] != null
? body['PatientTypeID']
: PATIENT_TYPE_ID
: PATIENT_TYPE_ID;
body['PatientTypeID'] = body.containsKey('PatientTypeID')
? body['PatientTypeID'] != null
? body['PatientTypeID']
: PATIENT_TYPE_ID
: PATIENT_TYPE_ID;
if (user != null) {
body['TokenID'] = token;
body['PatientID'] = user['PatientID'];
body['PatientOutSA'] = user['OutSA'];
body['SessionID'] = getSessionId(token);
if (user != null) {
body['TokenID'] = token;
body['PatientID'] =
body['PatientID'] != null ? body['PatientID'] : user['PatientID'];
body['PatientOutSA'] = user['OutSA'];
body['SessionID'] = getSessionId(token);
}
}
print("URL : $url");

@ -0,0 +1,36 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/contactus/get_hmg_locations.dart';
import '../base_service.dart';
class FindusService extends BaseService {
List<GetHMGLocationsModel> FindusModelList = List();
List<GetHMGLocationsModel> FindusHospitalModelList = List();
List<GetHMGLocationsModel> FindusPharmaciesModelList = List();
Map<String, dynamic> body = Map();
Future getAllFindUsOrders() async {
hasError = false;
await baseAppClient.post(GET_FINDUS_REQUEST,
onSuccess: (dynamic response, int statusCode) {
FindusModelList.clear();
FindusHospitalModelList.clear();
FindusPharmaciesModelList.clear();
response['ListHMGLocation'].forEach((vital) {
if (GetHMGLocationsModel.fromJson(vital).locationType == 1) {
FindusHospitalModelList.add(GetHMGLocationsModel.fromJson(vital));
} else {
FindusPharmaciesModelList.add(GetHMGLocationsModel.fromJson(vital));
}
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
}

@ -0,0 +1,39 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/contactus/get_hmg_locations.dart';
import 'package:diplomaticquarterapp/core/model/contactus/get_patientI_cprojects.dart';
import '../base_service.dart';
class LiveChatService extends BaseService{
List<GetPatientICProjectsModel> LivechatModelList=List();
Map<String, dynamic> body = Map();
Future getAllLiveChatOrders() async {
hasError = false;
body['List_PatientICProjects'] =false;
await baseAppClient.post(GET_LIVECHAT_REQUEST,
onSuccess: (dynamic response, int statusCode) {
LivechatModelList.clear();
response['List_PatientICProjects'].forEach((vital) {
LivechatModelList.add(GetPatientICProjectsModel.fromJson(vital));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
}

@ -88,6 +88,7 @@ class MyBalanceService extends BaseService {
onSuccess: (response, statusCode) async {
logInTokenID = response['LogInTokenID'];
verificationCode = response['VerificationCode'];
print(verificationCode);
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;

@ -0,0 +1,30 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/contactus/get_hmg_locations.dart';
import 'package:diplomaticquarterapp/core/service/contactus/finadus_service.dart';
import '../base_view_model.dart';
import '../../../locator.dart';
class FindusViewModel extends BaseViewModel {
FindusService _findusService = locator<FindusService>();
List<GetHMGLocationsModel> get FindusModelList =>
_findusService.FindusModelList;
List<GetHMGLocationsModel> get FindusHospitalModelList=>
_findusService.FindusHospitalModelList;
List<GetHMGLocationsModel> get FindusPharmaciesModelList=>
_findusService.FindusPharmaciesModelList;
getFindUsRequestOrders() async {
setState(ViewState.Busy);
await _findusService.getAllFindUsOrders();
if (_findusService.hasError) {
error = _findusService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
}

@ -0,0 +1,33 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/contactus/get_patientI_cprojects.dart';
import 'package:diplomaticquarterapp/core/service/contactus/livechat_service.dart';
import '../base_view_model.dart';
import '../../../locator.dart';
class LiveChatViewModel extends BaseViewModel{
LiveChatService _liveChatService =locator<LiveChatService>();
List<GetPatientICProjectsModel> get LiveChatModelList=>
_liveChatService.LivechatModelList;
getLiveChatRequestOrders() async {
setState(ViewState.Busy);
await _liveChatService.getAllLiveChatOrders();
if (_liveChatService.hasError) {
error = _liveChatService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
}

@ -4,6 +4,8 @@ import 'package:diplomaticquarterapp/uitl/navigation_service.dart';
import 'package:get_it/get_it.dart';
import 'core/service/appointment_rate_service.dart';
import 'core/service/contactus/finadus_service.dart';
import 'core/service/contactus/livechat_service.dart';
import 'core/service/dashboard_service.dart';
import 'core/service/er/am_service.dart';
import 'core/service/er/er_service.dart';
@ -26,6 +28,8 @@ import 'core/service/medical/radiology_service.dart';
import 'core/service/medical/reports_monthly_service.dart';
import 'core/service/medical/vital_sign_service.dart';
import 'core/viewModels/appointment_rate_view_model.dart';
import 'core/viewModels/contactus/findus_view_model.dart';
import 'core/viewModels/contactus/livechat_view_model.dart';
import 'core/viewModels/er/am_request_view_model.dart';
import 'core/viewModels/er/near_hospital_view_model.dart';
import 'core/viewModels/feedback/feedback_view_model.dart';
@ -89,6 +93,8 @@ void setupLocator() {
locator.registerLazySingleton(() => ActiveMedicationsService());
locator.registerLazySingleton(() => AskDoctorService());
locator.registerLazySingleton(() => AllergiesService());
locator.registerLazySingleton(() => FindusService());
locator.registerLazySingleton(() => LiveChatService());
/// View Model
locator.registerFactory(() => HospitalViewModel());
@ -111,6 +117,9 @@ void setupLocator() {
locator.registerFactory(() => AmRequestViewModel());
locator.registerFactory(() => PatientSickLeaveViewMode());
locator.registerFactory(() => MyBalanceViewModel());
locator.registerFactory(() => FindusViewModel());
locator.registerFactory(() => LiveChatViewModel());
locator.registerFactory(() => BloodSugarViewMode());
locator.registerFactory(() => BloodPressureViewMode());
locator.registerFactory(() => WeightPressureViewMode());

@ -1,10 +1,25 @@
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/health_converter.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/my_web_view.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/parking_page.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/BookingOptions.dart';
import 'package:diplomaticquarterapp/pages/ErService/ErOptions.dart';
import 'package:diplomaticquarterapp/pages/ToDoList/ToDo.dart';
import 'package:diplomaticquarterapp/pages/family/my-family.dart';
import 'package:diplomaticquarterapp/pages/insurance/insurance_update_screen.dart';
import 'package:diplomaticquarterapp/pages/livecare/livecare_home.dart';
import 'package:diplomaticquarterapp/pages/medical/medical_profile_page.dart';
import 'package:diplomaticquarterapp/pages/paymentService/payment_service.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';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/widgets/data_display/services)contaniner.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:webview_flutter/webview_flutter.dart';
class AllHabibMedicalService extends StatefulWidget {
@override
@ -17,31 +32,270 @@ class _AllHabibMedicalServiceState extends State<AllHabibMedicalService> {
return AppScaffold(
isShowAppBar: true,
appBarTitle: TranslationBase.of(context).alhabiServices,
body: ListView(
children: <Widget>[
InkWell(
onTap: ()=> Navigator.push(context, FadePage(page: ParkingPage())),
child: Container(
height: 50,
margin: EdgeInsets.all(8),
decoration: BoxDecoration(
color: Colors.white,
shape: BoxShape.rectangle,
borderRadius: BorderRadius.circular(7),
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Texts(
TranslationBase.of(context).parking,
fontSize: 16,
)
],
),
),
body: Column(
children: [
Expanded(
child: ListView(
scrollDirection: Axis.vertical,
physics: AlwaysScrollableScrollPhysics(),
shrinkWrap: true,
children: [
Container(
width: double.infinity,
height: 190,
decoration: BoxDecoration(
image: DecorationImage(
image: ExactAssetImage('assets/images/timeline_bg.png'),
fit: BoxFit.cover,
),
),
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 10.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Health Weather Indicators',
style: TextStyle(
color: Colors.white,
fontSize: 22.0,
fontWeight: FontWeight.w600,
),
),
SizedBox(
height: 35.0,
),
Text(
'Health Tips Based On Current Weather',
style: TextStyle(
color: Colors.white,
),
),
]),
),
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: MedicalProfilePage(),
),
),
imageLocation:
'assets/images/new-design/my_file_bottom_bar.png',
title: TranslationBase.of(context).myMedicalFile,
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: LiveCareHome(),
),
),
imageLocation: 'assets/images/new-design/liveCare_ar_bg.png',
title: TranslationBase.of(context).livecare,
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: BookingOptions(
isAppbar: true,
),
),
),
imageLocation:
'assets/images/new-design/booking_icon_active.png',
title: TranslationBase.of(context).bookAppo,
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: PaymentService(),
),
),
imageLocation:
'assets/images/al-habib_online_payment_service_icon.png',
title: TranslationBase.of(context).onlinePaymentService,
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(),
),
imageLocation:
'assets/images/al-habib_online_payment_service_icon.png',
title: 'Covid-19- Drive-Thru Test',
),
ServicesContainer(
onTap: () {
Navigator.push(
context,
FadePage(
page: ErOptions(
isAppbar: true,
),
),
);
},
imageLocation: 'assets/images/emergency_service_image.png',
title: TranslationBase.of(context).emergencyService,
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: ParkingPage(),
),
),
imageLocation: 'assets/images/pharmacy_logo.png',
title: 'Pharmacy'),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: InsuranceUpdate(),
),
),
imageLocation:
'assets/images/medical/insurance_card_icon.png',
title: TranslationBase.of(context).updateInsurance,
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(),
),
imageLocation: 'assets/images/ereferral_service_icon.png',
title: 'E-Referral',
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: MyFamily(),
),
),
imageLocation:
'assets/images/new-design/family_menu_icon_red.png',
title: 'My Family',
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(),
),
imageLocation:
'assets/images/new-design/children_vaccines_icon.png',
title: 'Child Vaccines',
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: ToDo(),
),
),
imageLocation:
'assets/images/new-design/upcoming_icon_bottom_bar.png',
title: TranslationBase.of(context).todoList,
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(),
),
imageLocation: 'assets/images/new-design/body_icon.png',
title: 'Symptom Checker'),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(),
),
imageLocation: 'assets/images/new-design/blood_icon.png',
title: 'Blood Donation',
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(),
),
imageLocation:
'assets/images/new-design/health_calculator_icon.png',
title: 'Health Calculators',
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
//page: HealthConverter(),
),
),
imageLocation:
'assets/images/new-design/health_convertor_icon.png',
title: 'Health Converter',
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: ParkingPage(),
),
),
imageLocation: 'assets/images/new-design/water_icon.png',
title: 'H2O',
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(),
),
imageLocation: 'assets/images/new-design/smartwatch_icon.png',
title: TranslationBase.of(context).smartWatches,
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: ParkingPage(),
),
),
imageLocation:
'assets/images/new-design/parking_system_icon.png',
title: TranslationBase.of(context).parking,
),
ServicesContainer(
onTap: () => launch(
"https://hmgwebservices.com/vt_mobile/html/index.html"),
imageLocation:
'assets/images/new-design/virtual_tour_icon.png',
title: 'Virtual Tour',
),
ServicesContainer(
onTap: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (BuildContext context) => MyWebView(
title: "HMG News",
selectedUrl: "https://twitter.com/hashtag/مجموعة_د_سليمان_الحبيب_الطبية?src=hashtag_click&f=live",
)));
},
imageLocation:
'assets/images/new-design/twitter_dashboard_icon.png',
title: 'Latest News',
),
ServicesContainer(
onTap: () => Navigator.push(
context,
FadePage(
page: ParkingPage(),
),
),
imageLocation: 'assets/images/new-design/find_us_icon.png',
title: 'Find Us',
),
],
),
),
],

@ -0,0 +1,94 @@
// import 'package:diplomaticquarterapp/uitl/translations_delegate_base.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/transitions/fade_page.dart';
// import 'package:flutter/material.dart';
//
// import 'health_converter/blood_sugar.dart';
//
// class HealthConverter extends StatefulWidget {
// @override
// _HealthConverterState createState() => _HealthConverterState();
// }
//
// class _HealthConverterState extends State<HealthConverter> {
// @override
// Widget build(BuildContext context) {
// return AppScaffold(
// isShowAppBar: true,
// appBarTitle: 'Health Converter',
// body: Column(
// children: [
// Container(
// width: double.infinity,
// height: 30,
// ),
// Row(
// children: [
// Expanded(
// flex: 1,
// child: InkWell(
// onTap: () {
// Navigator.push(
// context,
// FadePage(page: BloodSugar()),
// );
// },
// child: MedicalProfileItem(
// title: 'Blood',
// imagePath: 'blood_sugar_icon.png',
// subTitle: 'Sugar',
// ),
// ),
// ),
// Expanded(
// flex: 1,
// child: InkWell(
// onTap: () {
// Navigator.push(
// context,
// FadePage(
// // page: [](),
// ),
// );
// },
// child: MedicalProfileItem(
// title: 'Blood',
// imagePath: 'blood_cholesterol_icon.png',
// subTitle: 'Cholesterol',
// ),
// ),
// ),
// ],
// ),
// Row(
// children: [
// Expanded(
// flex: 1,
// child: InkWell(
// onTap: () {
// Navigator.push(
// context,
// FadePage(
// // page: [](),
// ),
// );
// },
// child: MedicalProfileItem(
// title: 'Triglycerides',
// imagePath: 'triglycerides_blood_icon.png',
// subTitle: 'Fat in blood',
// ),
// ),
// ),
// Expanded(
// flex: 1,
// child: Container(),
// ),
// ],
// )
// ],
// ),
// );
// }
// }

@ -0,0 +1,208 @@
// import 'package:diplomaticquarterapp/widgets/buttons/button.dart';
// import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
// import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
// import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
// import 'package:flutter/material.dart';
// import 'package:flutter/services.dart';
//
// const activeCardColor = Color(0xff70777A);
// const inactiveCardColor = Color(0xffFAFAFd);
//
// class BloodSugar extends StatefulWidget {
// @override
// _BloodSugarState createState() => _BloodSugarState();
// }
//
// Color color;
//
// class _BloodSugarState extends State<BloodSugar> {
// Color cardMGColor = inactiveCardColor;
// Color cardMMOLColor = inactiveCardColor;
//
// void updateColor(int type) {
// //MG/DLT card
// if (type == 1) {
// if (cardMGColor == inactiveCardColor) {
// cardMGColor = activeCardColor;
// cardMMOLColor = inactiveCardColor;
// } else {
// cardMGColor = inactiveCardColor;
// }
// }
// if (type == 2) {
// if (cardMMOLColor == inactiveCardColor) {
// cardMMOLColor = activeCardColor;
// cardMGColor = inactiveCardColor;
// } else {
// cardMMOLColor = inactiveCardColor;
// }
// }
// }
//
// bool _visible = false;
//
// TextEditingController textController = new TextEditingController();
// String finalValue;
//
// @override
// Widget build(BuildContext context) {
// return AppScaffold(
// isShowAppBar: true,
// appBarTitle: 'Blood Sugar Conversion',
// body: Padding(
// padding: const EdgeInsets.all(16.0),
// child: Column(
// //crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Container(
// width: 350.0,
// child: Text(
// 'Convert blood sugar/glucose from mmol/l (UK standard) to mg/dlt (US standard) and vice versa.',
// //textAlign: TextAlign.center,
// style: TextStyle(fontSize: 20.0),
// ),
// ),
// SizedBox(
// height: 15.0,
// ),
// Container(
// color: Colors.white,
// height: 120.0,
// child: Padding(
// padding: const EdgeInsets.all(8.0),
// child: Column(
// //crossAxisAlignment: CrossAxisAlignment.end,
// children: [
// Padding(
// padding: const EdgeInsets.symmetric(horizontal: 15.0),
// child: Row(
// children: [
// Texts(
// 'Convert from',
// )
// ],
// ),
// ),
// SizedBox(
// height: 9.0,
// ),
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceEvenly,
// children: [
// GestureDetector(
// onTap: () {
// setState(() {
// updateColor(1);
// finalValue = textController.text * 3;
// });
// },
// child: Container(
// height: 55.0,
// width: 150.0,
// decoration: BoxDecoration(
// color: cardMGColor,
// borderRadius: BorderRadius.circular(10.0),
// ),
// child: Padding(
// padding: const EdgeInsets.symmetric(
// vertical: 0.0, horizontal: 18.0),
// child: Texts('MG/DLt TO \nMMOL/L'),
// ),
// ),
// ),
// GestureDetector(
// onTap: () {
// setState(() {
// updateColor(2);
// finalValue = textController.text * 6;
// });
// },
// child: Container(
// height: 55.0,
// width: 150.0,
// decoration: BoxDecoration(
// color: cardMMOLColor,
// borderRadius: BorderRadius.circular(10.0),
// ),
// child: Padding(
// padding:
// const EdgeInsets.symmetric(horizontal: 16.0),
// child: Texts('MG/DLt TO\n MMOL/L'),
// ),
// ),
// ),
// ],
// ),
// ],
// ),
// ),
// ),
// SizedBox(
// height: 25.0,
// ),
// Container(
// height: 55.0,
// color: Colors.white,
// child: TextFormField(
// controller: textController,
// inputFormatters: <TextInputFormatter>[
// FilteringTextInputFormatter.digitsOnly
// ],
// keyboardType: TextInputType.number,
// decoration: InputDecoration(
// labelText: " Enter the reading value",
// ),
// ),
// ),
// SizedBox(
// height: 5.0,
// ),
// Visibility(
// visible: _visible,
// child: Container(
// height: 95.0,
// width: 350.0,
// decoration: BoxDecoration(
// color: Colors.white,
// border: Border.all(color: Colors.black),
// borderRadius: BorderRadius.circular(15.0),
// ),
// child: Padding(
// padding: const EdgeInsets.all(8.0),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Texts('Result:'),
// Text(
// finalValue.toString(),
// style: TextStyle(fontSize: 35.0),
// ),
// ],
// ),
// ),
// ),
// ),
// SizedBox(
// height: 15.0,
// ),
// Flexible(
// child: Container(
// height: 100.0,
// width: 150.0,
// child: Button(
// label: 'CALCULATE',
// onTap: () {
// setState(() {
// _visible = !_visible;
// });
// },
// ),
// ),
// ),
// ],
// ),
// ),
// );
// }
// }

@ -0,0 +1,38 @@
import 'dart:async';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:tweet_webview/tweet_webview.dart';
class MyWebView extends StatelessWidget {
final String title;
final String selectedUrl;
final Completer<WebViewController> _controller =
Completer<WebViewController>();
MyWebView({
@required this.title,
@required this.selectedUrl,
});
@override
Widget build(BuildContext context) {
return AppScaffold(
isShowAppBar: true,
appBarTitle: title,
body:
WebView(
initialUrl: selectedUrl,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
)
);
}
}

@ -223,6 +223,7 @@ class _SearchByClinicState extends State<SearchByClinic> {
}
}).catchError((err) {
print(err);
AppToast.showErrorToast(message: err);
}).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
}

@ -0,0 +1,196 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/contactus/livechat_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.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';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
class HospitalsLiveChatPage extends StatefulWidget {
@override
_HospitalsLiveChatPageState createState() => _HospitalsLiveChatPageState();
}
class _HospitalsLiveChatPageState extends State<HospitalsLiveChatPage> {
int tappedIndex;
String chat;
@override
void initState() {
super.initState();
tappedIndex = -1;
chat = "";
}
@override
Widget build(BuildContext context) {
return BaseView<LiveChatViewModel>(
onModelReady: (model) => model.getLiveChatRequestOrders(),
builder: (_, model, widget) => AppScaffold(
baseViewModel: model,
body: SingleChildScrollView(
child: Container(
margin: EdgeInsets.only(left: 15, right: 15),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Stack(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 20,
),
Container(
width: double.infinity,
height: 200,
decoration: BoxDecoration(
image: DecorationImage(
image: ExactAssetImage(
'assets/images/dashboard_top_bg.png'),
fit: BoxFit.cover),
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Texts(
'You can now talk directly to the appointments department by chat or request a call back\n \nChoose Hospital :',
color: Colors.white,
textAlign: TextAlign.start,
),
),
),
SizedBox(
height: MediaQuery.of(context).size.height * 0.85,
),
SizedBox(
height: 100,
),
],
),
Positioned(
left: 13,
right: 13,
top: 200,
child: Container(
width: double.maxFinite,
child: Column(
children: [
...List.generate(
model.LiveChatModelList.length,
(index) => Container(
margin: EdgeInsets.only(
left: 0, right: 0, bottom: 20),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
border: Border.all(
color: Colors.white, width: 0.5),
borderRadius: BorderRadius.all(
Radius.circular(5)),
color: tappedIndex == index
? Colors.red
: Colors.white,
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
InkWell(
onTap: () {
setState(() {
tappedIndex = index;
chat =
"http://chat.dshmg.com:7788/hmgchatapp/hmgchattest/Index.aspx?Name=${model.user.firstName}&PatientID=${model.user.patientID}&MobileNo=${model.user.mobileNumber}&Language=en&WorkGroup=${model.LiveChatModelList[index].value}";
});
},
child: Row(
mainAxisAlignment:
MainAxisAlignment
.spaceAround,
crossAxisAlignment:
CrossAxisAlignment.center,
children: <Widget>[
SizedBox(
width: 20,
),
Expanded(
child: Container(
margin:
EdgeInsets.only(
left: 5,
right: 5),
child: Texts(
'${model.LiveChatModelList[index].projectName}',
color:
tappedIndex ==
index
? Colors
.white
: Colors
.black,
textAlign: TextAlign
.center,
))), //model.cOCItemList[index].cOCTitl
IconButton(
icon: Icon(
Icons
.arrow_forward_rounded,
color:
tappedIndex == index
? Colors.white
: Colors.black,
),
tooltip: '',
onPressed: () {
setState(() {});
},
),
],
),
)
],
),
),
)),
],
),
),
),
],
),
Container(
height: MediaQuery.of(context).size.height * 0.20,
width: double.maxFinite,
)
],
),
),
),
bottomSheet: Container(
height: MediaQuery.of(context).size.height * 0.13,
width: double.infinity,
padding: EdgeInsets.all(8.0),
child: Center(
child: Container(
height: MediaQuery.of(context).size.height * 0.1,
width: MediaQuery.of(context).size.width * 0.8,
child: Button(
label: 'ٍStart',
loading: model.state == ViewState.BusyLocal,
onTap: () {
print("chat=" + chat);
launch(chat);
},
),
),
),
),
),
);
}
}

@ -0,0 +1,121 @@
import 'dart:ui';
import 'package:diplomaticquarterapp/pages/ContactUs/LiveChat/pharmaciesLivechat_page.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'hospitalsLivechat_page.dart';
class LiveChatPage extends StatefulWidget {
@override
_LiveChatPageState createState() => _LiveChatPageState();
}
class _LiveChatPageState extends State<LiveChatPage>
with SingleTickerProviderStateMixin {
TabController _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(length: 2, vsync: this);
}
@override
void dispose() {
super.dispose();
_tabController.dispose();
}
@override
@override
Widget build(BuildContext context) {
return AppScaffold(
isShowAppBar: true,
appBarTitle: 'Locations',
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.label,
indicatorSize: TabBarIndicatorSize.tab,
indicatorColor: Colors.red[800],
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>[
Expanded(
child: TabBarView(
physics: BouncingScrollPhysics(),
controller: _tabController,
children: <Widget>[
HospitalsLiveChatPage(), //SendFeedbackPage(),
PhamaciesLiveChatPage()
//StatusFeedbackPage()
],
),
)
],
),
),
);
}
}

@ -0,0 +1,89 @@
import 'package:diplomaticquarterapp/core/viewModels/contactus/findus_view_model.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/contactus/livechat_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.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';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
class PhamaciesLiveChatPage extends StatefulWidget {
@override
_PhamaciesLiveChatPageState createState() => _PhamaciesLiveChatPageState();
}
class _PhamaciesLiveChatPageState extends State<PhamaciesLiveChatPage> {
int tappedIndex;
String chat;
@override
void initState() {
super.initState();
tappedIndex = -1;
chat = "";
}
@override
Widget build(BuildContext context) {
return BaseView<LiveChatViewModel>(
onModelReady: (model) => model.getLiveChatRequestOrders(),
builder: (_, model, widget) => AppScaffold(
baseViewModel: model,
body: SingleChildScrollView(
child: Container(
margin: EdgeInsets.only(left: 15, right: 15),
child: Column(
children: [
SizedBox(
height: 20,
),
Container(
width: double.infinity,
height: 200,
decoration: BoxDecoration(
image: DecorationImage(
image: ExactAssetImage(''), fit: BoxFit.cover),
),
child: Texts(
'You can now talk directly to the pharmacist by chat or request a call back',
color: Colors.black,
textAlign: TextAlign.center,
),
),
///////////
SizedBox(
height: 100,
),
],
),
),
),
bottomSheet: Container(
height: MediaQuery.of(context).size.height * 0.13,
width: double.infinity,
padding: EdgeInsets.all(8.0),
child: Center(
child: Container(
height: MediaQuery.of(context).size.height * 0.1,
width: MediaQuery.of(context).size.width * 0.8,
child: Button(
label: 'ٍStart',
loading: model.state == ViewState.BusyLocal,
onTap: () {
print("chat=" + chat);
chat =
"http://chat.dshmg.com:7788/EPharmacyChat/EIndex.aspx?CustomerID=undefined&Name=${model.user.firstName}&MobileNo=${model.user.mobileNumber}&Language=1";
launch(chat);
},
),
),
),
),
),
);
}
}

@ -0,0 +1,131 @@
import 'dart:ui';
import 'package:diplomaticquarterapp/core/viewModels/contactus/findus_view_model.dart';
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/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class FindUsPage extends StatefulWidget {
@override
_FindUsPageState createState() => _FindUsPageState();
}
class _FindUsPageState extends State<FindUsPage>
with SingleTickerProviderStateMixin {
TabController _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(length: 2, vsync: this);
}
@override
void dispose() {
super.dispose();
_tabController.dispose();
}
@override
@override
Widget build(BuildContext context) {
return BaseView<FindusViewModel>(
onModelReady: (model) => model.getFindUsRequestOrders(), //model.getCOC(),
builder: (_, model, w) => AppScaffold(
isShowAppBar: true,
appBarTitle: 'Locations',
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.label,
indicatorSize: TabBarIndicatorSize.tab,
indicatorColor: Colors.red[800],
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>[
Expanded(
child: TabBarView(
physics: BouncingScrollPhysics(),
controller: _tabController,
children: <Widget>[
HospitalsPage(
findusHospitalModelList: model.FindusHospitalModelList,
), //SendFeedbackPage(),
PharmaciesPage(
findusPharmaciesModelList:
model.FindusPharmaciesModelList,
) //StatusFeedbackPage()
],
),
)
],
),
),
),
);
}
}

@ -0,0 +1,240 @@
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/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:giffy_dialog/giffy_dialog.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:maps_launcher/maps_launcher.dart';
class HospitalsPage extends StatefulWidget {
final List<GetHMGLocationsModel> findusHospitalModelList;
HospitalsPage({Key key, this.findusHospitalModelList});
@override
_HospitalsPageState createState() => _HospitalsPageState();
}
class _HospitalsPageState extends State<HospitalsPage> {
@override
Widget build(BuildContext context) {
return AppScaffold(
body: SingleChildScrollView(
child: Container(
// margin: EdgeInsets.only(left: 15,right: 15,top: 70),
margin: EdgeInsets.only(left: 15, right: 15, top: 70),
child: Column(
children: [
...List.generate(
widget.findusHospitalModelList.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,
mainAxisAlignment: MainAxisAlignment.center,
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
.findusHospitalModelList[
index]
.locationName,
style: TextStyle(
fontSize: 22.0,
fontWeight:
FontWeight
.w600),
),
image: Image.network(
widget
.findusHospitalModelList[
index]
.projectImageURL
.toString(),
fit: BoxFit.cover,
),
buttonCancelText:
Text('cancel'),
buttonCancelColor:
Colors.grey,
onlyCancelButton: true,
));
},
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),
child: Texts(
'${widget.findusHospitalModelList[index].locationName}',
textAlign: TextAlign.center,
))), //model.cOCItemList[index].cOCTitl
Expanded(
flex: 2,
child: Row(
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
IconButton(
// icon: Icon(Icons.person_pin_circle_outlined,color: Colors.red,),
icon: new Image.asset(
'assets/images/new-design/navigate.png'),
tooltip: '',
onPressed: () {
setState(() {
MapsLauncher.launchCoordinates(
double.parse(widget
.findusHospitalModelList[
index]
.latitude),
double.parse(widget
.findusHospitalModelList[
index]
.longitude),
widget
.findusHospitalModelList[
index]
.locationName);
});
},
),
IconButton(
// icon: Icon(Icons.phone,color: Colors.red,),
icon: new Image.asset(
'assets/images/new-design/call.png'),
tooltip: '',
onPressed: () {
setState(() {
// _volume += 10;
launch("tel://" +
widget
.findusHospitalModelList[
index]
.phoneNumber);
});
},
),
],
),
),
],
),
),
],
),
// Texts('${model.FindusHospitalModelList[index].locationName}'),
Divider(
height: 4.5,
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(() {
launch(
"https://www.youtube.com/c/DrsulaimanAlhabibHospitals");
});
},
),
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");
});
},
),
IconButton(
icon: new Image.asset(
'assets/images/new-design/twitter.png'),
tooltip: 'Twitter',
iconSize: 70,
onPressed: () {
setState(() {
launch("https://twitter.com/HMG");
});
},
),
IconButton(
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");
});
},
),
],
),
),
],
),
),
),
);
}
}

@ -0,0 +1,272 @@
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/widgets/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:giffy_dialog/giffy_dialog.dart';
import 'package:maps_launcher/maps_launcher.dart';
import 'package:url_launcher/url_launcher.dart';
class PharmaciesPage extends StatefulWidget {
final List<GetHMGLocationsModel> findusPharmaciesModelList;
PharmaciesPage({Key key, this.findusPharmaciesModelList});
@override
_PharmaciesPageState createState() => _PharmaciesPageState();
}
class _PharmaciesPageState extends State<PharmaciesPage> {
@override
Widget build(BuildContext context) {
return AppScaffold(
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
// .person_pin_circle_outlined,
// color: Colors.red,
// ),
icon: new Image.asset(
'assets/images/new-design/navigate.png'),
tooltip: '',
onPressed: () {
setState(() {
MapsLauncher.launchCoordinates(
double.parse(widget
.findusPharmaciesModelList[
index]
.latitude),
double.parse(widget
.findusPharmaciesModelList[
index]
.longitude),
widget
.findusPharmaciesModelList[
index]
.locationName);
// _volume += 10;
});
},
),
IconButton(
// icon: Icon(
// Icons.phone,
// color: Colors.red,
// ),
icon: new Image.asset(
'assets/images/new-design/call.png'),
tooltip: 'I',
onPressed: () {
setState(() {
// _volume += 10;
launch("tel://" +
widget
.findusPharmaciesModelList[
index]
.phoneNumber);
});
},
),
],
),
),
],
),
),
],
),
Divider(
height: 4.5,
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");
});
},
),
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");
});
},
),
IconButton(
icon: new Image.asset(
'assets/images/new-design/twitter.png'),
tooltip: 'Twitter',
iconSize: 70,
onPressed: () {
setState(() {
launch("https://twitter.com/HMG");
});
},
),
IconButton(
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");
});
},
),
],
),
),
],
),
),
),
);
}
}

@ -0,0 +1,93 @@
import 'package:diplomaticquarterapp/pages/ContactUs/widgets/card_common_contat.dart';
import 'package:diplomaticquarterapp/uitl/location_util.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import '../../uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/pages/ErService/widgets/card_common.dart';
class HmgServicePage extends StatefulWidget {
@override
_HmgServicePageState createState() => _HmgServicePageState();
}
class _HmgServicePageState extends State<HmgServicePage> {
LocationUtils locationUtils;
@override
void initState() {
locationUtils =
new LocationUtils(isShowConfirmDialog: true, context: context);
WidgetsBinding.instance
.addPostFrameCallback((_) => locationUtils.getCurrentLocation());
super.initState();
}
@override
Widget build(BuildContext context) {
return AppScaffold(
isShowAppBar: true,//widget.isAppbar,
appBarTitle: "HMG Services",//TranslationBase.of(context).bookAppo,
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: "Find us",
subText: "",
type: 0,
),
),
Expanded(
child: CardCommonContact(
image: 'assets/images/new-design/feedback_icon.png',
text: "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: "Live Chat",
subText: "Service",
type: 2,
),
),
Expanded(
child: Opacity(
opacity: 0,
child: CardCommonContact(
image: 'assets/images/new-design/feedback_icon.png',
text: "Feedback",
subText: "",
type: 3),
),
),
],
),
],
),
),
);
}
}

@ -0,0 +1,71 @@
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/transitions/fade_page.dart';
import 'package:flutter/material.dart';
class CardCommonContact extends StatelessWidget {
final image;
final text;
final subText;
final type;
const CardCommonContact(
{@required this.image,
@required this.text,
@required this.subText,
@required this.type});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
navigateToSearch(context, this.type);
},
child: 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),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
margin: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 0.0),
child: Text(this.text,
overflow: TextOverflow.clip,
style: TextStyle(
color: new Color(0xFFc5272d),
letterSpacing: 1.0,
fontSize: 20.0)),
),
Container(
margin: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0),
child: Text(this.subText,
overflow: TextOverflow.clip,
style: TextStyle(
color: Colors.black, letterSpacing: 1.0, fontSize: 15.0)),
),
Container(
alignment: Alignment.bottomRight,
margin: EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 8.0),
child: Image.asset(this.image, width: 60.0, height: 60.0),
),
],
),
),
);
}
Future navigateToSearch(context, type) async {
if (type == 0) {
Navigator.push(context, FadePage(page: FindUsPage()));
} else if (type == 1) {
Navigator.push(context, FadePage(page: FeedbackHomePage()));
} else if (type == 2) {
//LiveChatPage
Navigator.push(context, FadePage(page: LiveChatPage()));
}
}
}

@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/all_habib_medical_service_page.dart';
import 'package:diplomaticquarterapp/pages/ContactUs/hmg_service.dart';
import 'package:diplomaticquarterapp/pages/ErService/ErOptions.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/feedback/feedback_home_page.dart';
@ -363,7 +364,7 @@ class _HomePageState extends State<HomePage> {
height: 50,
),
SizedBox(
height: 15,
height: 13.5,
),
Texts(
TranslationBase.of(context)
@ -445,8 +446,8 @@ class _HomePageState extends State<HomePage> {
height: 8,
),
InkWell(
onTap: () => Navigator.push(
context, FadePage(page: PaymentService())),
onTap: () =>
Navigator.push(context, FadePage(page: PaymentService())),
child: Container(
margin: EdgeInsets.only(left: 15, right: 15),
child: Row(
@ -609,8 +610,10 @@ class _HomePageState extends State<HomePage> {
),
DashboardItem(
onTap: () {
// Navigator.push(
// context, FadePage(page: FeedbackHomePage()));
Navigator.push(
context, FadePage(page: FeedbackHomePage()));
context, FadePage(page: HmgServicePage()));
},
child: Container(
width: double.infinity,

@ -12,7 +12,6 @@ import 'package:diplomaticquarterapp/pages/ToDoList/ToDo.dart';
import 'package:diplomaticquarterapp/pages/livecare/incoming_call.dart';
import 'package:diplomaticquarterapp/pages/medical/medical_profile_page.dart';
import 'package:diplomaticquarterapp/pages/medical/my_admissions_page.dart';
import 'package:diplomaticquarterapp/services/robo_search/search_provider.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/uitl/CalendarUtils.dart';
import 'package:diplomaticquarterapp/uitl/LocalNotification.dart';
@ -22,7 +21,6 @@ import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/drawer/app_drawer_widget.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:permission_handler/permission_handler.dart';
@ -30,7 +28,6 @@ import 'package:provider/provider.dart';
import 'package:rxdart/rxdart.dart';
import 'home_page.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
@ -129,14 +126,7 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
_firebaseMessaging.setAutoInitEnabled(true);
if (Platform.isIOS) {
_firebaseMessaging.requestNotificationPermissions(
// const IosNotificationSettings(
// sound: true,
// badge: true,
// alert: true,
// provisional: true,
// ),
);
_firebaseMessaging.requestNotificationPermissions();
}
_firebaseMessaging.getToken().then((String token) {
@ -145,6 +135,8 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
checkUserStatus(token);
}
requestPermissions();
}).catchError((err) {
print(err);
});
//_firebase Background message handler

@ -1,11 +1,14 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/my_balance_view_model.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/models/FamilyFiles/GetAllSharedRecordByStatusResponse.dart';
import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/balance/dialogs/SelectHospitalDialog.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
@ -18,11 +21,10 @@ import 'package:flutter/material.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart';
import '../../../core/model/my_balance/AdvanceModel.dart';
import 'dialogs/ConfirmSMSDialog.dart';
import 'confirm_payment_page.dart';
import 'dialogs/SelectBeneficiaryDialog.dart';
import 'dialogs/SelectPatientFamilyDialog.dart';
import 'dialogs/SelectPatientInfoDialog.dart';
import 'confirm_payment_page.dart';
import 'new_text_Field.dart';
enum BeneficiaryType { MyAccount, MyFamilyFiles, OtherAccount, NON }
@ -40,12 +42,17 @@ class _AdvancePaymentPageState extends State<AdvancePaymentPage> {
String amount = "";
String email;
PatientInfo _selectedPatientInfo;
AuthenticatedUser authenticatedUser;
GetAllSharedRecordsByStatusList selectedPatientFamily;
AdvanceModel advanceModel = AdvanceModel();
AppSharedPreferences sharedPref = AppSharedPreferences();
AuthenticatedUser authUser;
@override
void initState() {
super.initState();
getAuthUser();
}
@override
@ -253,6 +260,7 @@ class _AdvancePaymentPageState extends State<AdvancePaymentPage> {
selectedPaymentMethod: value,
patientInfoAndMobileNumber:
model.patientInfoAndMobileNumber,
authenticatedUser: authUser,
),
),
);
@ -304,7 +312,6 @@ class _AdvancePaymentPageState extends State<AdvancePaymentPage> {
);
}
void confirmSelectPatientDialog(List<PatientInfo> patientInfoList) {
showDialog(
context: context,
@ -331,7 +338,8 @@ class _AdvancePaymentPageState extends State<AdvancePaymentPage> {
onValueSelected: (value) {
setState(() {
selectedPatientFamily = value;
_fileTextController.text = selectedPatientFamily.patientID.toString();
_fileTextController.text =
selectedPatientFamily.patientID.toString();
advanceModel.depositorName = value.patientName;
});
},
@ -369,10 +377,20 @@ class _AdvancePaymentPageState extends State<AdvancePaymentPage> {
return TranslationBase.of(context).selectPatientName;
}
getAuthUser() async {
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
var data = AuthenticatedUser.fromJson(
await this.sharedPref.getObject(USER_PROFILE));
setState(() {
authUser = data;
});
}
}
String getFamilyMembersName() {
if (selectedPatientFamily != null)
return selectedPatientFamily.patientName;
else
return TranslationBase.of(context).selectFamilyPatientName;
return TranslationBase.of(context).selectFamilyPatientName;
}
}

@ -1,28 +1,41 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/AdvanceModel.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/patient_info_and_mobile_number.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/my_balance_view_model.dart';
import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/core/model/my_balance/AdvanceModel.dart';
import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart';
import 'dialogs/ConfirmSMSDialog.dart';
import 'new_text_Field.dart';
import 'package:smart_progress_bar/smart_progress_bar.dart';
class ConfirmPaymentPage extends StatelessWidget {
final AdvanceModel advanceModel;
final PatientInfoAndMobileNumber patientInfoAndMobileNumber;
final String selectedPaymentMethod;
MyInAppBrowser browser;
AuthenticatedUser authenticatedUser;
AppSharedPreferences sharedPref = AppSharedPreferences();
ConfirmPaymentPage(
{this.advanceModel,
this.patientInfoAndMobileNumber,
this.selectedPaymentMethod});
this.selectedPaymentMethod,
this.authenticatedUser});
@override
Widget build(BuildContext context) {
@ -32,9 +45,18 @@ class ConfirmPaymentPage extends StatelessWidget {
barrierDismissible: false,
child: ConfirmSMSDialog(
phoneNumber: patientInfoAndMobileNumber.mobileNumber,
),
);
).then((value) {
print("dialog dismissed");
print(value);
if (value != null && value) {
AppoitmentAllHistoryResultList appo =
new AppoitmentAllHistoryResultList();
appo.projectID = patientInfoAndMobileNumber.projectID;
openPayment(selectedPaymentMethod, authenticatedUser,
double.parse(advanceModel.amount), appo);
}
});
}
return BaseView<MyBalanceViewModel>(
@ -139,7 +161,8 @@ class ConfirmPaymentPage extends StatelessWidget {
onTap: () {
model
.sendActivationCodeForAdvancePayment(
patientID: int.parse(advanceModel.fileNumber),projectID: advanceModel.hospitalsModel.iD)
patientID: int.parse(advanceModel.fileNumber),
projectID: advanceModel.hospitalsModel.iD)
.then((value) {
if (model.state != ViewState.ErrorLocal &&
model.state != ViewState.Error) showSMSDialog();
@ -174,4 +197,110 @@ class ConfirmPaymentPage extends StatelessWidget {
return 'assets/images/new-design/mada.png';
}
openPayment(String paymentMethod, AuthenticatedUser authenticatedUser,
double amount, AppoitmentAllHistoryResultList appo) {
browser = new MyInAppBrowser(
onExitCallback: onBrowserExit,
appo: appo,
onLoadStartCallback: onBrowserLoadStart);
browser.openPaymentBrowser(
amount,
"Advance Payment",
Utils.getAdvancePaymentTransID(
authenticatedUser.projectID, authenticatedUser.patientID),
appo.projectID.toString(),
authenticatedUser.emailAddress,
paymentMethod,
authenticatedUser,
browser);
}
onBrowserLoadStart(String url) {
print("onBrowserLoadStart");
print(url);
MyInAppBrowser.successURLS.forEach((element) {
if (url.contains(element)) {
if (browser.isOpened()) browser.close();
MyInAppBrowser.isPaymentDone = true;
return;
}
});
MyInAppBrowser.errorURLS.forEach((element) {
if (url.contains(element)) {
if (browser.isOpened()) browser.close();
MyInAppBrowser.isPaymentDone = false;
return;
}
});
}
onBrowserExit(AppoitmentAllHistoryResultList appo, bool isPaymentMade) {
print("onBrowserExit Called!!!!");
if (isPaymentMade) checkPaymentStatus(appo);
}
checkPaymentStatus(AppoitmentAllHistoryResultList appo) {
DoctorsListService service = new DoctorsListService();
service
.checkPaymentStatus(
Utils.getAppointmentTransID(
appo.projectID, appo.clinicID, appo.appointmentNo),
AppGlobal.context)
.then((res) {
print("Printing Payment Status Reponse!!!!");
print(res);
String paymentInfo = res['Response_Message'];
if (paymentInfo == 'Success') {
createAdvancePayment(res, appo);
} else {
AppToast.showErrorToast(message: res['Response_Message']);
}
}).catchError((err) {
print(err);
}).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
}
createAdvancePayment(res, AppoitmentAllHistoryResultList appo) {
DoctorsListService service = new DoctorsListService();
String paymentReference = res['Fort_id'].toString();
service
.createAdvancePayment(appo, res['Amount'], res['Fort_id'],
res['PaymentMethod'], AppGlobal.context)
.then((res) {
print(res['OnlineCheckInAppointments'][0]['AdvanceNumber']);
addAdvancedNumberRequest(
res['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(),
paymentReference,
appo.appointmentNo.toString(),
appo);
}).catchError((err) {
print(err);
}).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
}
addAdvancedNumberRequest(String advanceNumber, String paymentReference,
String appointmentID, AppoitmentAllHistoryResultList appo) {
DoctorsListService service = new DoctorsListService();
service
.addAdvancedNumberRequest(
advanceNumber, paymentReference, appointmentID, AppGlobal.context)
.then((res) {
print(res);
navigateToHome(AppGlobal.context);
}).catchError((err) {
print(err);
}).showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
}
Future navigateToHome(context) async {
Navigator.of(context).pushNamed(HOME);
}
}

@ -19,7 +19,13 @@ class ConfirmSMSDialog extends StatefulWidget {
final AdvanceModel advanceModel;
final PatientInfoAndMobileNumber patientInfoAndMobileNumber;
final String selectedPaymentMethod;
const ConfirmSMSDialog({Key key, this.phoneNumber,this.advanceModel,this.selectedPaymentMethod,this.patientInfoAndMobileNumber})
const ConfirmSMSDialog(
{Key key,
this.phoneNumber,
this.advanceModel,
this.selectedPaymentMethod,
this.patientInfoAndMobileNumber})
: super(key: key);
@override
@ -109,7 +115,7 @@ class _ConfirmSMSDialogState extends State<ConfirmSMSDialog> {
flex: 4,
child: Center(
child: Texts(
'SMS',
'SMS',
color: Colors.white,
textAlign: TextAlign.center,
))),
@ -140,7 +146,8 @@ class _ConfirmSMSDialogState extends State<ConfirmSMSDialog> {
Padding(
padding: const EdgeInsets.all(8.0),
child: Texts(
TranslationBase.of(context).pleaseEnterTheVerificationCode+'[${widget.phoneNumber}]',
TranslationBase.of(context).pleaseEnterTheVerificationCode +
'[${widget.phoneNumber}]',
textAlign: TextAlign.center,
),
),
@ -277,7 +284,7 @@ class _ConfirmSMSDialogState extends State<ConfirmSMSDialog> {
if (model.state == ViewState.ErrorLocal ||
model.state == ViewState.Error)
Container(
margin: EdgeInsets.only(left: 8,right: 8),
margin: EdgeInsets.only(left: 8, right: 8),
width: double.maxFinite,
child: Texts(
model.error,
@ -290,7 +297,9 @@ class _ConfirmSMSDialogState extends State<ConfirmSMSDialog> {
Padding(
padding: const EdgeInsets.all(8.0),
child: Texts(
TranslationBase.of(context).theVerificationCodeExpiresIn+' $timerText',
TranslationBase.of(context)
.theVerificationCodeExpiresIn +
' $timerText',
textAlign: TextAlign.center,
),
),
@ -301,7 +310,8 @@ class _ConfirmSMSDialogState extends State<ConfirmSMSDialog> {
padding: EdgeInsets.all(12),
child: SecondaryButton(
textColor: Colors.white,
label: TranslationBase.of(context).submit.toUpperCase(),
label:
TranslationBase.of(context).submit.toUpperCase(),
onTap: () {
submit(model);
},
@ -322,12 +332,14 @@ class _ConfirmSMSDialogState extends State<ConfirmSMSDialog> {
if (verifyAccountForm.currentState.validate()) {
final activationCode =
digit1.text + digit2.text + digit3.text + digit4.text;
model.checkActivationCodeForAdvancePayment(
activationCode: activationCode).then((value) {
//TODO complete payment
}).showProgressBar(
text: "Loading",
backgroundColor: Colors.blue.withOpacity(0.6));
model
.checkActivationCodeForAdvancePayment(activationCode: activationCode)
.then((value) {})
.showProgressBar(
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6))
.then((value) {
Navigator.pop(context, true);
});
}
}

@ -49,7 +49,7 @@ class _MedicalProfilePageState extends State<MedicalProfilePage> {
onModelReady: (model) => model.getAppointmentHistory(),
builder: (_, model, widget) => AppScaffold(
baseViewModel: model,
body: SafeArea(
body: Container(
child: SingleChildScrollView(
child: Column(
children: <Widget>[

@ -148,7 +148,8 @@ class ClinicListService extends BaseService {
"isDentalAllowedBackend": true,
"Latitude": lat.toString(),
"Longitude": long.toString(),
"DeviceTypeID": 1
"DeviceTypeID": req.DeviceTypeID,
"IsPublicRequest" : true
};
dynamic localRes;

@ -99,6 +99,14 @@ class Utils {
appoNo.toString();
}
static String getAdvancePaymentTransID(int projectID, int fileNumber) {
return projectID.toString() +
'-' +
fileNumber.toString() +
'-' +
DateTime.now().millisecondsSinceEpoch.toString();
}
bool validateIDBox(String value, type) {
Pattern pattern = loginIDPattern(type); //r'^\d+(?:\.\d+)?$';

@ -0,0 +1,50 @@
import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
class ServicesContainer extends StatelessWidget {
final String title;
final String imageLocation;
final Function onTap;
ServicesContainer({this.title, this.imageLocation, this.onTap});
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () => onTap(),
child: Container(
height: 60,
margin: EdgeInsets.all(8),
decoration: BoxDecoration(
color: Colors.white,
shape: BoxShape.rectangle,
borderRadius: BorderRadius.circular(7),
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
children: [
Image.asset(
imageLocation,
height: 30,
width: 40,
),
SizedBox(
width: 20,
),
Texts(
title,
fontSize: 16,
),
],
),
],
),
),
),
);
}
}

@ -16,8 +16,9 @@ dependencies:
flutter_localizations:
sdk: flutter
intl: ^0.16.1
# web view
webview_flutter: ^0.3.24
tweet_webview: ^0.2.2
# http client
http: ^0.12.1
connectivity: ^0.4.9

Loading…
Cancel
Save