@ -46,6 +46,10 @@ class _PatientSearchScreenState extends State<PatientSearchScreen> {
bool isFormSubmitted = false ;
FocusNode _nodeText1 = FocusNode ( ) ;
FocusNode _nodeText2 = FocusNode ( ) ;
FocusNode _nodeText3 = FocusNode ( ) ;
var _patientSearchFormValues = PatientModel (
FirstName: " 0 " ,
MiddleName: " 0 " ,
@ -110,374 +114,383 @@ class _PatientSearchScreenState extends State<PatientSearchScreen> {
@ override
Widget build ( BuildContext context ) {
projectsProvider = Provider . of ( context ) ;
return AppScaffold (
appBarTitle: TranslationBase . of ( context ) . searchPatient ,
body: ListView (
children: < Widget > [
RoundedContainer (
child: Column (
children: < Widget > [
Column (
children: < Widget > [
Container (
child: Icon (
DoctorApp . search_patient_1 ,
size: 100 ,
color: Colors . black ,
) ,
margin: EdgeInsets . only ( top: 10 ) ,
) ,
Padding (
padding: const EdgeInsets . only ( top: 12.0 ) ,
child: AppText (
TranslationBase . of ( context )
. searchPatientImageCaptionTitle
. toUpperCase ( ) ,
fontWeight: FontWeight . bold ,
fontSize: SizeConfig . heightMultiplier * 2.5 ,
return GestureDetector (
onTap: ( ) {
FocusScope . of ( context ) . requestFocus ( new FocusNode ( ) ) ;
} ,
child: AppScaffold (
appBarTitle: TranslationBase . of ( context ) . searchPatient ,
body: ListView (
children: < Widget > [
RoundedContainer (
child: Column (
children: < Widget > [
Column (
children: < Widget > [
Container (
child: Icon (
DoctorApp . search_patient_1 ,
size: 100 ,
color: Colors . black ,
) ,
margin: EdgeInsets . only ( top: 10 ) ,
) ,
) ,
Padding (
padding: const EdgeInsets . only ( top: 5.0 ) ,
child: AppText (
TranslationBase . of ( context )
. searchPatientImageCaptionBody ,
fontSize: SizeConfig . heightMultiplier * 2 ,
Padding (
padding: const EdgeInsets . only ( top: 12.0 ) ,
child: AppText (
TranslationBase . of ( context )
. searchPatientImageCaptionTitle
. toUpperCase ( ) ,
fontWeight: FontWeight . bold ,
fontSize: SizeConfig . heightMultiplier * 2.5 ,
) ,
) ,
)
] ,
) ,
Container (
padding: EdgeInsets . all ( 15 ) ,
width: SizeConfig . screenWidth * 1 ,
child: Form (
key: _formKey ,
autovalidate: _autoValidate ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: < Widget > [
SizedBox (
height: 5 ,
Padding (
padding: const EdgeInsets . only ( top: 5.0 ) ,
child: AppText (
TranslationBase . of ( context )
. searchPatientImageCaptionBody ,
fontSize: SizeConfig . heightMultiplier * 2 ,
) ,
Container (
height: 40.0 ,
decoration: ShapeDecoration (
shape: RoundedRectangleBorder (
side: BorderSide (
width: 1.0 ,
style: BorderStyle . solid ,
color: HexColor ( " #CCCCCC " ) ) ,
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
) ,
)
] ,
) ,
Container (
padding: EdgeInsets . all ( 15 ) ,
width: SizeConfig . screenWidth * 1 ,
child: Form (
key: _formKey ,
autovalidate: _autoValidate ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: < Widget > [
SizedBox (
height: 5 ,
) ,
width: double . infinity ,
child: Padding (
padding: EdgeInsets . only (
top: SizeConfig . widthMultiplier * 0.9 ,
bottom: SizeConfig . widthMultiplier * 0.9 ,
right: SizeConfig . widthMultiplier * 3 ,
left: SizeConfig . widthMultiplier * 3 ) ,
child: Row (
mainAxisSize: MainAxisSize . max ,
children: < Widget > [
Expanded (
/ / add Expanded to have your dropdown button fill remaining space
child: DropdownButtonHideUnderline (
child: DropdownButton (
isExpanded: true ,
value: _selectedType ,
iconSize: 25 ,
elevation: 16 ,
selectedItemBuilder:
( BuildContext context ) {
return PATIENT_TYPE . map ( ( item ) {
return Row (
mainAxisSize: MainAxisSize . max ,
children: < Widget > [
! projectsProvider . isArabic
? AppText (
item [ ' text ' ] ,
fontSize: SizeConfig
. textMultiplier *
2.1 ,
)
: AppText (
item [ ' text_ar ' ] ,
fontSize: SizeConfig
. textMultiplier *
2.1 ,
) ,
] ,
Container (
height: 40.0 ,
decoration: ShapeDecoration (
shape: RoundedRectangleBorder (
side: BorderSide (
width: 1.0 ,
style: BorderStyle . solid ,
color: HexColor ( " #CCCCCC " ) ) ,
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
) ,
) ,
width: double . infinity ,
child: Padding (
padding: EdgeInsets . only (
top: SizeConfig . widthMultiplier * 0.9 ,
bottom: SizeConfig . widthMultiplier * 0.9 ,
right: SizeConfig . widthMultiplier * 3 ,
left: SizeConfig . widthMultiplier * 3 ) ,
child: Row (
mainAxisSize: MainAxisSize . max ,
children: < Widget > [
Expanded (
/ / add Expanded to have your dropdown button fill remaining space
child: DropdownButtonHideUnderline (
child: DropdownButton (
isExpanded: true ,
value: _selectedType ,
iconSize: 25 ,
elevation: 16 ,
selectedItemBuilder:
( BuildContext context ) {
return PATIENT_TYPE . map ( ( item ) {
return Row (
mainAxisSize: MainAxisSize . max ,
children: < Widget > [
! projectsProvider . isArabic
? AppText (
item [ ' text ' ] ,
fontSize: SizeConfig
. textMultiplier *
2.1 ,
)
: AppText (
item [ ' text_ar ' ] ,
fontSize: SizeConfig
. textMultiplier *
2.1 ,
) ,
] ,
) ;
} ) . toList ( ) ;
} ,
onChanged: ( String newValue ) = > {
setState ( ( ) {
_selectedType = newValue ;
selectedPatientType =
int . parse ( _selectedType ) ;
} )
} ,
items: PATIENT_TYPE . map ( ( item ) {
! projectsProvider . isArabic
? itemText = item [ ' text ' ]
: itemText = item [ ' text_ar ' ] ;
return DropdownMenuItem (
child: Text (
itemText ,
textAlign: TextAlign . end ,
) ,
value: item [ ' val ' ] ,
) ;
} ) . toList ( ) ;
} ,
onChanged: ( String newValue ) = > {
setState ( ( ) {
_selectedType = newValue ;
selectedPatientType =
int . parse ( _selectedType ) ;
} )
} ,
items: PATIENT_TYPE . map ( ( item ) {
! projectsProvider . isArabic
? itemText = item [ ' text ' ]
: itemText = item [ ' text_ar ' ] ;
return DropdownMenuItem (
child: Text (
itemText ,
textAlign: TextAlign . end ,
) ,
value: item [ ' val ' ] ,
) ;
} ) . toList ( ) ,
) ) ,
) ,
] ,
} ) . toList ( ) ,
) ) ,
) ,
] ,
) ,
) ,
) ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
labelText:
TranslationBase . of ( context ) . firstName ,
borderColor: Colors . white ,
onSaved: ( value ) {
value = = null | | value = = ' '
? _patientSearchFormValues . setFirstName =
" 0 "
: _patientSearchFormValues . setFirstName =
value ;
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
labelText:
TranslationBase . of ( context ) . firstName ,
borderColor: Colors . white ,
onSaved: ( value ) {
value = = null | | value = = ' '
? _patientSearchFormValues . setFirstName =
" 0 "
: _patientSearchFormValues . setFirstName =
value ;
if ( value ! = null & &
value . toString ( ) . trim ( ) . isEmpty ) {
_patientSearchFormValues . setFirstName = " 0 " ;
}
} ,
/ / validator: ( value ) {
/ / return TextValidator ( ) . validateName ( value ) ;
/ / } ,
inputFormatter: ONLY_LETTERS ) ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
if ( value ! = null & &
value . toString ( ) . trim ( ) . isEmpty ) {
_patientSearchFormValues . setFirstName = " 0 " ;
}
} ,
/ / validator: ( value ) {
/ / return TextValidator ( ) . validateName ( value ) ;
/ / } ,
inputFormatter: ONLY_LETTERS ) ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
labelText:
TranslationBase . of ( context ) . middleName ,
borderColor: Colors . white ,
onSaved: ( value ) {
value = = null | | value = = ' '
? _patientSearchFormValues . setMiddleName =
" 0 "
: _patientSearchFormValues . setMiddleName =
value ;
if ( value ! = null & & value
. toString ( )
. trim ( )
. isEmpty ) {
_patientSearchFormValues . setMiddleName =
" 0 " ;
}
} ,
/ / validator: ( value ) {
/ / return TextValidator ( ) . validateName ( value ) ;
/ / } ,
inputFormatter: ONLY_LETTERS ) ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
labelText: TranslationBase . of ( context ) . lastName ,
borderColor: Colors . white ,
onSaved: ( value ) {
value = = null | | value = = ' '
? _patientSearchFormValues . setLastName =
" 0 "
: _patientSearchFormValues . setLastName =
value ;
if ( value ! = null & & value
. toString ( )
. trim ( )
. isEmpty ) {
_patientSearchFormValues . setLastName = " 0 " ;
}
} ,
inputFormatter: ONLY_LETTERS ) ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
labelText:
TranslationBase . of ( context ) . middleName ,
borderColor: Colors . white ,
onSaved: ( value ) {
value = = null | | value = = ' '
? _patientSearchFormValues . setMiddleName =
" 0 "
: _patientSearchFormValues . setMiddleName =
value ;
if ( value ! = null & & value
. toString ( )
. trim ( )
. isEmpty ) {
_patientSearchFormValues . setMiddleName =
" 0 " ;
}
} ,
/ / validator: ( value ) {
/ / return TextValidator ( ) . validateName ( value ) ;
/ / } ,
inputFormatter: ONLY_LETTERS ) ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
labelText: TranslationBase . of ( context ) . lastName ,
TranslationBase . of ( context ) . phoneNumber ,
borderColor: Colors . white ,
textInputType: TextInputType . number ,
textInputAction: TextInputAction . done ,
inputFormatter: ONLY_NUMBERS ,
focusNode: _nodeText1 ,
onSaved: ( value ) {
value = = null | | value = = ' '
? _patientSearchFormValues . setLastName =
" 0 "
: _patientSearchFormValues . setLastName =
value ;
? _patientSearchFormValues
. setPatientMobileNumber = " 0 "
: _patientSearchFormValues
. setPatientMobileNumber = value ;
if ( value ! = null & & value
. toString ( )
. trim ( )
. isEmpty ) {
_patientSearchFormValues . setLastName = " 0 " ;
_patientSearchFormValues
. setPatientMobileNumber = " 0 " ;
}
} ,
inputFormatter: ONLY_LETTERS ) ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
labelText:
TranslationBase . of ( context ) . phoneNumber ,
borderColor: Colors . white ,
textInputType: TextInputType . number ,
inputFormatter: ONLY_NUMBERS ,
onSaved: ( value ) {
value = = null | | value = = ' '
? _patientSearchFormValues
. setPatientMobileNumber = " 0 "
: _patientSearchFormValues
. setPatientMobileNumber = value ;
if ( value ! = null & & value
. toString ( )
. trim ( )
. isEmpty ) {
_patientSearchFormValues
. setPatientMobileNumber = " 0 " ;
}
} ,
) ,
) ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
labelText:
TranslationBase . of ( context ) . patientID ,
borderColor: Colors . white ,
textInputType: TextInputType . number ,
inputFormatter: ONLY_NUMBERS ,
focusNode: _nodeText2 ,
onSaved: ( value ) {
value = = null | | value = = ' '
? _patientSearchFormValues . setPatientID =
0
: _patientSearchFormValues . setPatientID =
int . parse ( value ) ;
if ( value ! = null & & value
. trim ( )
. toString ( )
. isEmpty ) {
_patientSearchFormValues . setPatientID = 0 ;
}
} ) ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
labelText:
TranslationBase . of ( context ) . patientID ,
TranslationBase . of ( context ) . patient File ,
borderColor: Colors . white ,
textInputType: TextInputType . number ,
focusNode: _nodeText3 ,
inputFormatter: ONLY_NUMBERS ,
onSaved: ( value ) {
value = = null | | value = = ' '
? _patientSearchFormValues . setPatientID =
0
: _patientSearchFormValues . setPatientID =
int . parse ( value ) ;
if ( value ! = null & & value
. trim ( )
. toString ( )
. isEmpty ) {
_patientSearchFormValues . setPatientID = 0 ;
}
} ) ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
decoration: BoxDecoration (
borderRadius:
BorderRadius . all ( Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 , color: HexColor ( " #CCCCCC " ) ) ) ,
padding: EdgeInsets . only ( top: 5 ) ,
child: AppTextFormField (
labelText:
TranslationBase . of ( context ) . patientFile ,
borderColor: Colors . white ,
textInputType: TextInputType . number ,
inputFormatter: ONLY_NUMBERS ,
onSaved: ( value ) { } ,
onSaved: ( value ) { } ,
) ,
) ,
) ,
( ! ( _selectedType = = ' 2 ' | | _selectedType = = ' 4 ' ) )
? DynamicElements ( _patientSearchFormValues , isFormSubmitted )
: SizedBox (
height: 0 ,
) ,
SizedBox (
height: 10 ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
child: Row (
mainAxisAlignment: MainAxisAlignment . start ,
children: < Widget > [
Container (
decoration: BoxDecoration (
borderRadius: BorderRadius . all (
Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 ,
color: HexColor ( " #CCCCCC " ) ) ) ,
height : 25 ,
width: 25 ,
child: Checkbox (
value: onlyArrived ,
checkColor: HexColor ( " #2A930A " ) ,
activeColor: Colors . white ,
onChanged: ( bool newValue ) {
setState ( ( ) {
onlyArrived = newValue ;
} ) ;
} ) ,
) ,
SizedBox (
width: 12 ,
) ,
AppText (
TranslationBase . of ( context )
. onlyArrivedPatient ,
fontSize: SizeConfig . textMultiplier * 2 ) ,
] ) ) ,
SizedBox (
height: 10 ,
) ,
] ,
( ! ( _selectedType = = ' 2 ' | | _selectedType = = ' 4 ' ) )
? DynamicElements ( _patientSearchFormValues , isFormSubmitted )
: SizedBox (
height: 0 ,
) ,
SizedBox (
height: 10 ,
) ,
SizedBox (
height: 10 ,
) ,
Container (
child: Row (
mainAxisAlignment: MainAxisAlignment . start ,
children: < Widget > [
Container (
decoration: BoxDecoration (
borderRadius: BorderRadius . all (
Radius . circular ( 6.0 ) ) ,
border: Border . all (
width: 1.0 ,
color: HexColor ( " #CCCCCC " ) ) ) ,
height: 25 ,
width: 25 ,
child: Checkbox (
value: onlyArrived ,
checkColor: HexColor ( " #2A930A " ) ,
activeColor: Colors . white ,
onChanged: ( bool newValue ) {
setState ( ( ) {
onlyArrived = newValue ;
} ) ;
} ) ,
) ,
SizedBox (
width: 12 ,
) ,
AppText (
TranslationBase . of ( context )
. onlyArrivedPatient ,
fontSize: SizeConfig . textMultiplier * 2 ) ,
] ) ) ,
SizedBox (
height: 10 ,
) ,
] ,
) ,
) ,
) ,
)
] ,
)
],
) ,
) ,
) ,
Container (
margin: EdgeInsets . all ( SizeConfig . widthMultiplier * 5 ) ,
child: Wrap (
alignment: WrapAlignment . center ,
children: < Widget > [
AppButton (
title: TranslationBase . of ( context ) . search ,
onPressed: ( ) {
_validateInputs ( ) ;
} ,
) ,
] ,
Container (
margin: EdgeInsets . all ( SizeConfig . widthMultiplier * 5 ) ,
child: Wrap (
alignment: WrapAlignment . center ,
children: < Widget > [
AppButton (
title: TranslationBase . of ( context ) . search ,
onPressed: ( ) {
_validateInputs ( ) ;
} ,
) ,
] ,
) ,
) ,
) ,
] ,
) ) ;
] ,
)) ,
) ;
}
}