Merge branch 'development' into 'medical-file'
# Conflicts: # lib/landing_page.dartmerge-requests/251/head
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "1008895414777",
|
||||||
|
"project_id": "doctorapp-9f172",
|
||||||
|
"storage_bucket": "doctorapp-9f172.appspot.com"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:1008895414777:android:d00fe21d6955c21b1f6d28",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.example.doctor_app_flutter"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "1008895414777-3mg88j5ocs5r1au7rf4sh3f4pgsri2f2.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyCNncEIj8ehVUSxV89rx0x1NaWp8t1YVkw"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "1008895414777-3mg88j5ocs5r1au7rf4sh3f4pgsri2f2.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "1008895414777",
|
||||||
|
"project_id": "doctorapp-9f172",
|
||||||
|
"storage_bucket": "doctorapp-9f172.appspot.com"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:1008895414777:android:d00fe21d6955c21b1f6d28",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.example.doctor_app_flutter"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "1008895414777-3mg88j5ocs5r1au7rf4sh3f4pgsri2f2.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyCNncEIj8ehVUSxV89rx0x1NaWp8t1YVkw"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "1008895414777-3mg88j5ocs5r1au7rf4sh3f4pgsri2f2.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
@ -1,4 +1,5 @@
|
|||||||
org.gradle.jvmargs=-Xmx1536M
|
|
||||||
android.enableR8=true
|
android.enableR8=true
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
|
org.gradle.jvmargs=-Xmx4608m
|
||||||
|
|||||||
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 488 B |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 140 KiB |
@ -0,0 +1,124 @@
|
|||||||
|
class GetIMEIDetailsModel {
|
||||||
|
int iD;
|
||||||
|
String iMEI;
|
||||||
|
int logInTypeID;
|
||||||
|
bool outSA;
|
||||||
|
String mobile;
|
||||||
|
Null identificationNo;
|
||||||
|
int doctorID;
|
||||||
|
String doctorName;
|
||||||
|
String doctorNameN;
|
||||||
|
int clinicID;
|
||||||
|
String clinicDescription;
|
||||||
|
Null clinicDescriptionN;
|
||||||
|
int projectID;
|
||||||
|
String projectName;
|
||||||
|
String genderDescription;
|
||||||
|
Null genderDescriptionN;
|
||||||
|
String titleDescription;
|
||||||
|
Null titleDescriptionN;
|
||||||
|
Null zipCode;
|
||||||
|
String createdOn;
|
||||||
|
Null createdBy;
|
||||||
|
String editedOn;
|
||||||
|
int editedBy;
|
||||||
|
bool biometricEnabled;
|
||||||
|
Null preferredLanguage;
|
||||||
|
bool isActive;
|
||||||
|
String vidaAuthTokenID;
|
||||||
|
String vidaRefreshTokenID;
|
||||||
|
|
||||||
|
GetIMEIDetailsModel(
|
||||||
|
{this.iD,
|
||||||
|
this.iMEI,
|
||||||
|
this.logInTypeID,
|
||||||
|
this.outSA,
|
||||||
|
this.mobile,
|
||||||
|
this.identificationNo,
|
||||||
|
this.doctorID,
|
||||||
|
this.doctorName,
|
||||||
|
this.doctorNameN,
|
||||||
|
this.clinicID,
|
||||||
|
this.clinicDescription,
|
||||||
|
this.clinicDescriptionN,
|
||||||
|
this.projectID,
|
||||||
|
this.projectName,
|
||||||
|
this.genderDescription,
|
||||||
|
this.genderDescriptionN,
|
||||||
|
this.titleDescription,
|
||||||
|
this.titleDescriptionN,
|
||||||
|
this.zipCode,
|
||||||
|
this.createdOn,
|
||||||
|
this.createdBy,
|
||||||
|
this.editedOn,
|
||||||
|
this.editedBy,
|
||||||
|
this.biometricEnabled,
|
||||||
|
this.preferredLanguage,
|
||||||
|
this.isActive,
|
||||||
|
this.vidaAuthTokenID,
|
||||||
|
this.vidaRefreshTokenID});
|
||||||
|
|
||||||
|
GetIMEIDetailsModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
iD = json['ID'];
|
||||||
|
iMEI = json['IMEI'];
|
||||||
|
logInTypeID = json['LogInTypeID'];
|
||||||
|
outSA = json['OutSA'];
|
||||||
|
mobile = json['Mobile'];
|
||||||
|
identificationNo = json['IdentificationNo'];
|
||||||
|
doctorID = json['DoctorID'];
|
||||||
|
doctorName = json['DoctorName'];
|
||||||
|
doctorNameN = json['DoctorNameN'];
|
||||||
|
clinicID = json['ClinicID'];
|
||||||
|
clinicDescription = json['ClinicDescription'];
|
||||||
|
clinicDescriptionN = json['ClinicDescriptionN'];
|
||||||
|
projectID = json['ProjectID'];
|
||||||
|
projectName = json['ProjectName'];
|
||||||
|
genderDescription = json['Gender_Description'];
|
||||||
|
genderDescriptionN = json['Gender_DescriptionN'];
|
||||||
|
titleDescription = json['Title_Description'];
|
||||||
|
titleDescriptionN = json['Title_DescriptionN'];
|
||||||
|
zipCode = json['ZipCode'];
|
||||||
|
createdOn = json['CreatedOn'];
|
||||||
|
createdBy = json['CreatedBy'];
|
||||||
|
editedOn = json['EditedOn'];
|
||||||
|
editedBy = json['EditedBy'];
|
||||||
|
biometricEnabled = json['BiometricEnabled'];
|
||||||
|
preferredLanguage = json['PreferredLanguage'];
|
||||||
|
isActive = json['IsActive'];
|
||||||
|
vidaAuthTokenID = json['VidaAuthTokenID'];
|
||||||
|
vidaRefreshTokenID = json['VidaRefreshTokenID'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ID'] = this.iD;
|
||||||
|
data['IMEI'] = this.iMEI;
|
||||||
|
data['LogInTypeID'] = this.logInTypeID;
|
||||||
|
data['OutSA'] = this.outSA;
|
||||||
|
data['Mobile'] = this.mobile;
|
||||||
|
data['IdentificationNo'] = this.identificationNo;
|
||||||
|
data['DoctorID'] = this.doctorID;
|
||||||
|
data['DoctorName'] = this.doctorName;
|
||||||
|
data['DoctorNameN'] = this.doctorNameN;
|
||||||
|
data['ClinicID'] = this.clinicID;
|
||||||
|
data['ClinicDescription'] = this.clinicDescription;
|
||||||
|
data['ClinicDescriptionN'] = this.clinicDescriptionN;
|
||||||
|
data['ProjectID'] = this.projectID;
|
||||||
|
data['ProjectName'] = this.projectName;
|
||||||
|
data['Gender_Description'] = this.genderDescription;
|
||||||
|
data['Gender_DescriptionN'] = this.genderDescriptionN;
|
||||||
|
data['Title_Description'] = this.titleDescription;
|
||||||
|
data['Title_DescriptionN'] = this.titleDescriptionN;
|
||||||
|
data['ZipCode'] = this.zipCode;
|
||||||
|
data['CreatedOn'] = this.createdOn;
|
||||||
|
data['CreatedBy'] = this.createdBy;
|
||||||
|
data['EditedOn'] = this.editedOn;
|
||||||
|
data['EditedBy'] = this.editedBy;
|
||||||
|
data['BiometricEnabled'] = this.biometricEnabled;
|
||||||
|
data['PreferredLanguage'] = this.preferredLanguage;
|
||||||
|
data['IsActive'] = this.isActive;
|
||||||
|
data['VidaAuthTokenID'] = this.vidaAuthTokenID;
|
||||||
|
data['VidaRefreshTokenID'] = this.vidaRefreshTokenID;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,140 @@
|
|||||||
|
class InsertIMEIDetailsModel {
|
||||||
|
String iMEI;
|
||||||
|
int logInTypeID;
|
||||||
|
Null outSA;
|
||||||
|
Null mobile;
|
||||||
|
Null identificationNo;
|
||||||
|
int doctorID;
|
||||||
|
String doctorName;
|
||||||
|
String doctorNameN;
|
||||||
|
int clinicID;
|
||||||
|
String clinicDescription;
|
||||||
|
Null clinicDescriptionN;
|
||||||
|
String projectName;
|
||||||
|
String genderDescription;
|
||||||
|
Null genderDescriptionN;
|
||||||
|
String titleDescription;
|
||||||
|
Null titleDescriptionN;
|
||||||
|
bool bioMetricEnabled;
|
||||||
|
Null preferredLanguage;
|
||||||
|
bool isActive;
|
||||||
|
int editedBy;
|
||||||
|
int projectID;
|
||||||
|
String tokenID;
|
||||||
|
int languageID;
|
||||||
|
String stamp;
|
||||||
|
String iPAdress;
|
||||||
|
double versionID;
|
||||||
|
int channel;
|
||||||
|
String sessionID;
|
||||||
|
bool isLoginForDoctorApp;
|
||||||
|
int patientOutSA;
|
||||||
|
String vidaAuthTokenID;
|
||||||
|
String vidaRefreshTokenID;
|
||||||
|
|
||||||
|
InsertIMEIDetailsModel(
|
||||||
|
{this.iMEI,
|
||||||
|
this.logInTypeID,
|
||||||
|
this.outSA,
|
||||||
|
this.mobile,
|
||||||
|
this.identificationNo,
|
||||||
|
this.doctorID,
|
||||||
|
this.doctorName,
|
||||||
|
this.doctorNameN,
|
||||||
|
this.clinicID,
|
||||||
|
this.clinicDescription,
|
||||||
|
this.clinicDescriptionN,
|
||||||
|
this.projectName,
|
||||||
|
this.genderDescription,
|
||||||
|
this.genderDescriptionN,
|
||||||
|
this.titleDescription,
|
||||||
|
this.titleDescriptionN,
|
||||||
|
this.bioMetricEnabled,
|
||||||
|
this.preferredLanguage,
|
||||||
|
this.isActive,
|
||||||
|
this.editedBy,
|
||||||
|
this.projectID,
|
||||||
|
this.tokenID,
|
||||||
|
this.languageID,
|
||||||
|
this.stamp,
|
||||||
|
this.iPAdress,
|
||||||
|
this.versionID,
|
||||||
|
this.channel,
|
||||||
|
this.sessionID,
|
||||||
|
this.isLoginForDoctorApp,
|
||||||
|
this.patientOutSA,
|
||||||
|
this.vidaAuthTokenID,
|
||||||
|
this.vidaRefreshTokenID});
|
||||||
|
|
||||||
|
InsertIMEIDetailsModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
iMEI = json['IMEI'];
|
||||||
|
logInTypeID = json['LogInTypeID'];
|
||||||
|
outSA = json['OutSA'];
|
||||||
|
mobile = json['Mobile'];
|
||||||
|
identificationNo = json['IdentificationNo'];
|
||||||
|
doctorID = json['DoctorID'];
|
||||||
|
doctorName = json['DoctorName'];
|
||||||
|
doctorNameN = json['DoctorNameN'];
|
||||||
|
clinicID = json['ClinicID'];
|
||||||
|
clinicDescription = json['ClinicDescription'];
|
||||||
|
clinicDescriptionN = json['ClinicDescriptionN'];
|
||||||
|
projectName = json['ProjectName'];
|
||||||
|
genderDescription = json['GenderDescription'];
|
||||||
|
genderDescriptionN = json['GenderDescriptionN'];
|
||||||
|
titleDescription = json['TitleDescription'];
|
||||||
|
titleDescriptionN = json['Title_DescriptionN'];
|
||||||
|
bioMetricEnabled = json['BioMetricEnabled'];
|
||||||
|
preferredLanguage = json['PreferredLanguage'];
|
||||||
|
isActive = json['IsActive'];
|
||||||
|
editedBy = json['EditedBy'];
|
||||||
|
projectID = json['ProjectID'];
|
||||||
|
tokenID = json['TokenID'];
|
||||||
|
languageID = json['LanguageID'];
|
||||||
|
stamp = json['stamp'];
|
||||||
|
iPAdress = json['IPAdress'];
|
||||||
|
versionID = json['VersionID'];
|
||||||
|
channel = json['Channel'];
|
||||||
|
sessionID = json['SessionID'];
|
||||||
|
isLoginForDoctorApp = json['IsLoginForDoctorApp'];
|
||||||
|
patientOutSA = json['PatientOutSA'];
|
||||||
|
vidaAuthTokenID = json['VidaAuthTokenID'];
|
||||||
|
vidaRefreshTokenID = json['VidaRefreshTokenID'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['IMEI'] = this.iMEI;
|
||||||
|
data['LogInTypeID'] = this.logInTypeID;
|
||||||
|
data['OutSA'] = this.outSA;
|
||||||
|
data['Mobile'] = this.mobile;
|
||||||
|
data['IdentificationNo'] = this.identificationNo;
|
||||||
|
data['DoctorID'] = this.doctorID;
|
||||||
|
data['DoctorName'] = this.doctorName;
|
||||||
|
data['DoctorNameN'] = this.doctorNameN;
|
||||||
|
data['ClinicID'] = this.clinicID;
|
||||||
|
data['ClinicDescription'] = this.clinicDescription;
|
||||||
|
data['ClinicDescriptionN'] = this.clinicDescriptionN;
|
||||||
|
data['ProjectName'] = this.projectName;
|
||||||
|
data['GenderDescription'] = this.genderDescription;
|
||||||
|
data['GenderDescriptionN'] = this.genderDescriptionN;
|
||||||
|
data['TitleDescription'] = this.titleDescription;
|
||||||
|
data['Title_DescriptionN'] = this.titleDescriptionN;
|
||||||
|
data['BioMetricEnabled'] = this.bioMetricEnabled;
|
||||||
|
data['PreferredLanguage'] = this.preferredLanguage;
|
||||||
|
data['IsActive'] = this.isActive;
|
||||||
|
data['EditedBy'] = this.editedBy;
|
||||||
|
data['ProjectID'] = this.projectID;
|
||||||
|
data['TokenID'] = this.tokenID;
|
||||||
|
data['LanguageID'] = this.languageID;
|
||||||
|
data['stamp'] = this.stamp;
|
||||||
|
data['IPAdress'] = this.iPAdress;
|
||||||
|
data['VersionID'] = this.versionID;
|
||||||
|
data['Channel'] = this.channel;
|
||||||
|
data['SessionID'] = this.sessionID;
|
||||||
|
data['IsLoginForDoctorApp'] = this.isLoginForDoctorApp;
|
||||||
|
data['PatientOutSA'] = this.patientOutSA;
|
||||||
|
data['VidaAuthTokenID'] = this.vidaAuthTokenID;
|
||||||
|
data['VidaRefreshTokenID'] = this.vidaRefreshTokenID;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
import 'package:doctor_app_flutter/config/config.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/model/imei_details.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/service/base/base_service.dart';
|
||||||
|
import 'package:doctor_app_flutter/models/dashboard/dashboard_model.dart';
|
||||||
|
|
||||||
|
class AuthService extends BaseService {
|
||||||
|
List<GetIMEIDetailsModel> _imeiDetails = [];
|
||||||
|
List<GetIMEIDetailsModel> get dashboardItemsList => _imeiDetails;
|
||||||
|
|
||||||
|
Future selectDeviceImei(imei) async {
|
||||||
|
try {
|
||||||
|
// dynamic localRes;
|
||||||
|
await baseAppClient.post(SELECT_DEVICE_IMEI,
|
||||||
|
onSuccess: (dynamic response, int statusCode) {
|
||||||
|
_imeiDetails = [];
|
||||||
|
response['List_DoctorDeviceDetails'].forEach((v) {
|
||||||
|
_imeiDetails.add(GetIMEIDetailsModel.fromJson(v));
|
||||||
|
});
|
||||||
|
}, onFailure: (String error, int statusCode) {
|
||||||
|
hasError = true;
|
||||||
|
super.error = error;
|
||||||
|
}, body: {"IMEI": imei, "TokenID": "@dm!n"});
|
||||||
|
//return Future.value(localRes);
|
||||||
|
} catch (error) {
|
||||||
|
hasError = true;
|
||||||
|
super.error = error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
import 'package:doctor_app_flutter/client/base_app_client.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/model/imei_details.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/service/auth_service.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/locator.dart';
|
||||||
|
|
||||||
|
class IMEIViewModel extends BaseViewModel {
|
||||||
|
AuthService _authService = locator<AuthService>();
|
||||||
|
List<GetIMEIDetailsModel> get imeiDetails => _authService.dashboardItemsList;
|
||||||
|
|
||||||
|
Future selectDeviceImei(imei) async {
|
||||||
|
setState(ViewState.Busy);
|
||||||
|
await _authService.selectDeviceImei(imei);
|
||||||
|
if (_authService.hasError) {
|
||||||
|
error = _authService.error;
|
||||||
|
setState(ViewState.Error);
|
||||||
|
} else
|
||||||
|
setState(ViewState.Idle);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
class PostEpisodeReqModel {
|
||||||
|
int appointmentNo;
|
||||||
|
int patientMRN;
|
||||||
|
int doctorID;
|
||||||
|
String vidaAuthTokenID;
|
||||||
|
|
||||||
|
PostEpisodeReqModel(
|
||||||
|
{this.appointmentNo,
|
||||||
|
this.patientMRN,
|
||||||
|
this.doctorID,
|
||||||
|
this.vidaAuthTokenID});
|
||||||
|
|
||||||
|
PostEpisodeReqModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
appointmentNo = json['AppointmentNo'];
|
||||||
|
patientMRN = json['PatientMRN'];
|
||||||
|
doctorID = json['DoctorID'];
|
||||||
|
vidaAuthTokenID = json['VidaAuthTokenID'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['AppointmentNo'] = this.appointmentNo;
|
||||||
|
data['PatientMRN'] = this.patientMRN;
|
||||||
|
data['DoctorID'] = this.doctorID;
|
||||||
|
data['VidaAuthTokenID'] = this.vidaAuthTokenID;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,60 @@
|
|||||||
|
class ActivationCodeModel2 {
|
||||||
|
int oTPSendType;
|
||||||
|
String mobileNumber;
|
||||||
|
String zipCode;
|
||||||
|
int channel;
|
||||||
|
int languageID;
|
||||||
|
double versionID;
|
||||||
|
int memberID;
|
||||||
|
int facilityId;
|
||||||
|
String generalid;
|
||||||
|
int isMobileFingerPrint;
|
||||||
|
String vidaAuthTokenID;
|
||||||
|
String vidaRefreshTokenID;
|
||||||
|
|
||||||
|
ActivationCodeModel2(
|
||||||
|
{this.oTPSendType,
|
||||||
|
this.mobileNumber,
|
||||||
|
this.zipCode,
|
||||||
|
this.channel,
|
||||||
|
this.languageID,
|
||||||
|
this.versionID,
|
||||||
|
this.memberID,
|
||||||
|
this.facilityId,
|
||||||
|
this.generalid,
|
||||||
|
this.isMobileFingerPrint,
|
||||||
|
this.vidaAuthTokenID,
|
||||||
|
this.vidaRefreshTokenID});
|
||||||
|
|
||||||
|
ActivationCodeModel2.fromJson(Map<String, dynamic> json) {
|
||||||
|
oTPSendType = json['OTP_SendType'];
|
||||||
|
mobileNumber = json['MobileNumber'];
|
||||||
|
zipCode = json['ZipCode'];
|
||||||
|
channel = json['Channel'];
|
||||||
|
languageID = json['LanguageID'];
|
||||||
|
versionID = json['VersionID'];
|
||||||
|
memberID = json['MemberID'];
|
||||||
|
facilityId = json['facilityId'];
|
||||||
|
generalid = json['generalid'];
|
||||||
|
isMobileFingerPrint = json['IsMobileFingerPrint'];
|
||||||
|
vidaAuthTokenID = json['VidaAuthTokenID'];
|
||||||
|
vidaRefreshTokenID = json['VidaRefreshTokenID'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['OTP_SendType'] = this.oTPSendType;
|
||||||
|
data['MobileNumber'] = this.mobileNumber;
|
||||||
|
data['ZipCode'] = this.zipCode;
|
||||||
|
data['Channel'] = this.channel;
|
||||||
|
data['LanguageID'] = this.languageID;
|
||||||
|
data['VersionID'] = this.versionID;
|
||||||
|
data['MemberID'] = this.memberID;
|
||||||
|
data['facilityId'] = this.facilityId;
|
||||||
|
data['generalid'] = this.generalid;
|
||||||
|
data['IsMobileFingerPrint'] = this.isMobileFingerPrint;
|
||||||
|
data['VidaAuthTokenID'] = this.vidaAuthTokenID;
|
||||||
|
data['VidaRefreshTokenID'] = this.vidaRefreshTokenID;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
|
||||||
|
import 'package:doctor_app_flutter/config/size_config.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/viewModel/patient-vital-sign-viewmodel.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/models/SOAP/GeneralGetReqForSOAP.dart';
|
||||||
|
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/models/patient/vital_sign/vital_sign_req_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/screens/base/base_view.dart';
|
||||||
|
import 'package:doctor_app_flutter/screens/medicine/medicine_search_screen.dart';
|
||||||
|
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class DrugToDrug extends StatefulWidget {
|
||||||
|
final PatiantInformtion patient;
|
||||||
|
DrugToDrug(this.patient);
|
||||||
|
@override
|
||||||
|
_DrugToDrug createState() => _DrugToDrug();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _DrugToDrug extends State<DrugToDrug> {
|
||||||
|
int typeID = 1;
|
||||||
|
List<Map<dynamic, dynamic>> expandableList = [
|
||||||
|
{'name': 'CRITICAL'},
|
||||||
|
{'name': 'HIGH'},
|
||||||
|
{'name': 'MODERATE'},
|
||||||
|
{'name': 'LOW'},
|
||||||
|
{'name': 'INFO'},
|
||||||
|
];
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
getTypeID();
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
GeneralGetReqForSOAP generalGetReqForSOAP = GeneralGetReqForSOAP(
|
||||||
|
patientMRN: 2954208, //widget.patient.patientMRN,
|
||||||
|
episodeId: 210011002, //widget.patient.episodeNo,
|
||||||
|
appointmentNo: 2016055308, //widget.patient.appointmentNo,
|
||||||
|
doctorID: '',
|
||||||
|
editedBy: '');
|
||||||
|
|
||||||
|
return BaseView<VitalSignsViewModel>(
|
||||||
|
onModelReady: (model) => model.getPatientVitalSign(widget.patient),
|
||||||
|
builder: (BuildContext context, model, Widget child) {
|
||||||
|
return BaseView<SOAPViewModel>(
|
||||||
|
onModelReady: (model2) =>
|
||||||
|
model2.getPatientAllergy(generalGetReqForSOAP),
|
||||||
|
builder: (BuildContext context, model2, Widget child) {
|
||||||
|
return BaseView<PrescriptionViewModel>(
|
||||||
|
onModelReady: (model3) => model3.getDrugToDrug(
|
||||||
|
model.patientVitalSigns, model2.patientAllergiesList),
|
||||||
|
builder: (BuildContext context,
|
||||||
|
PrescriptionViewModel model3, Widget child) =>
|
||||||
|
NetworkBaseView(
|
||||||
|
baseViewModel: model3,
|
||||||
|
child: Container(
|
||||||
|
height: SizeConfig.realScreenHeight * .45,
|
||||||
|
child: new ListView.builder(
|
||||||
|
itemCount: expandableList.length,
|
||||||
|
itemBuilder: (context, i) {
|
||||||
|
return new ExpansionTile(
|
||||||
|
title: new Text(
|
||||||
|
expandableList[i]['name'],
|
||||||
|
style: new TextStyle(
|
||||||
|
fontSize: 20.0,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontStyle: FontStyle.italic),
|
||||||
|
),
|
||||||
|
children: <Widget>[Text('Hi')],
|
||||||
|
);
|
||||||
|
}))));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
getTypeID() async {
|
||||||
|
var type = await sharedPref.getString(SLECTED_PATIENT_TYPE) == '0' ? 2 : 1;
|
||||||
|
setState(() {
|
||||||
|
typeID = type;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,346 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:doctor_app_flutter/config/size_config.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class SMSOTP {
|
||||||
|
final type;
|
||||||
|
final mobileNo;
|
||||||
|
final Function onSuccess;
|
||||||
|
final Function onFailure;
|
||||||
|
final context;
|
||||||
|
|
||||||
|
int remainingTime = 600;
|
||||||
|
|
||||||
|
Future<Null> timer;
|
||||||
|
|
||||||
|
static BuildContext _context;
|
||||||
|
|
||||||
|
static bool _loading;
|
||||||
|
|
||||||
|
SMSOTP(
|
||||||
|
this.context,
|
||||||
|
this.type,
|
||||||
|
this.mobileNo,
|
||||||
|
this.onSuccess,
|
||||||
|
this.onFailure,
|
||||||
|
);
|
||||||
|
|
||||||
|
final verifyAccountForm = GlobalKey<FormState>();
|
||||||
|
|
||||||
|
TextEditingController digit1 = TextEditingController(text: "");
|
||||||
|
TextEditingController digit2 = TextEditingController(text: "");
|
||||||
|
TextEditingController digit3 = TextEditingController(text: "");
|
||||||
|
TextEditingController digit4 = TextEditingController(text: "");
|
||||||
|
|
||||||
|
Map verifyAccountFormValue = {
|
||||||
|
'digit1': '',
|
||||||
|
'digit2': '',
|
||||||
|
'digit3': '',
|
||||||
|
'digit4': '',
|
||||||
|
};
|
||||||
|
final focusD1 = FocusNode();
|
||||||
|
final focusD2 = FocusNode();
|
||||||
|
final focusD3 = FocusNode();
|
||||||
|
final focusD4 = FocusNode();
|
||||||
|
String errorMsg;
|
||||||
|
ProjectViewModel projectProvider;
|
||||||
|
String displayTime = '';
|
||||||
|
|
||||||
|
displayDialog(BuildContext context) async {
|
||||||
|
return showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
projectProvider = Provider.of(context);
|
||||||
|
return AlertDialog(
|
||||||
|
title: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: <Widget>[
|
||||||
|
IconButton(
|
||||||
|
icon: Icon(Icons.close),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
this.onFailure();
|
||||||
|
},
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(10.0))),
|
||||||
|
content: StatefulBuilder(builder: (context, setState) {
|
||||||
|
if (displayTime == '') {
|
||||||
|
startTimer(setState);
|
||||||
|
}
|
||||||
|
return Container(
|
||||||
|
color: Colors.white,
|
||||||
|
height: SizeConfig.realScreenHeight * 0.5,
|
||||||
|
width: SizeConfig.realScreenWidth * 0.8,
|
||||||
|
child: Center(
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
type == 1
|
||||||
|
? Image.asset('assets/images/login/103.png')
|
||||||
|
: Image.asset('assets/images/login/104.png'),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.only(top: 5),
|
||||||
|
child: AppText(
|
||||||
|
TranslationBase.of(context).verificationMessage +
|
||||||
|
' XXXXXX' +
|
||||||
|
mobileNo
|
||||||
|
.toString()
|
||||||
|
.substring(mobileNo.toString().length - 3),
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
)),
|
||||||
|
Form(
|
||||||
|
key: verifyAccountForm,
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.only(top: 20),
|
||||||
|
child: Directionality(
|
||||||
|
textDirection: TextDirection.ltr,
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
width: SizeConfig.realScreenWidth * 0.15,
|
||||||
|
child: TextFormField(
|
||||||
|
textInputAction: TextInputAction.next,
|
||||||
|
style: buildTextStyle(),
|
||||||
|
autofocus: true,
|
||||||
|
maxLength: 1,
|
||||||
|
controller: digit1,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
keyboardType: TextInputType.number,
|
||||||
|
decoration: buildInputDecoration(context),
|
||||||
|
onSaved: (val) {},
|
||||||
|
validator: validateCodeDigit,
|
||||||
|
onFieldSubmitted: (_) {
|
||||||
|
FocusScope.of(context)
|
||||||
|
.requestFocus(focusD2);
|
||||||
|
},
|
||||||
|
onChanged: (val) {
|
||||||
|
if (val.length == 1) {
|
||||||
|
FocusScope.of(context)
|
||||||
|
.requestFocus(focusD2);
|
||||||
|
verifyAccountFormValue['digit1'] =
|
||||||
|
val.trim();
|
||||||
|
checkValue();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: SizeConfig.realScreenWidth * 0.15,
|
||||||
|
child: TextFormField(
|
||||||
|
focusNode: focusD2,
|
||||||
|
textInputAction: TextInputAction.next,
|
||||||
|
maxLength: 1,
|
||||||
|
controller: digit2,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: buildTextStyle(),
|
||||||
|
keyboardType: TextInputType.number,
|
||||||
|
decoration: buildInputDecoration(context),
|
||||||
|
onSaved: (val) {},
|
||||||
|
onFieldSubmitted: (_) {
|
||||||
|
FocusScope.of(context)
|
||||||
|
.requestFocus(focusD3);
|
||||||
|
},
|
||||||
|
onChanged: (val) {
|
||||||
|
if (val.length == 1) {
|
||||||
|
FocusScope.of(context)
|
||||||
|
.requestFocus(focusD3);
|
||||||
|
verifyAccountFormValue['digit2'] =
|
||||||
|
val.trim();
|
||||||
|
checkValue();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
validator: validateCodeDigit),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: SizeConfig.realScreenWidth * 0.15,
|
||||||
|
child: TextFormField(
|
||||||
|
focusNode: focusD3,
|
||||||
|
textInputAction: TextInputAction.next,
|
||||||
|
maxLength: 1,
|
||||||
|
controller: digit3,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: buildTextStyle(),
|
||||||
|
keyboardType: TextInputType.number,
|
||||||
|
decoration:
|
||||||
|
buildInputDecoration(context),
|
||||||
|
onSaved: (val) {},
|
||||||
|
onFieldSubmitted: (_) {
|
||||||
|
FocusScope.of(context)
|
||||||
|
.requestFocus(focusD4);
|
||||||
|
},
|
||||||
|
onChanged: (val) {
|
||||||
|
if (val.length == 1) {
|
||||||
|
FocusScope.of(context)
|
||||||
|
.requestFocus(focusD4);
|
||||||
|
verifyAccountFormValue['digit3'] =
|
||||||
|
val.trim();
|
||||||
|
checkValue();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
validator: validateCodeDigit)),
|
||||||
|
Container(
|
||||||
|
width: SizeConfig.realScreenWidth * 0.15,
|
||||||
|
child: TextFormField(
|
||||||
|
focusNode: focusD4,
|
||||||
|
maxLength: 1,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: buildTextStyle(),
|
||||||
|
controller: digit4,
|
||||||
|
keyboardType: TextInputType.number,
|
||||||
|
decoration:
|
||||||
|
buildInputDecoration(context),
|
||||||
|
onFieldSubmitted: (_) {
|
||||||
|
FocusScope.of(context)
|
||||||
|
.requestFocus(focusD4);
|
||||||
|
},
|
||||||
|
onChanged: (val) {
|
||||||
|
if (val.length == 1) {
|
||||||
|
verifyAccountFormValue['digit4'] =
|
||||||
|
val.trim();
|
||||||
|
checkValue();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
validator: validateCodeDigit)),
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.only(top: 10),
|
||||||
|
child: AppText(
|
||||||
|
TranslationBase.of(context).validationMessage +
|
||||||
|
' ' +
|
||||||
|
displayTime,
|
||||||
|
color: Colors.red,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
))
|
||||||
|
],
|
||||||
|
))),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
TextStyle buildTextStyle() {
|
||||||
|
return TextStyle(
|
||||||
|
fontSize: SizeConfig.textMultiplier * 3,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
InputDecoration buildInputDecoration(BuildContext context) {
|
||||||
|
return InputDecoration(
|
||||||
|
counterText: " ",
|
||||||
|
// ts/images/password_icon.png
|
||||||
|
// contentPadding: EdgeInsets.only(top: 20, bottom: 20),
|
||||||
|
enabledBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(10)),
|
||||||
|
borderSide: BorderSide(color: Colors.black),
|
||||||
|
),
|
||||||
|
focusedBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(10.0)),
|
||||||
|
borderSide: BorderSide(color: Theme.of(context).primaryColor),
|
||||||
|
),
|
||||||
|
errorBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(10.0)),
|
||||||
|
borderSide: BorderSide(color: Theme.of(context).errorColor),
|
||||||
|
),
|
||||||
|
focusedErrorBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(10.0)),
|
||||||
|
borderSide: BorderSide(color: Theme.of(context).errorColor),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
String validateCodeDigit(value) {
|
||||||
|
if (value.isEmpty) {
|
||||||
|
return ' ';
|
||||||
|
} else if (value.length == 3) {
|
||||||
|
print(value);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
checkValue() {
|
||||||
|
//print(verifyAccountFormValue);
|
||||||
|
if (verifyAccountForm.currentState.validate()) {
|
||||||
|
onSuccess(digit1.text.toString() +
|
||||||
|
digit2.text.toString() +
|
||||||
|
digit3.text.toString() +
|
||||||
|
digit4.text.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getSecondsAsDigitalClock(int inputSeconds) {
|
||||||
|
var sec_num =
|
||||||
|
int.parse(inputSeconds.toString()); // don't forget the second param
|
||||||
|
var hours = (sec_num / 3600).floor();
|
||||||
|
var minutes = ((sec_num - hours * 3600) / 60).floor();
|
||||||
|
var seconds = sec_num - hours * 3600 - minutes * 60;
|
||||||
|
var minutesString = "";
|
||||||
|
var secondsString = "";
|
||||||
|
minutesString =
|
||||||
|
minutes < 10 ? "0" + minutes.toString() : minutes.toString();
|
||||||
|
secondsString =
|
||||||
|
seconds < 10 ? "0" + seconds.toString() : seconds.toString();
|
||||||
|
return minutesString + ":" + secondsString;
|
||||||
|
}
|
||||||
|
|
||||||
|
startTimer(setState) {
|
||||||
|
this.remainingTime--;
|
||||||
|
setState(() {
|
||||||
|
displayTime = this.getSecondsAsDigitalClock(this.remainingTime);
|
||||||
|
});
|
||||||
|
|
||||||
|
timer = Future.delayed(Duration(seconds: 1), () {
|
||||||
|
if (this.remainingTime > 0) {
|
||||||
|
startTimer(setState);
|
||||||
|
} else {
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static void showLoadingDialog(BuildContext context, bool _loading) async {
|
||||||
|
_context = context;
|
||||||
|
|
||||||
|
if (_loading == false) {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_loading = true;
|
||||||
|
await showDialog(
|
||||||
|
context: _context,
|
||||||
|
barrierDismissible: false,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return SimpleDialog(
|
||||||
|
elevation: 0.0,
|
||||||
|
backgroundColor: Colors.transparent,
|
||||||
|
children: <Widget>[
|
||||||
|
Center(
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
valueColor: AlwaysStoppedAnimation<Color>(Colors.black),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static void hideSMSBox(context) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,92 +1,109 @@
|
|||||||
|
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
|
||||||
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
|
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
|
||||||
|
import 'package:doctor_app_flutter/models/SOAP/GeneralGetReqForSOAP.dart';
|
||||||
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
|
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/screens/base/base_view.dart';
|
||||||
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
|
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
|
||||||
import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_widget.dart';
|
import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_widget.dart';
|
||||||
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
|
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class PatientPageHeaderWidget extends StatelessWidget {
|
class PatientPageHeaderWidget extends StatelessWidget {
|
||||||
|
|
||||||
final PatiantInformtion patient;
|
final PatiantInformtion patient;
|
||||||
|
|
||||||
PatientPageHeaderWidget(this.patient);
|
PatientPageHeaderWidget(this.patient);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container(
|
return BaseView<SOAPViewModel>(
|
||||||
child: Column(
|
onModelReady: (model) async {
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
GeneralGetReqForSOAP generalGetReqForSOAP = GeneralGetReqForSOAP(
|
||||||
children: [
|
patientMRN: patient.patientMRN,
|
||||||
Padding(
|
episodeId: patient.episodeNo,
|
||||||
padding: const EdgeInsets.all(8.0),
|
appointmentNo: patient.appointmentNo,
|
||||||
child: Row(
|
doctorID: '',
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
editedBy: '');
|
||||||
mainAxisSize: MainAxisSize.min,
|
await model.getPatientAllergy(generalGetReqForSOAP);
|
||||||
children: <Widget>[
|
|
||||||
AvatarWidget(
|
},
|
||||||
Icon(
|
builder: (_, model, w) => Container(
|
||||||
patient.genderDescription == "Male"
|
child: Column(
|
||||||
? DoctorApp.male
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
: DoctorApp.female_icon,
|
children: [
|
||||||
size: 70,
|
Padding(
|
||||||
color: Colors.white,
|
padding: const EdgeInsets.all(8.0),
|
||||||
),
|
child: Row(
|
||||||
),
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
SizedBox(
|
mainAxisSize: MainAxisSize.min,
|
||||||
width: 20,
|
children: <Widget>[
|
||||||
),
|
AvatarWidget(
|
||||||
Expanded(
|
Icon(
|
||||||
child: Column(
|
patient.genderDescription == "Male"
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
? DoctorApp.male
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
: DoctorApp.female_icon,
|
||||||
children: [
|
size: 70,
|
||||||
SizedBox(
|
color: Colors.white,
|
||||||
height: 5,
|
|
||||||
),
|
|
||||||
AppText(
|
|
||||||
patient.firstName + ' ' + patient.lastName,
|
|
||||||
color: Colors.black,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
Row(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
AppText(
|
|
||||||
TranslationBase.of(context).age,
|
|
||||||
color: Colors.black,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
width: 20,
|
|
||||||
),
|
),
|
||||||
AppText(
|
),
|
||||||
patient.age.toString(),
|
SizedBox(
|
||||||
color: Colors.black,
|
width: 20,
|
||||||
fontWeight: FontWeight.normal,
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
height: 5,
|
||||||
|
),
|
||||||
|
AppText(
|
||||||
|
patient.firstName + ' ' + patient.lastName,
|
||||||
|
color: Colors.black,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
AppText(
|
||||||
|
TranslationBase.of(context).age,
|
||||||
|
color: Colors.black,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 20,
|
||||||
|
),
|
||||||
|
AppText(
|
||||||
|
patient.age.toString(),
|
||||||
|
color: Colors.black,
|
||||||
|
fontWeight: FontWeight.normal,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
NetworkBaseView(
|
||||||
|
baseViewModel: model,
|
||||||
|
child: model.patientAllergiesList.isNotEmpty ?AppText(
|
||||||
|
"ALLERGIC TO: "+model.getAllergicNames(),
|
||||||
|
color: Color(0xFFB9382C),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
) : AppText(''),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
],
|
)
|
||||||
),
|
],
|
||||||
AppText(
|
),
|
||||||
"ALLERGIC TO: FOOD, ASPIRIN, EGG WHITE",
|
),
|
||||||
color: Color(0xFFB9382C),
|
Container(
|
||||||
fontWeight: FontWeight.bold,
|
width: double.infinity,
|
||||||
),
|
height: 1,
|
||||||
],
|
color: Color(0xffCCCCCC),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 20,
|
||||||
),
|
),
|
||||||
)
|
],
|
||||||
],
|
),
|
||||||
),
|
));
|
||||||
),
|
|
||||||
Container(
|
|
||||||
width: double.infinity,
|
|
||||||
height: 1,
|
|
||||||
color: Color(0xffCCCCCC),
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
width: 20,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
// ignore: must_be_immutable
|
||||||
|
class CustomValidationError extends StatelessWidget {
|
||||||
|
String error;
|
||||||
|
CustomValidationError({
|
||||||
|
Key key, this.error,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
if(error == null )
|
||||||
|
error = TranslationBase
|
||||||
|
.of(context)
|
||||||
|
.emptyMessage;
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
height: 2,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.symmetric(horizontal: 3),
|
||||||
|
child: AppText(error, color: Theme
|
||||||
|
.of(context)
|
||||||
|
.errorColor, fontSize: 14,),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter_gifimage/flutter_gifimage.dart';
|
||||||
|
|
||||||
|
class GifLoaderContainer extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
_GifLoaderContainerState createState() => _GifLoaderContainerState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _GifLoaderContainerState extends State<GifLoaderContainer>
|
||||||
|
with TickerProviderStateMixin {
|
||||||
|
GifController controller1;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
controller1 = GifController(vsync: this);
|
||||||
|
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
|
controller1.repeat(
|
||||||
|
min: 0, max: 11, period: Duration(milliseconds: 750), reverse: true);
|
||||||
|
});
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
controller1.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Center(
|
||||||
|
//progress-loading.gif
|
||||||
|
child: Container(
|
||||||
|
// margin: EdgeInsets.only(bottom: 40),
|
||||||
|
child: GifImage(
|
||||||
|
controller: controller1,
|
||||||
|
image: AssetImage(
|
||||||
|
"assets/images/progress-loading-red.gif"), //NetworkImage("http://img.mp.itc.cn/upload/20161107/5cad975eee9e4b45ae9d3c1238ccf91e.jpg"),
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
import 'gif_loader_container.dart';
|
||||||
|
|
||||||
|
|
||||||
|
class GifLoaderDialogUtils {
|
||||||
|
static showMyDialog(BuildContext context) {
|
||||||
|
showDialog(context: context, child: GifLoaderContainer());
|
||||||
|
}
|
||||||
|
|
||||||
|
static hideDialog(BuildContext context) {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
}
|
||||||
|
}
|
||||||