merge-requests/315/head
Sultan Khan 5 years ago
commit 388c095d7f

@ -27,7 +27,8 @@ const PATIENT_GET_CLINIC_BY_PROJECT_URL =
const PROJECT_GET_INFO = "Services/DoctorApplication.svc/REST/GetProjectInfo";
const GET_CLINICS = "Services/DoctorApplication.svc/REST/GetClinics";
//const GET_PROJECTS = 'Services/Lists.svc/REST/GetProjectForDoctorAPP';
const GET_REFERRAL_FACILITIES = 'Services/DoctorApplication.svc/REST/GetReferralFacilities';
const GET_PROJECTS = 'Services/DoctorApplication.svc/REST/GetProjectInfo';
const GET_PATIENT_VITAL_SIGN =

@ -732,4 +732,6 @@ const Map<String, Map<String, String>> localizedValues = {
},
// 'icd': {'en': "ICD", 'ar': " "},
'orderNo': {'en': "Order No : ", 'ar': "رقم الطلب"},
'infoStatus': {'en': "Info Status", 'ar': "حالة المعلومات"},
'doctorResponse': {'en': "Doctor Response", 'ar': "استجابة الطبيب"},
};

@ -41,6 +41,8 @@ class EntityList {
String specialPermission;
String subGroup;
String template;
String remarks;
String type;
EntityList(
{this.allowedClinic,
@ -54,7 +56,9 @@ class EntityList {
this.procedureName,
this.specialPermission,
this.subGroup,
this.template});
this.template,
this.remarks,
this.type});
EntityList.fromJson(Map<String, dynamic> json) {
allowedClinic = json['allowedClinic'];

@ -49,6 +49,20 @@ class PatientReferralService extends LookupService {
}, body: info);
}
Future getReferralFacilities() async {
hasError = false;
Map<String, dynamic> body = Map();
body['isSameBranch'] = false;
await baseAppClient.post(GET_REFERRAL_FACILITIES, onSuccess: (response, statusCode) async {
projectsList = response['ProjectInfo'];
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
Future getProjectInfo(int projectId) async {
Map<String, dynamic> body = Map();
body['ProjectID'] = projectId;

@ -75,7 +75,7 @@ class ProcedureService extends BaseService {
Future getProcedureCategory({String categoryName, String categoryID}) async {
_getProcedureCategoriseReqModel = GetProcedureReqModel(
search: [""],
search: [categoryName],
patientMRN: 0,
pageIndex: 0,
clinicId: 0,

@ -62,7 +62,7 @@ class PatientReferralViewModel extends BaseViewModel {
Future getBranches() async {
setState(ViewState.BusyLocal);
await _referralPatientService.getProjectsList();
await _referralPatientService.getReferralFacilities();
if (_referralPatientService.hasError) {
error = _referralPatientService.error;
setState(ViewState.Error);
@ -77,7 +77,7 @@ class PatientReferralViewModel extends BaseViewModel {
await _referralPatientService.getProjectInfo(projectId);
if (_referralPatientService.hasError) {
error = _referralPatientService.error;
setState(ViewState.Error);
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
@ -87,7 +87,7 @@ class PatientReferralViewModel extends BaseViewModel {
await _referralPatientService.getDoctorsList(clinicId);
if (_referralPatientService.hasError) {
error = _referralPatientService.error;
setState(ViewState.Error);
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}

@ -1,5 +1,7 @@
import 'package:doctor_app_flutter/util/helpers.dart';
class ListGtMyPatientsQuestions {
String setupID;
int projectID;
@ -17,11 +19,14 @@ class ListGtMyPatientsQuestions {
int editedBy;
String editedOn;
String patientName;
String patientNameN;
Null patientNameN;
int gender;
String dateofBirth;
String mobileNumber;
String emailAddress;
String doctorResponse;
String infoStatus;
Null clinicID;
String age;
String genderDescription;
bool isVidaCall;
@ -48,6 +53,9 @@ class ListGtMyPatientsQuestions {
this.dateofBirth,
this.mobileNumber,
this.emailAddress,
this.doctorResponse,
this.infoStatus,
this.clinicID,
this.age,
this.genderDescription,
this.isVidaCall});
@ -61,6 +69,7 @@ class ListGtMyPatientsQuestions {
doctorID = json['DoctorID'];
requestType = json['RequestType'];
requestDate = Helpers.convertStringToDate(json['RequestDate']) ;
requestTime = json['RequestTime'];
remarks = json['Remarks'];
status = json['Status'];
@ -74,6 +83,9 @@ class ListGtMyPatientsQuestions {
dateofBirth = json['DateofBirth'];
mobileNumber = json['MobileNumber'];
emailAddress = json['EmailAddress'];
doctorResponse = json['DoctorResponse'];
infoStatus = json['InfoStatus'];
clinicID = json['ClinicID'];
age = json['Age'];
genderDescription = json['GenderDescription'];
isVidaCall = json['IsVidaCall'];
@ -102,6 +114,9 @@ class ListGtMyPatientsQuestions {
data['DateofBirth'] = this.dateofBirth;
data['MobileNumber'] = this.mobileNumber;
data['EmailAddress'] = this.emailAddress;
data['DoctorResponse'] = this.doctorResponse;
data['InfoStatus'] = this.infoStatus;
data['ClinicID'] = this.clinicID;
data['Age'] = this.age;
data['GenderDescription'] = this.genderDescription;
data['IsVidaCall'] = this.isVidaCall;

@ -209,7 +209,7 @@ class _QrReaderScreenState extends State<QrReaderScreen> {
setState(() {
isLoading = false;
});
helpers.showErrorToast(error);
helpers.showErrorToast(error.message);
//DrAppToastMsg.showErrorToast(error);
});
}

@ -589,7 +589,7 @@ class _MedicalFileDetailsState extends State<MedicalFileDetails> {
],
),
bodyWidget: ListView.builder(
//physics: ,
physics: NeverScrollableScrollPhysics(),
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: model
@ -763,7 +763,7 @@ class _MedicalFileDetailsState extends State<MedicalFileDetails> {
],
),
bodyWidget: ListView.builder(
//physics: ,
physics: NeverScrollableScrollPhysics(),
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: model

@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-referral-viewmodel.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
@ -177,15 +178,18 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
_selectedBranch = null;
_selectedClinic = null;
_selectedDoctor = null;
model.getDoctorBranch().then((value) {
model.getDoctorBranch().then((value) async {
_selectedBranch = value;
if (_referTo['id'] == 1) {
GifLoaderDialogUtils.showMyDialog(context);
model
await model
.getClinics(_selectedBranch['facilityId'])
.then((_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(model.error);
}
}
});
});
@ -226,15 +230,18 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
attributeValueId: 'facilityId',
okText: TranslationBase.of(context).ok,
okFunction: (selectedValue) {
setState(() {
setState(() async {
_selectedBranch = selectedValue;
_selectedClinic = null;
_selectedDoctor = null;
GifLoaderDialogUtils.showMyDialog(context);
model
await model
.getClinics(_selectedBranch['facilityId'])
.then((_) =>
GifLoaderDialogUtils.hideDialog(context));
if (model.state == ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(model.error);
}
});
},
);
@ -277,15 +284,18 @@ class _PatientMakeReferralScreenState extends State<PatientMakeReferralScreen> {
TranslationBase.of(context).clinicSearch,
okText: TranslationBase.of(context).ok,
okFunction: (selectedValue) {
setState(() {
setState(() async {
_selectedDoctor = null;
_selectedClinic = selectedValue;
GifLoaderDialogUtils.showMyDialog(context);
model
await model
.getClinicDoctors(
_selectedClinic['ClinicID'].toString())
.then((_) =>
GifLoaderDialogUtils.hideDialog(context));
if (model.state == ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(model.error);
}
});
},
);

@ -210,20 +210,21 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
NetworkBaseView(
baseViewModel: model,
child: GestureDetector(
onTap: (){
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
},
child: DraggableScrollableSheet(
initialChildSize: 0.90,
maxChildSize: 0.90,
minChildSize: 0.9,
builder: (BuildContext context, ScrollController scrollController) {
builder:
(BuildContext context, ScrollController scrollController) {
return SingleChildScrollView(
child: Container(
height: 1010,
child: Padding(
padding:
EdgeInsets.symmetric(horizontal: 12.0, vertical: 10.0),
padding: EdgeInsets.symmetric(
horizontal: 12.0, vertical: 10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
//mainAxisAlignment: MainAxisAlignment.spaceEvenly,
@ -267,8 +268,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
true,
),
itemSubmitted: (item) => setState(
() =>
_selectedMedication = item),
() => _selectedMedication =
item),
key: key,
suggestions:
model.allMedicationList,
@ -278,19 +279,18 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
child: Texts(suggestion
.description +
'/' +
suggestion.genericName),
suggestion
.genericName),
padding:
EdgeInsets.all(8.0)),
itemSorter: (a, b) => 1,
itemFilter: (suggestion, input) =>
suggestion.genericName
.toLowerCase()
.startsWith(
suggestion.genericName.toLowerCase().startsWith(
input.toLowerCase()) ||
suggestion.description
.toLowerCase()
.startsWith(
input.toLowerCase()) ||
.startsWith(input
.toLowerCase()) ||
suggestion.keywords
.toLowerCase()
.startsWith(
@ -338,19 +338,22 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
child: Row(
children: [
Container(
width:
MediaQuery.of(context).size.width *
width: MediaQuery.of(context)
.size
.width *
0.550,
child: TextFields(
inputFormatters: [
LengthLimitingTextInputFormatter(4),
WhitelistingTextInputFormatter
.digitsOnly
],
hintText: TranslationBase.of(context)
// inputFormatters: [
// LengthLimitingTextInputFormatter(
// 4),
// WhitelistingTextInputFormatter
// .digitsOnly
// ],
hintText:
TranslationBase.of(context)
.strength,
controller: strengthController,
keyboardType: TextInputType.number,
keyboardType: TextInputType.numberWithOptions(decimal: true,),
onChanged: (String value) {
setState(() {
strengthChar = value.length;
@ -375,35 +378,44 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
width: 10.0,
),
Container(
width:
MediaQuery.of(context).size.width *
width: MediaQuery.of(context)
.size
.width *
0.350,
child: InkWell(
onTap: model.medicationStrengthList !=
onTap:
model.medicationStrengthList !=
null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
Helpers.hideKeyboard(
context);
ListSelectDialog
dialog =
ListSelectDialog(
list: model
.medicationStrengthList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText: TranslationBase.of(
attributeName:
'nameEn',
attributeValueId:
'id',
okText:
TranslationBase.of(
context)
.ok,
okFunction:
(selectedValue) {
setState(() {
units = selectedValue;
units =
selectedValue;
});
},
);
showDialog(
barrierDismissible: false,
barrierDismissible:
false,
context: context,
builder:
(BuildContext context) {
builder: (BuildContext
context) {
return dialog;
},
);
@ -452,7 +464,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
builder:
(BuildContext context) {
return dialog;
},
);
@ -473,13 +486,14 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.medicationFrequencyList != null
onTap: model.medicationFrequencyList !=
null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list:
model.medicationFrequencyList,
list: model
.medicationFrequencyList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText:
@ -494,7 +508,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
builder:
(BuildContext context) {
return dialog;
},
);
@ -502,7 +517,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
: null,
child: TextField(
decoration: textFieldSelectorDecoration(
TranslationBase.of(context).frequency,
TranslationBase.of(context)
.frequency,
frequency != null
? frequency['nameEn']
: null,
@ -515,13 +531,14 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.medicationDoseTimeList != null
onTap: model.medicationDoseTimeList !=
null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list:
model.medicationDoseTimeList,
list: model
.medicationDoseTimeList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText:
@ -536,7 +553,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
builder:
(BuildContext context) {
return dialog;
},
);
@ -544,7 +562,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
: null,
child: TextField(
decoration: textFieldSelectorDecoration(
TranslationBase.of(context).doseTime,
TranslationBase.of(context)
.doseTime,
doseTime != null
? doseTime['nameEn']
: null,
@ -554,41 +573,30 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
),
),
SizedBox(height: spaceBetweenTextFileds),
if (model.patientAssessmentList.isNotEmpty)
Container(
height: screenSize.height * 0.070,
width: double.infinity,
child: Row(
children: [
Container(
width: MediaQuery.of(context)
.size
.width *
0.29,
child: InkWell(
onTap: indicationList != null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list: indicationList,
attributeName: 'name',
attributeValueId: 'id',
okText:
TranslationBase.of(context)
.ok,
okFunction: (selectedValue) {
setState(() {
indication = selectedValue;
});
},
);
showDialog(
barrierDismissible: false,
context: context,
builder:
(BuildContext context) {
return dialog;
},
);
Helpers.hideKeyboard(
context);
}
: null,
child: TextField(
decoration: textFieldSelectorDecoration(
model.patientAssessmentList[0]
decoration:
textFieldSelectorDecoration(
model
.patientAssessmentList[
0]
.icdCode10ID
.toString(),
indication != null
@ -600,57 +608,39 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
),
),
),
//model.patientAssessmentList.forEach((element) { }).
// Column(
// children: model.patientAssessmentList
// .map((element) {
// return Container(
// height: screenSize.height * 0.070,
// child: InkWell(
// onTap: indicationList != null
// ? () {
// ListSelectDialog dialog =
// ListSelectDialog(
// list: indicationList,
// attributeName: 'name',
// attributeValueId: 'id',
// okText: TranslationBase.of(
// context)
// .ok,
// okFunction: (selectedValue) {
// setState(() {
// indication =
// selectedValue;
// });
// },
// );
// showDialog(
// barrierDismissible: false,
// context: context,
// builder:
// (BuildContext context) {
// return dialog;
// },
// );
// }
// : null,
// child: TextField(
// decoration:
// textFieldSelectorDecoration(
// element.icdCode10ID
// .toString(),
// indication != null
// ? indication['name']
// : null,
// true),
// enabled: true,
// readOnly: true,
// ),
// ),
// );
// }).toList(),
// ),
Container(
width: MediaQuery.of(context)
.size
.width *
0.65,
child: InkWell(
onTap: indicationList != null
? () {
Helpers.hideKeyboard(
context);
}
: null,
child: TextField(
maxLines: 5,
decoration:
textFieldSelectorDecoration(
model
.patientAssessmentList[
0]
.asciiDesc
.toString(),
indication != null
? indication['name']
: null,
true),
enabled: true,
readOnly: true,
),
),
),
],
),
),
SizedBox(height: spaceBetweenTextFileds),
Container(
height: screenSize.height * 0.070,
@ -660,7 +650,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
child: TextField(
decoration:
Helpers.textFieldSelectorDecoration(
TranslationBase.of(context).date,
TranslationBase.of(context)
.date,
selectedDate != null
? "${DateUtils.convertStringToDateFormat(selectedDate.toString(), "yyyy-MM-dd")}"
: null,
@ -677,13 +668,14 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: model.medicationDurationList != null
onTap: model.medicationDurationList !=
null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list:
model.medicationDurationList,
list: model
.medicationDurationList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText:
@ -698,7 +690,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
builder:
(BuildContext context) {
return dialog;
},
);
@ -706,7 +699,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
: null,
child: TextField(
decoration: textFieldSelectorDecoration(
TranslationBase.of(context).duration,
TranslationBase.of(context)
.duration,
duration != null
? duration['nameEn']
: null,
@ -726,17 +720,10 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
child: TextFields(
maxLines: 6,
minLines: 4,
hintText:
TranslationBase.of(context).instruction,
hintText: TranslationBase.of(context)
.instruction,
controller: instructionController,
//keyboardType: TextInputType.number,
validator: (value) {
if (value.isEmpty)
return TranslationBase.of(context)
.emptyMessage;
else
return null;
},
),
),
SizedBox(height: spaceBetweenTextFileds),
@ -763,8 +750,23 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
"Please Fill All Fields");
return;
}
if (int.parse(
strengthController.text) >
1000) {
DrAppToastMsg.showErrorToast(
"1000 is the MAX for the strength");
return;
}
if (int.parse(
strengthController.text) ==
0) {
DrAppToastMsg.showErrorToast(
"Streangth can't be zero");
return;
}
if (formKey.currentState.validate()) {
if (formKey.currentState
.validate()) {
Navigator.pop(context);
{
// var x = model
@ -801,8 +803,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
model: widget.model,
duration:
duration['id'].toString(),
frequency:
frequency['id'].toString(),
frequency: frequency['id']
.toString(),
route: route['id'].toString(),
drugId: _selectedMedication
.itemId
@ -812,7 +814,8 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
indication:
indicationController.text,
instruction:
instructionController.text,
instructionController
.text,
doseTime: selectedDate,
);
}

@ -214,16 +214,16 @@ class _NewPrescriptionScreenState extends State<NewPrescriptionScreen> {
0]
.entityList[
index]
.startDate)
.createdOn)
.day
.toString(),
color: Colors
.green,
),
AppText(
Helpers.getMonth(model.prescriptionList[0].entityList[index].startDate !=
Helpers.getMonth(model.prescriptionList[0].entityList[index].createdOn !=
null
? (DateTime.parse(model.prescriptionList[0].entityList[index].startDate)
? (DateTime.parse(model.prescriptionList[0].entityList[index].createdOn)
.month)
: DateTime.now()
.month)
@ -261,9 +261,13 @@ class _NewPrescriptionScreenState extends State<NewPrescriptionScreen> {
child:
AppText(
model
.prescriptionList[0]
.entityList[index]
.startDate,
.prescriptionList[
0]
.entityList[
index]
.startDate
.replaceAll("-",
"/"),
fontSize:
12.0,
),

@ -8,6 +8,7 @@ import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/prescription_view_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/date-utils.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
@ -36,6 +37,7 @@ class UpdatePrescriptionForm extends StatefulWidget {
final String startDate;
final String frequency;
final String drugNameGeneric;
final PrescriptionViewModel model;
UpdatePrescriptionForm(
@ -71,14 +73,44 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
GetMedicationResponseModel newSelectedMedication;
GlobalKey key =
new GlobalKey<AutoCompleteTextFieldState<GetMedicationResponseModel>>();
List<dynamic> indicationList;
dynamic indication;
DateTime selectedDate;
@override
void initState() {
super.initState();
remarksController.text = widget.remarks;
indicationList = List();
dynamic indication1 = {"id": 545, "name": "Gingival Hyperplasia"};
dynamic indication2 = {"id": 546, "name": "Mild Drowsiness"};
dynamic indication3 = {"id": 547, "name": "Hypertrichosis"};
dynamic indication4 = {"id": 548, "name": "Mild Dizziness"};
dynamic indication5 = {"id": 549, "name": "Enlargement of Facial Features"};
dynamic indication6 = {
"id": 550,
"name": "Phenytoin Hypersensitivity Syndrome"
};
dynamic indication7 = {"id": 551, "name": "Asterixis"};
dynamic indication8 = {"id": 552, "name": "Bullous Dermatitis"};
dynamic indication9 = {"id": 554, "name": "Purpuric Dermatitis"};
dynamic indication10 = {"id": 555, "name": "Systemic Lupus Erythematosus"};
indicationList.add(indication1);
indicationList.add(indication2);
indicationList.add(indication3);
indicationList.add(indication4);
indicationList.add(indication5);
indicationList.add(indication6);
indicationList.add(indication7);
indicationList.add(indication8);
indicationList.add(indication9);
indicationList.add(indication10);
}
@override
Widget build(BuildContext context) {
final screenSize = MediaQuery.of(context).size;
return StatefulBuilder(builder:
(BuildContext context, StateSetter setState /*You can rename this!*/) {
return BaseView<MedicineViewModel>(
@ -105,17 +137,18 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
NetworkBaseView(
baseViewModel: model,
child: GestureDetector(
onTap: (){
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
},
child: DraggableScrollableSheet(
initialChildSize: 0.95,
initialChildSize: 0.98,
maxChildSize: 0.99,
minChildSize: 0.6,
builder:
(BuildContext context, ScrollController scrollController) {
return Container(
height: MediaQuery.of(context).size.height * 1.3,
return SingleChildScrollView(
child: Container(
height: MediaQuery.of(context).size.height * 2.0,
child: Form(
child: Padding(
padding: EdgeInsets.symmetric(
@ -205,28 +238,33 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
// height: 12,
// ),
Container(
height: MediaQuery.of(context).size.height *
height:
MediaQuery.of(context).size.height *
0.060,
width: double.infinity,
child: Row(
children: [
Container(
width:
MediaQuery.of(context).size.width *
width: MediaQuery.of(context)
.size
.width *
0.4900,
height:
MediaQuery.of(context).size.height *
height: MediaQuery.of(context)
.size
.height *
0.55,
child: TextFields(
inputFormatters: [
LengthLimitingTextInputFormatter(4),
LengthLimitingTextInputFormatter(
4),
WhitelistingTextInputFormatter
.digitsOnly
],
hintText: widget.doseStreangth,
fontSize: 15.0,
controller: strengthController,
keyboardType: TextInputType.number,
keyboardType:
TextInputType.number,
onChanged: (String value) {
setState(() {
strengthChar = value.length;
@ -251,35 +289,45 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
width: 10.0,
),
Container(
width:
MediaQuery.of(context).size.width *
width: MediaQuery.of(context)
.size
.width *
0.3700,
child: InkWell(
onTap: model.medicationStrengthList !=
onTap:
model.medicationStrengthList !=
null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
Helpers.hideKeyboard(
context);
ListSelectDialog
dialog =
ListSelectDialog(
list: model
.medicationStrengthList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText: TranslationBase.of(
attributeName:
'nameEn',
attributeValueId:
'id',
okText:
TranslationBase.of(
context)
.ok,
okFunction:
(selectedValue) {
setState(() {
units = selectedValue;
units =
selectedValue;
});
},
);
showDialog(
barrierDismissible: false,
barrierDismissible:
false,
context: context,
builder:
(BuildContext context) {
(BuildContext
context) {
return dialog;
},
);
@ -304,7 +352,8 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
height: 12,
),
Container(
height: MediaQuery.of(context).size.height *
height:
MediaQuery.of(context).size.height *
0.070,
child: InkWell(
onTap: model.medicationRouteList != null
@ -312,11 +361,12 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list: model.medicationRouteList,
list:
model.medicationRouteList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText:
TranslationBase.of(context)
okText: TranslationBase.of(
context)
.ok,
okFunction: (selectedValue) {
setState(() {
@ -330,14 +380,16 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
builder:
(BuildContext context) {
return dialog;
},
);
}
: null,
child: TextField(
decoration: textFieldSelectorDecoration(
decoration:
textFieldSelectorDecoration(
'Route',
route != null
? route['nameEn']
@ -351,20 +403,22 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
height: 12.0,
),
Container(
height: MediaQuery.of(context).size.height *
height:
MediaQuery.of(context).size.height *
0.070,
child: InkWell(
onTap: model.medicationDoseTimeList != null
onTap: model.medicationDoseTimeList !=
null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list:
model.medicationDoseTimeList,
list: model
.medicationDoseTimeList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText:
TranslationBase.of(context)
okText: TranslationBase.of(
context)
.ok,
okFunction: (selectedValue) {
setState(() {
@ -375,15 +429,18 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
builder:
(BuildContext context) {
return dialog;
},
);
}
: null,
child: TextField(
decoration: textFieldSelectorDecoration(
TranslationBase.of(context).doseTime,
decoration:
textFieldSelectorDecoration(
TranslationBase.of(context)
.doseTime,
doseTime != null
? doseTime['nameEn']
: null,
@ -396,20 +453,22 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
height: 12.0,
),
Container(
height: MediaQuery.of(context).size.height *
height:
MediaQuery.of(context).size.height *
0.070,
child: InkWell(
onTap: model.medicationFrequencyList != null
onTap: model.medicationFrequencyList !=
null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list:
model.medicationFrequencyList,
list: model
.medicationFrequencyList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText:
TranslationBase.of(context)
okText: TranslationBase.of(
context)
.ok,
okFunction: (selectedValue) {
setState(() {
@ -421,17 +480,21 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
builder:
(BuildContext context) {
return dialog;
},
);
}
: null,
child: TextField(
decoration: textFieldSelectorDecoration(
TranslationBase.of(context).frequency,
decoration:
textFieldSelectorDecoration(
TranslationBase.of(context)
.frequency,
frequencyUpdate != null
? frequencyUpdate['nameEn']
? frequencyUpdate[
'nameEn']
: null,
true),
enabled: false,
@ -442,20 +505,22 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
height: 12.0,
),
Container(
height: MediaQuery.of(context).size.height *
height:
MediaQuery.of(context).size.height *
0.070,
child: InkWell(
onTap: model.medicationDurationList != null
onTap: model.medicationDurationList !=
null
? () {
Helpers.hideKeyboard(context);
ListSelectDialog dialog =
ListSelectDialog(
list:
model.medicationDurationList,
list: model
.medicationDurationList,
attributeName: 'nameEn',
attributeValueId: 'id',
okText:
TranslationBase.of(context)
okText: TranslationBase.of(
context)
.ok,
okFunction: (selectedValue) {
setState(() {
@ -467,17 +532,21 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
builder:
(BuildContext context) {
return dialog;
},
);
}
: null,
child: TextField(
decoration: textFieldSelectorDecoration(
TranslationBase.of(context).duration,
decoration:
textFieldSelectorDecoration(
TranslationBase.of(context)
.duration,
updatedDuration != null
? updatedDuration['nameEn']
? updatedDuration[
'nameEn']
.toString()
: null,
true),
@ -488,6 +557,106 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
SizedBox(
height: 12.0,
),
Container(
height: screenSize.height * 0.070,
width: double.infinity,
child: Row(
children: [
Container(
width: MediaQuery.of(context)
.size
.width *
0.29,
child: InkWell(
onTap: indicationList != null
? () {
Helpers.hideKeyboard(
context);
}
: null,
child: TextField(
decoration:
textFieldSelectorDecoration(
model.patientAssessmentList
.isNotEmpty
? model
.patientAssessmentList[
0]
.icdCode10ID
.toString()
: '',
indication != null
? indication['name']
: null,
true),
enabled: true,
readOnly: true,
),
),
),
Container(
width: MediaQuery.of(context)
.size
.width *
0.61,
child: InkWell(
onTap: indicationList != null
? () {
Helpers.hideKeyboard(
context);
}
: null,
child: TextField(
maxLines: 3,
decoration:
textFieldSelectorDecoration(
model.patientAssessmentList
.isNotEmpty
? model
.patientAssessmentList[
0]
.asciiDesc
.toString()
: '',
indication != null
? indication['name']
: null,
true),
enabled: true,
readOnly: true,
),
),
),
],
),
),
SizedBox(
height: 12.0,
),
Container(
height: screenSize.height * 0.070,
child: InkWell(
onTap: () =>
selectDate(context, widget.model),
child: TextField(
decoration: Helpers
.textFieldSelectorDecoration(
widget.startDate,
selectedDate != null
? "${DateUtils.convertStringToDateFormat(selectedDate.toString(), "yyyy-MM-dd")}"
: null,
true,
suffixIcon: Icon(
Icons.calendar_today,
color: Colors.black,
)),
enabled: false,
),
),
),
SizedBox(
height: 12.0,
),
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
@ -496,18 +665,18 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
width: 1.0,
color: HexColor("#CCCCCC"))),
child: TextFields(
hintText: widget.remarks,
controller: remarksController,
maxLines: 7,
minLines: 4,
),
),
SizedBox(
height: 12.0,
height: 10.0,
),
SizedBox(
height:
MediaQuery.of(context).size.height * 0.12,
MediaQuery.of(context).size.height *
0.08,
),
Container(
margin: EdgeInsets.all(
@ -516,22 +685,24 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
alignment: WrapAlignment.center,
children: <Widget>[
AppButton(
title:
'update prescription'.toUpperCase(),
title: 'update prescription'
.toUpperCase(),
onPressed: () {
updatePrescription(
newStartDate: selectedDate,
newDoseStreangth:
strengthController
.text.isNotEmpty
? strengthController.text
: widget.doseStreangth,
newUnit: units !=
null
? strengthController
.text
: widget
.doseStreangth,
newUnit: units != null
? units['id'].toString()
: widget.doseUnit,
doseUnit: widget.doseUnit,
doseStreangth: widget
.doseStreangth,
doseStreangth:
widget.doseStreangth,
duration: widget.duration,
startDate: widget.startDate,
doseId: widget.dose,
@ -539,27 +710,25 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
routeId: widget.route,
patient: widget.patient,
model: widget.model,
newDuration:
updatedDuration !=
newDuration: updatedDuration !=
null
? updatedDuration[
'id']
? updatedDuration['id']
.toString()
: widget.duration,
drugId: widget.drugId,
remarks: remarksController.text,
route: route !=
null
remarks:
remarksController.text,
route: route != null
? route['id'].toString()
: widget.route,
frequency:
frequencyUpdate !=
frequency: frequencyUpdate !=
null
? frequencyUpdate['id']
.toString()
: widget.frequency,
dose: doseTime != null
? doseTime['id'].toString()
? doseTime['id']
.toString()
: widget.dose,
enteredRemarks:
widget.enteredRemarks);
@ -574,7 +743,8 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
],
),
),
));
)),
);
}),
),
),
@ -582,6 +752,24 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
});
}
selectDate(BuildContext context, PrescriptionViewModel model) async {
Helpers.hideKeyboard(context);
DateTime selectedDate;
selectedDate = DateTime.now();
final DateTime picked = await showDatePicker(
context: context,
initialDate: selectedDate,
firstDate: DateTime.now(),
lastDate: DateTime(2040),
initialEntryMode: DatePickerEntryMode.calendar,
);
if (picked != null && picked != selectedDate) {
setState(() {
this.selectedDate = picked;
});
}
}
InputDecoration textFieldSelectorDecoration(
String hintText, String selectedText, bool isDropDown,
{Icon suffixIcon}) {
@ -626,6 +814,7 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
String route,
String routeId,
String startDate,
DateTime newStartDate,
String doseUnit,
String doseStreangth,
String newDoseStreangth,
@ -664,7 +853,8 @@ class _UpdatePrescriptionFormState extends State<UpdatePrescriptionForm> {
duration: newDuration.isNotEmpty
? int.parse(newDuration)
: int.parse(duration),
doseStartDate: startDate));
doseStartDate:
newStartDate != null ? newStartDate.toIso8601String() : startDate));
updatePrescriptionReqModel.prescriptionRequestModel = sss;
//postProcedureReqModel.procedures = controlsProcedure;

@ -34,13 +34,12 @@ postProcedure(
postProcedureReqModel.patientMRN = patient.patientMRN;
entityList.forEach((element) {
controls.add(
Controls(code: "remarks", controlValue: remarks.isEmpty ? '' : remarks),
Controls(
code: "remarks",
controlValue: element.remarks.isNotEmpty ? element.remarks : ""),
);
controls.add(
Controls(
code: "ordertype",
controlValue:
orderType.toString().isNotEmpty ? orderType.toString() : '1'),
Controls(code: "ordertype", controlValue: element.type),
);
});
@ -218,43 +217,43 @@ class _AddSelectedProcedureState extends State<AddSelectedProcedure> {
Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: Row(
children: [
AppText(
TranslationBase.of(context).orderType),
Radio(
activeColor: Color(0xFFB9382C),
value: 1,
groupValue: selectedType,
onChanged: (value) {
setSelectedType(value);
},
),
Text('routine'),
Radio(
activeColor: Color(0xFFB9382C),
groupValue: selectedType,
value: 0,
onChanged: (value) {
setSelectedType(value);
},
),
Text(TranslationBase.of(context).urgent),
],
),
),
SizedBox(
height: 15.0,
),
TextFields(
hintText: TranslationBase.of(context).remarks,
controller: remarksController,
minLines: 3,
maxLines: 5,
),
// Container(
// child: Row(
// children: [
// AppText(
// TranslationBase.of(context).orderType),
// Radio(
// activeColor: Color(0xFFB9382C),
// value: 1,
// groupValue: selectedType,
// onChanged: (value) {
// setSelectedType(value);
// },
// ),
// Text('routine'),
// Radio(
// activeColor: Color(0xFFB9382C),
// groupValue: selectedType,
// value: 0,
// onChanged: (value) {
// setSelectedType(value);
// },
// ),
// Text(TranslationBase.of(context).urgent),
// ],
// ),
// ),
// SizedBox(
// height: 15.0,
// ),
// TextFields(
// hintText: TranslationBase.of(context).remarks,
// controller: remarksController,
// minLines: 3,
// maxLines: 5,
// ),
SizedBox(
height: 50.0,
height: 100.0,
),
Container(
margin: EdgeInsets.all(
@ -266,6 +265,7 @@ class _AddSelectedProcedureState extends State<AddSelectedProcedure> {
title: TranslationBase.of(context)
.addSelectedProcedures,
onPressed: () {
//print(entityList.toString());
Navigator.pop(context);
postProcedure(
orderType: selectedType.toString(),

@ -17,6 +17,8 @@ class EntityListCheckboxSearchWidget extends StatefulWidget {
final Function addSelectedHistories;
final Function(EntityList) removeHistory;
final Function(EntityList) addHistory;
final Function(EntityList) addRemarks;
final bool Function(EntityList) isEntityListSelected;
final List<EntityList> masterList;
@ -27,7 +29,8 @@ class EntityListCheckboxSearchWidget extends StatefulWidget {
this.removeHistory,
this.masterList,
this.addHistory,
this.isEntityListSelected})
this.isEntityListSelected,
this.addRemarks})
: super(key: key);
@override
@ -37,7 +40,7 @@ class EntityListCheckboxSearchWidget extends StatefulWidget {
class _EntityListCheckboxSearchWidgetState
extends State<EntityListCheckboxSearchWidget> {
int selectedType;
int selectedType = 1;
setSelectedType(int val) {
setState(() {
selectedType = val;
@ -45,6 +48,8 @@ class _EntityListCheckboxSearchWidgetState
}
List<EntityList> items = List();
List<String> remarksList = List();
List<int> typeList = List();
@override
void initState() {
@ -52,6 +57,7 @@ class _EntityListCheckboxSearchWidgetState
super.initState();
}
TextEditingController remarksController = TextEditingController();
@override
Widget build(BuildContext context) {
return Container(
@ -84,7 +90,8 @@ class _EntityListCheckboxSearchWidgetState
children: items.map((historyInfo) {
return Column(
children: [
Row(
ExpansionTile(
title: Row(
children: [
Checkbox(
value: widget.isEntityListSelected(
@ -94,10 +101,11 @@ class _EntityListCheckboxSearchWidgetState
setState(() {
if (widget.isEntityListSelected(
historyInfo)) {
widget
.removeHistory(historyInfo);
widget.removeHistory(
historyInfo);
} else {
widget.addHistory(historyInfo);
widget
.addHistory(historyInfo);
}
});
}),
@ -114,6 +122,57 @@ class _EntityListCheckboxSearchWidgetState
),
],
),
children: [
Container(
child: Row(
children: [
AppText(TranslationBase.of(context)
.orderType),
Radio(
activeColor: Color(0xFFB9382C),
value: 1,
groupValue: selectedType,
onChanged: (value) {
historyInfo.type =
setSelectedType(value)
.toString();
// historyInfo.type =
// value.toString();
},
),
Text('routine'),
Radio(
activeColor: Color(0xFFB9382C),
groupValue: selectedType,
value: 0,
onChanged: (value) {
historyInfo.type =
setSelectedType(value)
.toString();
// historyInfo.type =
// value.toString();
},
),
Text(TranslationBase.of(context)
.urgent),
],
),
),
SizedBox(
height: 15.0,
),
TextFields(
hintText:
TranslationBase.of(context).remarks,
//controller: remarksController,
onChanged: (value) {
historyInfo.remarks = value;
},
minLines: 3,
maxLines: 5,
),
],
),
DividerWithSpacesAround(),
],
);

@ -200,51 +200,51 @@ class _UpdateProcedureWidgetState extends State<UpdateProcedureWidget> {
isEntityListSelected(master),
),
),
Container(
child: Row(
children: [
AppText(
TranslationBase.of(context).orderType),
Radio(
activeColor: Color(0xFFB9382C),
value: 0,
groupValue: selectedType,
onChanged: (value) {
setSelectedType(value);
},
),
Text(TranslationBase.of(context).urgent),
Radio(
activeColor: Color(0xFFB9382C),
groupValue: selectedType,
value: 1,
onChanged: (value) {
setSelectedType(value);
},
),
Text('routine'),
],
),
),
SizedBox(
height: 12.0,
),
Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.all(Radius.circular(6.0)),
border: Border.all(
width: 1.0,
color: HexColor("#CCCCCC"))),
child: TextFields(
hintText: widget.remarks,
fontSize: 15.0,
controller: widget.remarksController,
maxLines: 3,
minLines: 2,
onChanged: (value) {},
),
),
// Container(
// child: Row(
// children: [
// AppText(
// TranslationBase.of(context).orderType),
// Radio(
// activeColor: Color(0xFFB9382C),
// value: 0,
// groupValue: selectedType,
// onChanged: (value) {
// setSelectedType(value);
// },
// ),
// Text(TranslationBase.of(context).urgent),
// Radio(
// activeColor: Color(0xFFB9382C),
// groupValue: selectedType,
// value: 1,
// onChanged: (value) {
// setSelectedType(value);
// },
// ),
// Text('routine'),
// ],
// ),
// ),
// SizedBox(
// height: 12.0,
// ),
// Container(
// decoration: BoxDecoration(
// borderRadius:
// BorderRadius.all(Radius.circular(6.0)),
// border: Border.all(
// width: 1.0,
// color: HexColor("#CCCCCC"))),
// child: TextFields(
// hintText: widget.remarks,
// fontSize: 15.0,
// controller: widget.remarksController,
// maxLines: 3,
// minLines: 2,
// onChanged: (value) {},
// ),
// ),
SizedBox(
height: 50.0,
),

@ -1117,6 +1117,9 @@ class TranslationBase {
localizedValues['otherProcedure'][locale.languageCode];
String get admissionRequestSuccessMsg =>
localizedValues['admissionRequestSuccessMsg'][locale.languageCode];
String get infoStatus => localizedValues['infoStatus'][locale.languageCode];
String get doctorResponse =>
localizedValues['doctorResponse'][locale.languageCode];
}
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -233,11 +233,7 @@ class _VerificationMethodsState extends State<VerificationMethods> {
Expanded(
child: InkWell(
onTap: () => {
authenticateUser(
3,
BiometricType
.face.index,
authProv)
authenticateUser(3, true, authProv)
},
child: getButton(
user.logInTypeID,
@ -488,8 +484,7 @@ class _VerificationMethodsState extends State<VerificationMethods> {
onTap: () => {
if (checkIfBiometricAvailable(BiometricType.fingerprint))
{
authenticateUser(
3, BiometricType.fingerprint.index, authProv)
authenticateUser(3, true, authProv)
}
},
child: RoundedContainer(
@ -524,7 +519,7 @@ class _VerificationMethodsState extends State<VerificationMethods> {
return InkWell(
onTap: () {
if (checkIfBiometricAvailable(BiometricType.face)) {
authenticateUser(4, BiometricType.face.index, authProv);
authenticateUser(4, true, authProv);
}
},
child: RoundedContainer(
@ -706,7 +701,7 @@ class _VerificationMethodsState extends State<VerificationMethods> {
}
loginWithFingurePrintFace(type, isActive, authProv) async {
if (isActive == 1) {
if (isActive) {
// this.startBiometricLoginIfAvailable();
authenticated = await auth.authenticateWithBiometrics(
localizedReason: 'Scan your fingerprint to authenticate',

@ -167,12 +167,58 @@ class _DoctorReplyWidgetState extends State<DoctorReplyWidget> {
children: <Widget>[
Divider(color: Colors.grey),
SizedBox(height: 5,),
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).remarks + " : ",
fontSize: 2.5 * SizeConfig.textMultiplier,
//fontWeight: FontWeight.bold,
),Expanded(
child: AppText(
widget.reply.remarks,
fontSize: 2.5 * SizeConfig.textMultiplier,
//fontWeight: FontWeight.bold,
),
SizedBox(height: 10,)
),
],
),
SizedBox(height: 10,),
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).doctorResponse + " : ",
fontSize: 2.5 * SizeConfig.textMultiplier,
//fontWeight: FontWeight.bold,
),Expanded(
child: AppText(
widget.reply.doctorResponse,
fontSize: 2.5 * SizeConfig.textMultiplier,
//fontWeight: FontWeight.bold,
),
),
],
),SizedBox(height: 10,),
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).infoStatus + " : ",
fontSize: 2.5 * SizeConfig.textMultiplier,
//fontWeight: FontWeight.bold,
),Expanded(
child: AppText(
widget.reply.infoStatus,
fontSize: 2.5 * SizeConfig.textMultiplier,
//fontWeight: FontWeight.bold,
),
),
],
)
],
),
),

@ -29,7 +29,11 @@ class AppScaffold extends StatelessWidget {
Widget build(BuildContext context) {
AppGlobal.CONTEX = context;
ProjectViewModel projectProvider = Provider.of(context);
return Scaffold(
return GestureDetector(
onTap: (){
FocusScope.of(context).requestFocus(new FocusNode());
},
child: Scaffold(
backgroundColor: Colors.white,
appBar: isShowAppBar
? AppBar(
@ -76,6 +80,7 @@ class AppScaffold extends StatelessWidget {
],
),
),
),
);
}

Loading…
Cancel
Save