Compare commits

...

1 Commits

Author SHA1 Message Date
mosazaid 52c5e128e1 comiit 5 years ago

@ -14,6 +14,8 @@ import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dar
import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart'; import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart'; import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart'; import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom2.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
@ -48,6 +50,8 @@ class _AdmissionRequestThirdScreenState
String medicalHistoryError; String medicalHistoryError;
String surgicalHistoryError; String surgicalHistoryError;
final _formKey = GlobalKey<FormState>();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final routeArgs = ModalRoute.of(context).settings.arguments as Map; final routeArgs = ModalRoute.of(context).settings.arguments as Map;
@ -102,100 +106,91 @@ class _AdmissionRequestThirdScreenState
Container( Container(
margin: margin:
EdgeInsets.symmetric(vertical: 0, horizontal: 16), EdgeInsets.symmetric(vertical: 0, horizontal: 16),
child: Column( child: Form(
crossAxisAlignment: CrossAxisAlignment.start, key: _formKey,
children: [ child: Column(
AppText( crossAxisAlignment: CrossAxisAlignment.start,
TranslationBase.of(context) children: [
.specialityAndDoctorDetail, AppText(
color: Color(0xFF2E303A), TranslationBase.of(context)
fontSize: SizeConfig.textMultiplier * 1.8, .specialityAndDoctorDetail,
fontWeight: FontWeight.w700, color: Color(0xFF2E303A),
), fontSize: SizeConfig.textMultiplier * 1.8,
SizedBox( fontWeight: FontWeight.w700,
height: 10, ),
), SizedBox(
AppTextFieldCustom( height: 10,
height: screenSize.height * 0.075, ),
hintText: TranslationBase.of(context).clinic, AppTextFieldCustom(
isTextFieldHasSuffix: true, height: screenSize.height * 0.075,
validationError: clinicError, hintText: TranslationBase.of(context).clinic,
dropDownText: _selectedClinic != null isTextFieldHasSuffix: true,
? projectViewModel.isArabic? _selectedClinic['clinicNameArabic'] : _selectedClinic['clinicNameEnglish'] validationError: clinicError,
: null, dropDownText: _selectedClinic != null
enabled: false, ? projectViewModel.isArabic
onClick: model.clinicList != null && ? _selectedClinic['clinicNameArabic']
model.clinicList.length > 0 : _selectedClinic['clinicNameEnglish']
? () { : null,
openListDialogField( enabled: false,
projectViewModel.isArabic? 'clinicNameArabic' : 'clinicNameEnglish', onClick: model.clinicList != null &&
'clinicID', model.clinicList.length > 0
model.clinicList, (selectedValue) { ? () {
setState(() {
_selectedClinic = selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils.showMyDialog(
context);
await model.getClinics().then((_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.clinicList.length > 0) {
openListDialogField( openListDialogField(
projectViewModel.isArabic? 'clinicNameArabic' : 'clinicNameEnglish', projectViewModel.isArabic
? 'clinicNameArabic'
: 'clinicNameEnglish',
'clinicID', 'clinicID',
model.clinicList, (selectedValue) { model.clinicList, (selectedValue) {
setState(() { setState(() {
_selectedClinic = selectedValue; _selectedClinic = selectedValue;
}); });
}); });
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
} }
}, : () async {
), GifLoaderDialogUtils.showMyDialog(
SizedBox( context);
height: 20, await model.getClinics().then((_) =>
), GifLoaderDialogUtils.hideDialog(
AppTextFieldCustom( context));
height: screenSize.height * 0.075, if (model.state == ViewState.Idle &&
hintText: TranslationBase.of(context).doctor, model.clinicList.length > 0) {
isTextFieldHasSuffix: true, openListDialogField(
dropDownText: _selectedDoctor != null projectViewModel.isArabic
? _selectedDoctor['DoctorName'] ? 'clinicNameArabic'
: null, : 'clinicNameEnglish',
enabled: false, 'clinicID',
validationError: doctorError, model.clinicList,
onClick: _selectedClinic != null
? model.doctorsList != null &&
model.doctorsList.length > 0
? () {
openListDialogField('DoctorName',
'DoctorID', model.doctorsList,
(selectedValue) { (selectedValue) {
setState(() { setState(() {
_selectedDoctor = selectedValue; _selectedClinic = selectedValue;
}); });
}); });
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
} }
: () async { },
GifLoaderDialogUtils.showMyDialog( ),
context); SizedBox(
await model height: 20,
.getClinicDoctors( ),
_selectedClinic['clinicID']) AppTextFieldCustom2(
.then((_) => GifLoaderDialogUtils height: screenSize.height * 0.075,
.hideDialog(context)); hintText: TranslationBase.of(context).doctor,
if (model.state == ViewState.Idle && isTextFieldHasSuffix: true,
model.doctorsList.length > 0) { dropDownText: _selectedDoctor != null
? _selectedDoctor['DoctorName']
: null,
enabled: false,
validationError: doctorError,
onClick: _selectedClinic != null
? model.doctorsList != null &&
model.doctorsList.length > 0
? () {
openListDialogField('DoctorName', openListDialogField('DoctorName',
'DoctorID', model.doctorsList, 'DoctorID', model.doctorsList,
(selectedValue) { (selectedValue) {
@ -203,104 +198,125 @@ class _AdmissionRequestThirdScreenState
_selectedDoctor = selectedValue; _selectedDoctor = selectedValue;
}); });
}); });
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
} }
} : () async {
: null, GifLoaderDialogUtils.showMyDialog(
), context);
SizedBox( await model
height: 16, .getClinicDoctors(
), _selectedClinic['clinicID'])
AppText( .then((_) =>
TranslationBase.of(context).patientDetails, GifLoaderDialogUtils
fontFamily: 'Poppins', .hideDialog(context));
fontSize: SizeConfig.textMultiplier * 1.8, if (model.state == ViewState.Idle &&
fontWeight: FontWeight.w700, model.doctorsList.length > 0) {
), openListDialogField('DoctorName',
SizedBox( 'DoctorID', model.doctorsList,
height: 10, (selectedValue) {
), setState(() {
if(patient.gender != 1) _selectedDoctor =
selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
}
: null,
),
Container(
decoration: TextFieldsUtils.containerBorderDecoration(
Color(0Xffffffff),
Color(0xFFEFEFEF)
),
child: TextFormField(
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter some text';
}
return null;
},
),
),
SizedBox(
height: 16,
),
AppText(
TranslationBase.of(context).patientDetails,
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 1.8,
fontWeight: FontWeight.w700,
),
SizedBox(
height: 10,
),
if (patient.gender != 1)
CheckboxListTile(
title: AppText(
TranslationBase.of(context).patientPregnant,
fontWeight: FontWeight.normal,
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 2.0,
),
value: _patientPregnant,
activeColor: HexColor("#D02127"),
onChanged: (newValue) {
setState(() {
_patientPregnant = newValue;
});
},
controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0),
),
CheckboxListTile( CheckboxListTile(
title: AppText( title: AppText(
TranslationBase.of(context).patientPregnant, TranslationBase.of(context)
.isSickLeaveRequired,
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 2.0, fontSize: SizeConfig.textMultiplier * 2.0,
), ),
value: _patientPregnant, value: _isSickLeaveRequired,
activeColor: HexColor("#D02127"), activeColor: HexColor("#D02127"),
onChanged: (newValue) { onChanged: (newValue) {
setState(() { setState(() {
_patientPregnant = newValue; _isSickLeaveRequired = newValue;
}); });
}, },
controlAffinity: ListTileControlAffinity.leading, controlAffinity:
ListTileControlAffinity.leading,
contentPadding: EdgeInsets.all(0), contentPadding: EdgeInsets.all(0),
), ),
CheckboxListTile( AppTextFieldCustom(
title: AppText( hintText: TranslationBase.of(context)
TranslationBase.of(context).isSickLeaveRequired, .sickLeaveComments,
fontWeight: FontWeight.normal, controller: _sickLeaveCommentsController,
fontFamily: 'Poppins', minLines: 2,
fontSize: SizeConfig.textMultiplier * 2.0, maxLines: 4,
validationError: sickLeaveCommentError,
inputType: TextInputType.multiline,
), ),
value: _isSickLeaveRequired, SizedBox(
activeColor: HexColor("#D02127"), height: 10,
onChanged: (newValue) { ),
setState(() { AppTextFieldCustom(
_isSickLeaveRequired = newValue; height: screenSize.height * 0.075,
}); hintText: TranslationBase.of(context).dietType,
}, isTextFieldHasSuffix: true,
controlAffinity: ListTileControlAffinity.leading, validationError: dietTypeError,
contentPadding: EdgeInsets.all(0), dropDownText: _selectedDietType != null
), ? _selectedDietType['nameEn']
AppTextFieldCustom( : null,
hintText: enabled: false,
TranslationBase.of(context).sickLeaveComments, onClick: model.dietTypesList != null &&
controller: _sickLeaveCommentsController, model.dietTypesList.length > 0
minLines: 2, ? () {
maxLines: 4,
validationError: sickLeaveCommentError,
inputType: TextInputType.multiline,
),
SizedBox(
height: 10,
),
AppTextFieldCustom(
height: screenSize.height * 0.075,
hintText: TranslationBase.of(context).dietType,
isTextFieldHasSuffix: true,
validationError: dietTypeError,
dropDownText: _selectedDietType != null
? _selectedDietType['nameEn']
: null,
enabled: false,
onClick: model.dietTypesList != null &&
model.dietTypesList.length > 0
? () {
openListDialogField(
'nameEn', 'id', model.dietTypesList,
(selectedValue) {
setState(() {
_selectedDietType = selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils.showMyDialog(
context);
await model.getDietTypes(patient.patientId).then((_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.dietTypesList.length > 0) {
openListDialogField( openListDialogField(
'nameEn', 'id', model.dietTypesList, 'nameEn', 'id', model.dietTypesList,
(selectedValue) { (selectedValue) {
@ -308,50 +324,71 @@ class _AdmissionRequestThirdScreenState
_selectedDietType = selectedValue; _selectedDietType = selectedValue;
}); });
}); });
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
} }
}, : () async {
), GifLoaderDialogUtils.showMyDialog(
SizedBox( context);
height: 10, await model
), .getDietTypes(patient.patientId)
AppTextFieldCustom( .then((_) =>
hintText: GifLoaderDialogUtils.hideDialog(
TranslationBase.of(context).dietTypeRemarks, context));
controller: _dietTypeRemarksController, if (model.state == ViewState.Idle &&
minLines: 4, model.dietTypesList.length > 0) {
maxLines: 6, openListDialogField('nameEn', 'id',
inputType: TextInputType.multiline, model.dietTypesList,
), (selectedValue) {
SizedBox( setState(() {
height: 10, _selectedDietType = selectedValue;
), });
AppTextFieldCustom( });
hintText: TranslationBase.of(context).pastMedicalHistory, } else if (model.state ==
controller: _postMedicalHistoryController, ViewState.ErrorLocal) {
minLines: 4, DrAppToastMsg.showErrorToast(
maxLines: 6, model.error);
validationError: medicalHistoryError, } else {
inputType: TextInputType.multiline, DrAppToastMsg.showErrorToast(
), "Empty List");
SizedBox( }
height: 10, },
), ),
AppTextFieldCustom( SizedBox(
hintText: TranslationBase.of(context).pastSurgicalHistory, height: 10,
controller: _postSurgicalHistoryController, ),
minLines: 2, AppTextFieldCustom(
maxLines: 4, hintText:
validationError: surgicalHistoryError, TranslationBase.of(context).dietTypeRemarks,
inputType: TextInputType.multiline, controller: _dietTypeRemarksController,
), minLines: 4,
], maxLines: 6,
inputType: TextInputType.multiline,
),
SizedBox(
height: 10,
),
AppTextFieldCustom(
hintText: TranslationBase.of(context)
.pastMedicalHistory,
controller: _postMedicalHistoryController,
minLines: 4,
maxLines: 6,
validationError: medicalHistoryError,
inputType: TextInputType.multiline,
),
SizedBox(
height: 10,
),
AppTextFieldCustom(
hintText: TranslationBase.of(context)
.pastSurgicalHistory,
controller: _postSurgicalHistoryController,
minLines: 2,
maxLines: 4,
validationError: surgicalHistoryError,
inputType: TextInputType.multiline,
),
],
),
), ),
), ),
], ],
@ -364,6 +401,13 @@ class _AdmissionRequestThirdScreenState
title: TranslationBase.of(context).next, title: TranslationBase.of(context).next,
color: HexColor("#D02127"), color: HexColor("#D02127"),
onPressed: () { onPressed: () {
// Validate returns true if the form is valid, or false otherwise.
if (_formKey.currentState.validate()) {
DrAppToastMsg.showErrorToast("all good");
} else {
DrAppToastMsg.showErrorToast("not valid");
}
model.admissionRequestData = AdmissionRequest(); model.admissionRequestData = AdmissionRequest();
if (_selectedClinic != null && if (_selectedClinic != null &&
_selectedDoctor != null && _selectedDoctor != null &&
@ -411,34 +455,40 @@ class _AdmissionRequestThirdScreenState
TranslationBase.of(context).pleaseFill); TranslationBase.of(context).pleaseFill);
setState(() { setState(() {
if(_selectedClinic == null){ if (_selectedClinic == null) {
clinicError = TranslationBase.of(context).fieldRequired; clinicError =
}else { TranslationBase.of(context).fieldRequired;
} else {
clinicError = null; clinicError = null;
} }
if(_selectedDoctor == null){ if (_selectedDoctor == null) {
doctorError = TranslationBase.of(context).fieldRequired; doctorError =
}else { TranslationBase.of(context).fieldRequired;
} else {
doctorError = null; doctorError = null;
} }
if(_sickLeaveCommentsController.text == ""){ if (_sickLeaveCommentsController.text == "") {
sickLeaveCommentError = TranslationBase.of(context).fieldRequired; sickLeaveCommentError =
}else { TranslationBase.of(context).fieldRequired;
} else {
sickLeaveCommentError = null; sickLeaveCommentError = null;
} }
if(_selectedDietType == null){ if (_selectedDietType == null) {
dietTypeError = TranslationBase.of(context).fieldRequired; dietTypeError =
}else { TranslationBase.of(context).fieldRequired;
} else {
dietTypeError = null; dietTypeError = null;
} }
if(_postMedicalHistoryController.text == ""){ if (_postMedicalHistoryController.text == "") {
medicalHistoryError = TranslationBase.of(context).fieldRequired; medicalHistoryError =
}else { TranslationBase.of(context).fieldRequired;
} else {
medicalHistoryError = null; medicalHistoryError = null;
} }
if(_postSurgicalHistoryController.text == ""){ if (_postSurgicalHistoryController.text == "") {
surgicalHistoryError = TranslationBase.of(context).fieldRequired; surgicalHistoryError =
}else { TranslationBase.of(context).fieldRequired;
} else {
surgicalHistoryError = null; surgicalHistoryError = null;
} }
}); });

@ -0,0 +1,177 @@
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/widgets/shared/text_fields/text_field_error.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import '../app_texts_widget.dart';
class AppTextFieldCustom2 extends StatefulWidget {
final double height;
final Function onClick;
final String hintText;
final TextEditingController controller;
final bool isTextFieldHasSuffix;
final bool hasBorder;
final String dropDownText;
final IconButton suffixIcon;
final Color dropDownColor;
final bool enabled;
final TextInputType inputType;
final int minLines;
final int maxLines;
final List<TextInputFormatter> inputFormatters;
final Function(String) onChanged;
final String validationError;
final bool isPrscription;
final bool isSecure;
AppTextFieldCustom2({
this.height = 0,
this.onClick,
this.hintText,
this.controller,
this.hasBorder = true,
this.isTextFieldHasSuffix = false,
this.dropDownText,
this.suffixIcon,
this.dropDownColor,
this.enabled = true,
this.inputType,
this.minLines = 1,
this.maxLines = 1,
this.inputFormatters,
this.onChanged,
this.validationError,
this.isPrscription = false,
this.isSecure = false,
});
@override
_AppTextFieldCustomState createState() => _AppTextFieldCustomState();
}
class _AppTextFieldCustomState extends State<AppTextFieldCustom2> {
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return Column(
children: [
Container(
height: widget.height != 0 && widget.maxLines == 1
? widget.height + 8
: null,
decoration: widget.hasBorder
? TextFieldsUtils.containerBorderDecoration(
Color(0Xffffffff),
widget.validationError == null
? Color(0xFFEFEFEF)
: Colors.red.shade700)
: null,
padding:
EdgeInsets.only(top: 4.0, bottom: 4.0, left: 8.0, right: 8.0),
child: InkWell(
onTap: widget.onClick ?? null,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Container(
padding: widget.dropDownText == null
? EdgeInsets.symmetric(vertical: 0)
: EdgeInsets.symmetric(vertical: 0), // 8.0
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
if ((widget.controller != null &&
widget.controller.text != "") ||
widget.dropDownText != null)
AppText(
widget.hintText,
color: Color(0xFF2E303A),
fontSize: widget.isPrscription == false
? SizeConfig.textMultiplier * 1.3
: 0,
fontWeight: FontWeight.w700,
),
widget.dropDownText == null
? Container(
height:
widget.height != 0 && widget.maxLines == 1
? widget.height - 22
: null,
child: TextFormField(
textAlign: projectViewModel.isArabic
? TextAlign.right
: TextAlign.left,
decoration: TextFieldsUtils
.textFieldSelectorDecoration(
widget.hintText, null, true),
style: TextStyle(
fontSize: SizeConfig.textMultiplier * 1.7,
fontFamily: 'Poppins',
color: Color(0xFF575757),
),
controller: widget.controller,
keyboardType: widget.inputType ??
(widget.maxLines == 1
? TextInputType.text
: TextInputType.multiline),
enabled: widget.enabled,
minLines: widget.minLines,
maxLines: widget.maxLines,
inputFormatters:
widget.inputFormatters != null
? widget.inputFormatters
: [],
onChanged: (value) {
setState(() {});
if (widget.onChanged != null) {
widget.onChanged(value);
}
},
obscureText: widget.isSecure,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter some text';
}
return null;
},
),
)
: AppText(
widget.dropDownText,
fontFamily: 'Poppins',
color: Color(0xFF575757),
fontSize: SizeConfig.textMultiplier * 1.7,
),
],
),
),
),
widget.isTextFieldHasSuffix
? widget.suffixIcon != null
? widget.suffixIcon
: InkWell(
child: Icon(
Icons.keyboard_arrow_down,
color: widget.dropDownColor != null
? widget.dropDownColor
: Colors.black,
),
)
: Container(),
],
),
),
),
if (widget.validationError != null)
TextFieldsError(error: widget.validationError),
],
);
}
}
Loading…
Cancel
Save