Merge branch 'sultan' into 'development'

Sultan

See merge request Cloud_Solution/doctor_app_flutter!352
merge-requests/353/merge
Mohammad Aljammal 5 years ago
commit 22a32b6ed5

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -57,7 +57,7 @@ const Map<String, Map<String, String>> localizedValues = {
'firstName': {'en': 'First Name', 'ar': 'الاسم الاول'}, 'firstName': {'en': 'First Name', 'ar': 'الاسم الاول'},
'middleName': {'en': 'Middle Name', 'ar': 'اسم الاب'}, 'middleName': {'en': 'Middle Name', 'ar': 'اسم الاب'},
'lastName': {'en': 'Last Name', 'ar': 'اسم العائلة'}, 'lastName': {'en': 'Last Name', 'ar': 'اسم العائلة'},
'phoneNumber': {'en': 'Phone Number ', 'ar': 'رقم الجوال'}, 'phoneNumber': {'en': "Patient's Phone Number ", 'ar': 'رقم الجوال'},
'patientID': {'en': 'Patient ID', 'ar': 'رقم المريض'}, 'patientID': {'en': 'Patient ID', 'ar': 'رقم المريض'},
'patientFile': {'en': 'Patient File', 'ar': 'ملف المريض'}, 'patientFile': {'en': 'Patient File', 'ar': 'ملف المريض'},
'familyMedicine': {'en': 'Family Medicine Clinic', 'ar': 'عيادة طب الأسرة'}, 'familyMedicine': {'en': 'Family Medicine Clinic', 'ar': 'عيادة طب الأسرة'},
@ -746,4 +746,6 @@ const Map<String, Map<String, String>> localizedValues = {
'en': "Search patient or Medicines", 'en': "Search patient or Medicines",
'ar': "مریض یا دوائیں تلاش کریں" 'ar': "مریض یا دوائیں تلاش کریں"
}, },
'appointmentDate': {'en': "Appointment Date", 'ar': "تاريخ الموعد"},
'arrived_p': {'en': "Arrived", 'ar': "وصل"},
}; };

@ -468,6 +468,18 @@
"arrival-patients" "arrival-patients"
] ]
}, },
{
"uid": "23c2239369a69f752e790de95123b9e9",
"css": "male-2",
"code": 59417,
"src": "mfglabs"
},
{
"uid": "10b2be8b48bebc1974d6f94bac9de71d",
"css": "female-1",
"code": 59419,
"src": "mfglabs"
},
{ {
"uid": "740f78c2b53c8cc100a8b0d283bbd34f", "uid": "740f78c2b53c8cc100a8b0d283bbd34f",
"css": "home_icon-1", "css": "home_icon-1",

@ -12,6 +12,10 @@
/// - asset: fonts/DoctorApp.ttf /// - asset: fonts/DoctorApp.ttf
/// ///
/// ///
/// * MFG Labs, Copyright (C) 2012 by Daniel Bruce
/// Author: MFG Labs
/// License: SIL (http://scripts.sil.org/OFL)
/// Homepage: http://www.mfglabs.com/
/// ///
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
@ -67,8 +71,12 @@ class DoctorApp {
IconData(0xe817, fontFamily: _kFontFam, fontPackage: _kFontPkg); IconData(0xe817, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData referral = static const IconData referral =
IconData(0xe818, fontFamily: _kFontFam, fontPackage: _kFontPkg); IconData(0xe818, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData male_2 =
IconData(0xe819, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData search_patient = static const IconData search_patient =
IconData(0xe81a, fontFamily: _kFontFam, fontPackage: _kFontPkg); IconData(0xe81a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData female_1 =
IconData(0xe81b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData mail = static const IconData mail =
IconData(0xe81e, fontFamily: _kFontFam, fontPackage: _kFontPkg); IconData(0xe81e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData medicine_search = static const IconData medicine_search =

@ -128,129 +128,111 @@ class _MedicineSearchState extends State<MedicineSearchScreen> {
child: FractionallySizedBox( child: FractionallySizedBox(
widthFactor: 0.97, widthFactor: 0.97,
child: SingleChildScrollView( child: SingleChildScrollView(
child: Container(
// height: SizeConfig.screenHeight,
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[ children: <Widget>[
SizedBox( SizedBox(
height: 50, height: SizeConfig.screenHeight * .16,
), ),
Column( Column(children: [
children: <Widget>[ FractionallySizedBox(
Container( widthFactor: 0.9,
child: Icon( child: Column(
DoctorApp.medicine_search, children: <Widget>[
size: 100, Container(
color: Colors.black, // height: MediaQuery.of(context).size.height * 0.070,
), child: InkWell(
margin: EdgeInsets.only(top: 50), onTap: model.allMedicationList != null
), ? () {
Padding( setState(() {
padding: const EdgeInsets.only(top: 12.0), _selectedMedication = null;
child: AppText( });
TranslationBase.of(context).type.toUpperCase(), }
fontWeight: FontWeight.bold, : null,
fontSize: SizeConfig.heightMultiplier * 2.5, child: _selectedMedication == null
), ? AutoCompleteTextField<
GetMedicationResponseModel>(
decoration: textFieldSelectorDecoration(
TranslationBase.of(context)
.searchMedicineNameHere,
_selectedMedication != null
? _selectedMedication.genericName
: null,
true,
icon: EvaIcons.search),
itemSubmitted: (item) => setState(
() => _selectedMedication = item),
key: key,
suggestions: model.allMedicationList,
itemBuilder: (context, suggestion) =>
new Padding(
child: Texts(
suggestion.description +
'/' +
suggestion.genericName),
padding: EdgeInsets.all(10.0)),
itemSorter: (a, b) => 1,
itemFilter: (suggestion, input) =>
suggestion.genericName
.toLowerCase()
.startsWith(
input.toLowerCase()) ||
suggestion.description
.toLowerCase()
.startsWith(
input.toLowerCase()) ||
suggestion.keywords
.toLowerCase()
.startsWith(input.toLowerCase()),
)
: TextField(
minLines: 2,
maxLines: 2,
decoration: textFieldSelectorDecoration(
TranslationBase.of(context)
.searchMedicineNameHere,
_selectedMedication != null
? _selectedMedication
.description +
(' (${_selectedMedication.genericName} )')
: null,
true,
icon: EvaIcons.search),
enabled: false,
),
),
),
],
), ),
Padding( )
padding: const EdgeInsets.only(top: 5.0), ]),
child: AppText(
TranslationBase.of(context)
.searchMedicineImageCaption,
fontSize: SizeConfig.heightMultiplier * 2,
),
)
],
),
SizedBox( SizedBox(
height: 15, height: SizeConfig.screenHeight * .5,
), ),
FractionallySizedBox( Column(
widthFactor: 0.9, children: [
child: Column( FractionallySizedBox(
children: <Widget>[ widthFactor: 0.97,
Container( child: Wrap(
height: MediaQuery.of(context).size.height * 0.070, alignment: WrapAlignment.center,
child: InkWell( children: <Widget>[
onTap: model.allMedicationList != null // TODO change it secondary button and add loading
? () { AppButton(
setState(() { title: TranslationBase.of(context).search,
_selectedMedication = null; onPressed: () async {
}); await searchMedicine(context, model);
} },
: null, ),
child: _selectedMedication == null ],
? AutoCompleteTextField<
GetMedicationResponseModel>(
decoration: textFieldSelectorDecoration(
TranslationBase.of(context)
.searchMedicineNameHere,
_selectedMedication != null
? _selectedMedication.genericName
: null,
true,
icon: EvaIcons.search),
itemSubmitted: (item) => setState(
() => _selectedMedication = item),
key: key,
suggestions: model.allMedicationList,
itemBuilder: (context, suggestion) =>
new Padding(
child: Texts(
suggestion.description +
'/' +
suggestion.genericName),
padding: EdgeInsets.all(8.0)),
itemSorter: (a, b) => 1,
itemFilter: (suggestion, input) =>
suggestion.genericName
.toLowerCase()
.startsWith(input.toLowerCase()) ||
suggestion.description
.toLowerCase()
.startsWith(input.toLowerCase()) ||
suggestion.keywords
.toLowerCase()
.startsWith(input.toLowerCase()),
)
: TextField(
minLines: 2,
maxLines: 2,
decoration: textFieldSelectorDecoration(
TranslationBase.of(context)
.searchMedicineNameHere,
_selectedMedication != null
? _selectedMedication.description +
(' (${_selectedMedication.genericName} )')
: null,
true,
icon: EvaIcons.search),
enabled: false,
),
),
),
SizedBox(
height: 15,
),
Container(
child: Wrap(
alignment: WrapAlignment.center,
children: <Widget>[
// TODO change it secondary button and add loading
AppButton(
title: TranslationBase.of(context).search,
onPressed: () async {
await searchMedicine(context, model);
},
),
],
),
), ),
], )
), ],
), )
], ],
), ),
), )),
), ),
), ),
), ),

@ -24,7 +24,7 @@ class SearchMedicinePatientScreen extends StatefulWidget {
class _SearchMedicinePatientScreen extends State<SearchMedicinePatientScreen> class _SearchMedicinePatientScreen extends State<SearchMedicinePatientScreen>
with SingleTickerProviderStateMixin { with SingleTickerProviderStateMixin {
TabController _tabController; TabController _tabController;
var activeIndex = 0;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -50,42 +50,63 @@ class _SearchMedicinePatientScreen extends State<SearchMedicinePatientScreen>
child: Center( child: Center(
child: Container( child: Container(
height: 60.0, height: 60.0,
color: Colors.white,
margin: EdgeInsets.only(top: 10.0), margin: EdgeInsets.only(top: 10.0),
width: MediaQuery.of(context).size.width * 0.92, // 0.9, width: MediaQuery.of(context).size.width, // 0.9,
decoration: BoxDecoration( // decoration: BoxDecoration(
border: Border( // border: Border(
bottom: BorderSide( // bottom: BorderSide(
color: Theme.of(context).dividerColor, // color: Theme.of(context).dividerColor,
width: 0.9), //width: 0.7 // width: 0.9), //width: 0.7
), // ),
color: Colors.white), // color: Colors.white),
child: Center( child: TabBar(
child: TabBar( isScrollable: true,
isScrollable: true, onTap: (index) {
controller: _tabController, setState(() {
indicatorWeight: 5.0, activeIndex = index;
indicatorSize: TabBarIndicatorSize.tab, });
labelColor: Theme.of(context).primaryColor, },
labelPadding: controller: _tabController,
EdgeInsets.only(top: 4.0, left: 35.0, right: 35.0), indicatorWeight: 0.01,
unselectedLabelColor: Colors.grey[800], indicatorSize: TabBarIndicatorSize.label,
tabs: [ labelColor: Theme.of(context).primaryColor,
Container( indicatorColor: Colors.grey[800],
width: MediaQuery.of(context).size.width * 0.30, // labelPadding:
child: Center( // EdgeInsets.only(top: 4.0, left: 35.0, right: 35.0),
child: AppText( unselectedLabelColor: Colors.grey[800],
TranslationBase.of(context).searchPatient), tabs: [
Container(
width: MediaQuery.of(context).size.width * 0.40,
decoration: BoxDecoration(
color: activeIndex == 0
? Colors.red[700]
: Colors.grey[200],
borderRadius: BorderRadius.circular(5)),
child: Center(
child: AppText(
TranslationBase.of(context).searchPatient,
color: activeIndex == 0 ? Colors.white : Colors.black,
fontWeight: FontWeight.bold,
), ),
), ),
Container( ),
width: MediaQuery.of(context).size.width * 0.30, Container(
child: Center( width: MediaQuery.of(context).size.width * 0.40,
child: AppText( decoration: BoxDecoration(
TranslationBase.of(context).searchMedicine), color: activeIndex == 1
? Colors.red[700]
: Colors.grey[200],
borderRadius: BorderRadius.circular(5)),
child: Center(
child: AppText(
TranslationBase.of(context).searchMedicine,
fontWeight: FontWeight.bold,
color: activeIndex == 1 ? Colors.white : Colors.black,
), ),
), ),
], ),
), ],
), ),
), ),
), ),

@ -43,7 +43,7 @@ class _PatientSearchScreenState extends State<PatientSearchScreen> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
bool _autoValidate = false; bool _autoValidate = false;
bool onlyArrived = true; bool onlyArrived = true;
bool isView = false;
bool isFormSubmitted = false; bool isFormSubmitted = false;
FocusNode _nodeText1 = FocusNode(); FocusNode _nodeText1 = FocusNode();
@ -121,324 +121,293 @@ class _PatientSearchScreenState extends State<PatientSearchScreen> {
FocusScope.of(context).requestFocus(new FocusNode()); FocusScope.of(context).requestFocus(new FocusNode());
}, },
child: AppScaffold( child: AppScaffold(
appBarTitle: TranslationBase.of(context).searchPatient, appBarTitle: TranslationBase.of(context).searchPatient,
isShowAppBar: false, isShowAppBar: false,
body: ListView( body: ListView(
children: <Widget>[ children: <Widget>[
RoundedContainer( RoundedContainer(
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
Column( Column(
children: <Widget>[ children: <Widget>[
Container( // Container(
child: Icon( // child: Icon(
DoctorApp.search_patient_1, // DoctorApp.search_patient_1,
size: 100, // size: 100,
color: Colors.black, // color: Colors.black,
), // ),
margin: EdgeInsets.only(top: 10), // margin: EdgeInsets.only(top: 10),
), // ),
Padding( // Padding(
padding: const EdgeInsets.only(top: 12.0), // padding: const EdgeInsets.only(top: 12.0),
child: AppText( // child: AppText(
TranslationBase.of(context) // TranslationBase.of(context)
.searchPatientImageCaptionTitle // .searchPatientImageCaptionTitle
.toUpperCase(), // .toUpperCase(),
fontWeight: FontWeight.bold, // fontWeight: FontWeight.bold,
fontSize: SizeConfig.heightMultiplier * 2.5, // fontSize: SizeConfig.heightMultiplier * 2.5,
), // ),
), // ),
Padding( // Padding(
padding: const EdgeInsets.only(top: 5.0), // padding: const EdgeInsets.only(top: 5.0),
child: AppText( // child: AppText(
TranslationBase.of(context) // TranslationBase.of(context)
.searchPatientImageCaptionBody, // .searchPatientImageCaptionBody,
fontSize: SizeConfig.heightMultiplier * 2, // fontSize: SizeConfig.heightMultiplier * 2,
// ),
// )
],
),
Container(
padding: EdgeInsets.all(15),
width: SizeConfig.screenWidth * 1,
child: Form(
key: _formKey,
autovalidate: _autoValidate,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SizedBox(
height: 15,
), ),
) if (_selectedType != '7')
],
),
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,
),
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(),
)),
),
],
),
),
),
SizedBox(
height: 10,
),
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: borderRadius:
BorderRadius.all(Radius.circular(6.0)), BorderRadius.all(Radius.circular(6.0)),
border: Border.all( border: Border.all(
width: 1.0, color: HexColor("#CCCCCC"))), width: 1.0, color: HexColor("#CCCCCC"))),
padding: EdgeInsets.only(top: 5), padding: EdgeInsets.all(10),
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(
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,
),
if (_selectedType != '7')
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,
textInputAction: TextInputAction.done,
inputFormatter: ONLY_NUMBERS,
focusNode: _nodeText1,
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(
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( child: AppTextFormField(
labelText: labelText:
TranslationBase.of(context).patientFile, TranslationBase.of(context).phoneNumber,
borderColor: Colors.white, borderColor: Colors.white,
textInputType: TextInputType.number, textInputType: TextInputType.number,
focusNode: _nodeText3, textInputAction: TextInputAction.done,
inputFormatter: ONLY_NUMBERS, inputFormatter: ONLY_NUMBERS,
onSaved: (value) {}, focusNode: _nodeText1,
onSaved: (value) {
value == null || value == ''
? _patientSearchFormValues
.setPatientMobileNumber = "0"
: _patientSearchFormValues
.setPatientMobileNumber = value;
if (value != null &&
value.toString().trim().isEmpty) {
_patientSearchFormValues
.setPatientMobileNumber = "0";
}
},
), ),
), ),
(!(_selectedType == '2' || _selectedType == '4')) SizedBox(
? DynamicElements( height: 10,
_patientSearchFormValues, isFormSubmitted) ),
: SizedBox( Row(
height: 0, mainAxisAlignment: MainAxisAlignment.end,
children: [
InkWell(
child: this.isView == false
? AppText(
'Search With Other Critearia',
color: Colors.red,
fontWeight: FontWeight.bold,
)
: AppText('Hide Other Criteria',
color: Colors.red,
fontWeight: FontWeight.bold),
onTap: () {
setState(() {
this.isView = !this.isView;
});
},
)
],
),
isView == true
? Column(children: [
SizedBox(
height: 10,
),
Container(
height: 65.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(),
)),
),
],
),
),
),
SizedBox(
height: 10,
),
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(6.0)),
border: Border.all(
width: 1.0,
color: HexColor("#CCCCCC"))),
padding: EdgeInsets.all(10),
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.all(10),
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.all(10),
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,
), ),
SizedBox(
height: 10,
),
SizedBox(
height: 10,
),
Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(
@ -446,52 +415,132 @@ class _PatientSearchScreenState extends State<PatientSearchScreen> {
border: Border.all( border: Border.all(
width: 1.0, width: 1.0,
color: HexColor("#CCCCCC"))), color: HexColor("#CCCCCC"))),
height: 25, padding: EdgeInsets.all(10),
width: 25, child: AppTextFormField(
child: Checkbox( labelText: TranslationBase.of(context)
value: onlyArrived, .patientID,
checkColor: HexColor("#2A930A"), borderColor: Colors.white,
activeColor: Colors.white, textInputType: TextInputType.number,
onChanged: (bool newValue) { inputFormatter: ONLY_NUMBERS,
setState(() { focusNode: _nodeText2,
onlyArrived = newValue; onSaved: (value) {
}); value == null || value == ''
? _patientSearchFormValues
.setPatientID = 0
: _patientSearchFormValues
.setPatientID =
int.parse(value);
if (value != null &&
value.trim().toString().isEmpty) {
_patientSearchFormValues
.setPatientID = 0;
}
}), }),
), ),
SizedBox( SizedBox(
width: 12, height: 10,
), ),
AppText( Container(
TranslationBase.of(context) decoration: BoxDecoration(
.onlyArrivedPatient, borderRadius: BorderRadius.all(
fontSize: SizeConfig.textMultiplier * 2), Radius.circular(6.0)),
])), border: Border.all(
SizedBox( width: 1.0,
height: 10, color: HexColor("#CCCCCC"))),
), padding: EdgeInsets.all(10),
], child: AppTextFormField(
), labelText: TranslationBase.of(context)
.patientFile,
borderColor: Colors.white,
textInputType: TextInputType.number,
focusNode: _nodeText3,
inputFormatter: ONLY_NUMBERS,
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,
),
])
: SizedBox(
height: SizeConfig.screenHeight * .4,
),
],
), ),
)
],
),
),
Container(
margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5),
child: Wrap(
alignment: WrapAlignment.center,
children: <Widget>[
AppButton(
title: TranslationBase.of(context).search,
onPressed: () {
_validateInputs();
},
), ),
], ),
), ],
), ),
], ),
)), Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5),
child: Wrap(
alignment: WrapAlignment.center,
children: <Widget>[
AppButton(
title: TranslationBase.of(context).search,
onPressed: () {
_validateInputs();
},
),
],
),
),
],
),
],
),
),
); );
} }
} }

@ -1,22 +1,21 @@
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart'; import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/doctor/profile_req_Model.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/models/patient/patient_arrival/get_patient_arrival_list_request_model.dart'; import 'package:doctor_app_flutter/models/patient/patient_arrival/get_patient_arrival_list_request_model.dart';
import 'package:doctor_app_flutter/models/patient/patient_model.dart'; import 'package:doctor_app_flutter/models/patient/patient_model.dart';
import 'package:doctor_app_flutter/models/patient/topten_users_res_model.dart'; import 'package:doctor_app_flutter/models/patient/topten_users_res_model.dart';
import 'package:doctor_app_flutter/routes.dart'; import 'package:doctor_app_flutter/routes.dart';
import 'package:doctor_app_flutter/screens/base/base_view.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/translations_delegate_base.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/PatientCard.dart'; import 'package:doctor_app_flutter/widgets/patients/PatientCard.dart';
import 'package:doctor_app_flutter/widgets/shared/app_button.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_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/dr_app_circular_progress_Indeicator.dart'; import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart'; import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -42,9 +41,6 @@ class _PatientsScreenState extends State<PatientsScreen> {
List date; List date;
List unFilterDate; List unFilterDate;
var clinicId;
AuthViewModel authProvider;
Color sideColor = Colors.black; Color sideColor = Colors.black;
List<PatiantInformtion> responseModelList; List<PatiantInformtion> responseModelList;
List<PatiantInformtion> responseModelList2; List<PatiantInformtion> responseModelList2;
@ -59,10 +55,9 @@ class _PatientsScreenState extends State<PatientsScreen> {
bool _isInit = true; bool _isInit = true;
String patientType; String patientType;
bool isSearch = false;
String patientTypeTitle; String patientTypeTitle;
var _isLoading = true; var _isLoading = true;
var selectedFilter = 1;
bool _isError = false; bool _isError = false;
String error = ""; String error = "";
ProjectViewModel projectsProvider; ProjectViewModel projectsProvider;
@ -71,7 +66,6 @@ class _PatientsScreenState extends State<PatientsScreen> {
PatientModel patient; PatientModel patient;
searchData(String str) { searchData(String str) {
this.responseModelList = this.responseModelList2; this.responseModelList = this.responseModelList2;
var strExist = str.length > 0 ? true : false; var strExist = str.length > 0 ? true : false;
@ -199,26 +193,14 @@ class _PatientsScreenState extends State<PatientsScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
authProvider = Provider.of(context);
_locations = [ _locations = [
TranslationBase TranslationBase.of(context).all,
.of(context) TranslationBase.of(context).today,
.all, TranslationBase.of(context).tomorrow,
TranslationBase TranslationBase.of(context).nextWeek,
.of(context)
.today,
TranslationBase
.of(context)
.tomorrow,
TranslationBase
.of(context)
.nextWeek,
]; ];
projectsProvider = Provider.of(context); projectsProvider = Provider.of(context);
final routeArgs = ModalRoute final routeArgs = ModalRoute.of(context).settings.arguments as Map;
.of(context)
.settings
.arguments as Map;
patient = widget.patientSearchForm != null patient = widget.patientSearchForm != null
? widget.patientSearchForm ? widget.patientSearchForm
@ -228,10 +210,6 @@ class _PatientsScreenState extends State<PatientsScreen> {
? widget.selectedType ? widget.selectedType
: routeArgs['selectedType']; : routeArgs['selectedType'];
if(routeArgs != null && routeArgs.containsKey("isSearch")){
isSearch = routeArgs['isSearch'];
}
if (!projectsProvider.isArabic) if (!projectsProvider.isArabic)
patientTypeTitle = SERVICES_PATIANT_HEADER[int.parse(patientType)]; patientTypeTitle = SERVICES_PATIANT_HEADER[int.parse(patientType)];
else else
@ -253,10 +231,10 @@ class _PatientsScreenState extends State<PatientsScreen> {
model model
.getPatientList( .getPatientList(
val2 == 7 val2 == 7
? getPatientArrivalListRequestModel.toJson() ? getPatientArrivalListRequestModel.toJson()
: patient, : patient,
patientType) patientType)
.then((res) { .then((res) {
setState(() { setState(() {
if (res != null && res['MessageStatus'] == 1) { if (res != null && res['MessageStatus'] == 1) {
@ -310,275 +288,220 @@ class _PatientsScreenState extends State<PatientsScreen> {
body: _isLoading body: _isLoading
? Container() ? Container()
: _isError : _isError
? DrAppEmbeddedError(error: error) ? DrAppEmbeddedError(error: error)
: lItems == null || lItems.length == 0 : lItems == null || lItems.length == 0
? DrAppEmbeddedError( ? DrAppEmbeddedError(
error: error:
TranslationBase.of(context).youDontHaveAnyPatient) TranslationBase.of(context).youDontHaveAnyPatient)
: Container( : Container(
child: ListView( color: Colors.grey[200],
scrollDirection: Axis.vertical, child: ListView(
children: <Widget>[ scrollDirection: Axis.vertical,
Container( children: <Widget>[
child: lItems == null Container(
? Column( child: lItems == null
crossAxisAlignment: ? Column(
CrossAxisAlignment.start, crossAxisAlignment:
children: <Widget>[ CrossAxisAlignment.start,
Container( children: <Widget>[
child: Center( Container(
child: Padding( child: Center(
padding: const EdgeInsets.fromLTRB( child: Padding(
0, 0, 0, 0), //250 padding: const EdgeInsets.fromLTRB(
child: 0, 0, 0, 0), //250
DrAppCircularProgressIndeicator(), child:
)), DrAppCircularProgressIndeicator(),
), )),
],
)
: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.only(
top: MediaQuery.of(context)
.size
.height *
0.03),
child: SERVICES_PATIANT2[
int.parse(patientType)] ==
"List_MyOutPatient"
? _locationBar(context)
: Container(),
),
SizedBox(height: 18.5),
Container(
width: SizeConfig.screenWidth * 0.9,
height:
SizeConfig.screenHeight * 0.05,
child: TextField(
controller: _controller,
onChanged: (String str) {
this.searchData(str);
},
decoration: buildInputDecoration(
context,
TranslationBase
.of(context)
.searchPatient),
),
),
SizedBox(
height: 10.0,
),
if(int.parse(patientType)==7)
projectsProvider
.doctorClinicsList.length >
0
? FractionallySizedBox(
widthFactor: 0.9,
child: Column(
children: [
Container(
width: MediaQuery.of(context).size.width *0.8,
child: Center(
child: DropdownButtonHideUnderline(
child: DropdownButton(
dropdownColor:
Colors.white,
iconEnabledColor:
Colors.black,
isExpanded: true,
value: clinicId == null
? projectsProvider
.doctorClinicsList[
0]
.clinicID
: clinicId,
iconSize: 25,
elevation: 16,
selectedItemBuilder:
(BuildContext
context) {
return projectsProvider
.doctorClinicsList
.map((item) {
return Row(
mainAxisSize:
MainAxisSize
.max,
children: <Widget>[
AppText(
item.clinicName,
fontSize: SizeConfig
.textMultiplier *
2.1,
color: Colors
.black,
),
],
);
}).toList();
},
onChanged: (newValue) {
clinicId = newValue;
changeClinic(newValue, context, model);
},
items: projectsProvider
.doctorClinicsList
.map((item) {
return DropdownMenuItem(
child: Text(
item.clinicName,
textAlign:
TextAlign.end,
), ),
value: item.clinicID, ],
); )
}).toList(), : Column(
)), children: <Widget>[
), SizedBox(height: 18.5),
), Container(
], width: SizeConfig.screenWidth * 0.9,
), height:
) SizeConfig.screenHeight * 0.07,
: AppText( child: TextField(
TranslationBase controller: _controller,
.of(context) onChanged: (String str) {
.noClinic), this.searchData(str);
Divider( },
thickness: 0.8, decoration: buildInputDecoration(
color: Color(0xffCCCCCC), context,
), TranslationBase.of(context)
Container( .searchPatient),
decoration: BoxDecoration( ),
color: Color(0Xffffffff), ),
borderRadius: SizedBox(
BorderRadius.circular(20)), height: 10.0,
margin: ),
EdgeInsets.fromLTRB(0, 0, 0, 0), Padding(
child: (responseModelList.length > 0) padding: EdgeInsets.only(
? Column( top: MediaQuery.of(context)
// mainAxisAlignment: MainAxisAlignment.center, .size
children: responseModelList .height *
.map((PatiantInformtion 0.03),
item) { child: SERVICES_PATIANT2[
return PatientCard(patientInfo: item, int.parse(patientType)] ==
patientType: patientType, "List_MyOutPatient"
onTap: () { ? _locationBar(context)
Navigator.of(context) : Container(),
.pushNamed( ),
PATIENTS_PROFILE, // Row(
arguments: { // mainAxisAlignment:
"patient": item, // MainAxisAlignment.spaceEvenly,
"patientType":patientType, // children: [
"from" : patient.getFrom, // AppButton(
"to" : patient.getTo,"isSearch" : isSearch, // title: TranslationBase.of(context)
}); // .all,
},); // onPressed: () {
}).toList(), // setState(() {
) // selectedFilter = 1;
: Center( // filterPatients();
child: DrAppEmbeddedError( // });
error: TranslationBase.of( // },
context) // color: selectedFilter == 1
.youDontHaveAnyPatient), // ? Colors.red[800]
// : Colors.grey[300],
// fontColor: selectedFilter == 1
// ? Colors.white
// : Colors.black,
// ),
// AppButton(
// title: TranslationBase.of(context)
// .today,
// onPressed: () {
// setState(() {
// selectedFilter = 2;
// filterPatients();
// });
// },
// color: selectedFilter == 2
// ? Colors.red[800]
// : Colors.grey[300],
// fontColor: selectedFilter == 2
// ? Colors.white
// : Colors.black,
// ),
// AppButton(
// title: TranslationBase.of(context)
// .tomorrow,
// onPressed: () {
// setState(() {
// selectedFilter = 3;
// filterPatients();
// });
// },
// color: selectedFilter == 3
// ? Colors.red[800]
// : Colors.grey[300],
// fontColor: selectedFilter == 3
// ? Colors.white
// : Colors.black,
// ),
// AppButton(
// title: TranslationBase.of(context)
// .nextWeek,
// onPressed: () {
// setState(() {
// selectedFilter = 4;
// // filterPatients();
// });
// },
// color: selectedFilter == 4
// ? Colors.red[800]
// : Colors.grey[300],
// fontColor: selectedFilter == 4
// ? Colors.white
// : Colors.black,
// ),
// ],
// ),
SizedBox(
height: 10.0,
),
// Divider(
// thickness: 0.8,
// color: Color(0xffCCCCCC),
// ),
Container(
// decoration: BoxDecoration(
// color: Color(0Xffffffff),
// borderRadius:
// BorderRadius.circular(20)),
child: (responseModelList.length > 0)
? Column(
// mainAxisAlignment: MainAxisAlignment.center,
children: responseModelList
.map((PatiantInformtion
item) {
return PatientCard(
patientInfo: item,
patientType: patientType,
onTap: () {
Navigator.of(context)
.pushNamed(
PATIENTS_PROFILE,
arguments: {
"patient": item,
"patientType":
patientType,
"from": patient
.getFrom,
"to":
patient.getTo,
});
},
);
}).toList(),
)
: Center(
child: DrAppEmbeddedError(
error: TranslationBase.of(
context)
.youDontHaveAnyPatient),
),
),
],
),
)
],
),
), ),
),
],
),
)
],
),
),
), ),
); );
} }
changeClinic(clinicId, BuildContext context, model) async { // filterPatients() {
GifLoaderDialogUtils.showMyDialog(context); // responseModelList = [];
Map profile = await sharedPref.getObj(DOCTOR_PROFILE); // //if (selectedFilter > 1) {
DoctorProfileModel doctorProfile = new DoctorProfileModel.fromJson(profile); // responseModelList2.forEach((element) {
ProfileReqModel docInfo = new ProfileReqModel( // DateTime arrivedOn = DateTime.parse(element.arrivedOn);
doctorID: doctorProfile.doctorID, // Duration dur = DateTime.now().difference(arrivedOn);
clinicID: clinicId, // if (selectedFilter == 2 && dur.inDays == 0) {
license: true, // responseModelList.add(element);
projectID: doctorProfile.projectID, // } else if (selectedFilter == 3 && dur.inDays == 1) {
tokenID: '', // responseModelList.add(element);
languageID: 2); // } else if (selectedFilter == 4 && dur.inDays > 7) {
// responseModelList.add(element);
authProvider.getDocProfiles(docInfo.toJson(), allowChangeProfile: false) // } else if (selectedFilter == 1) {
.then((profileList) async { // responseModelList.add(element);
print(profileList['DoctorProfileList'][0]); // }
int val2 = int.parse(patientType); // });
// } else {
GetPatientArrivalListRequestModel // responseModelList = responseModelList2;
// }
getPatientArrivalListRequestModel = GetPatientArrivalListRequestModel( //}
from: patient.From,
to: patient.To,
clinicID: profileList['DoctorProfileList'][0]['ClinicID'],
doctorID: profileList['DoctorProfileList'][0]['DoctorID'].toString(),
patientMRN: patient.getPatientID,
pageIndex: 0,
pageSize: 0);
model
.getPatientList(
getPatientArrivalListRequestModel.toJson(),
patientType)
.then((res) {
setState(() {
if (res != null && res['MessageStatus'] == 1) {
if (val2 == 7) {
if (res[SERVICES_PATIANT2[val2]] == null) {
_isError = true;
_isLoading = false;
this.error = error.toString();
} else {
var localList = [];
if (res["patientArrivalList"]["entityList"] == null) {
res["patientArrivalList"]["entityList"] = [];
}
res["patientArrivalList"]["entityList"].forEach((v) {
Map<String, dynamic> mergedPatient = {
...v,
...v["patientDetails"]
};
localList.add(mergedPatient);
});
lItems = localList;
}
}
parsed = lItems;
responseModelList = new ModelResponse.fromJson(parsed).list;
responseModelList2 = responseModelList;
_isError = false;
} else {
_isError = true;
error = model.error ?? res['ErrorEndUserMessage'] ??
res['ErrorMessage'];
}
_isLoading = false;
});
GifLoaderDialogUtils.hideDialog(context);
}).catchError((error) {
helpers.showErrorToast(error.toString());
GifLoaderDialogUtils.hideDialog(context);
});
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
helpers.showErrorToast(err);
});
}
InputDecoration buildInputDecoration(BuildContext context, hint) { InputDecoration buildInputDecoration(BuildContext context, hint) {
return InputDecoration( return InputDecoration(
prefixIcon: Icon(Icons.search, color: Colors.grey), suffixIcon: IconButton(
icon: new Image.asset("assets/images/filter-512.png"),
color: Colors.grey,
onPressed: () {},
iconSize: 20,
),
filled: true, filled: true,
fillColor: Colors.white, fillColor: Colors.white,
hintText: hint, hintText: hint,
@ -600,9 +523,9 @@ class _PatientsScreenState extends State<PatientsScreen> {
decoration: BoxDecoration( decoration: BoxDecoration(
color: Color(0Xffffffff), color: Color(0Xffffffff),
borderRadius: BorderRadius.circular(12.5), borderRadius: BorderRadius.circular(12.5),
border: Border.all( // border: Border.all(
width: 0.5, // width: 0.5,
), // ),
), ),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisAlignment: MainAxisAlignment.spaceEvenly,

@ -1133,6 +1133,9 @@ class TranslationBase {
localizedValues['arrivalpatient'][locale.languageCode]; localizedValues['arrivalpatient'][locale.languageCode];
String get searchmedicinepatient => String get searchmedicinepatient =>
localizedValues['searchmedicinepatient'][locale.languageCode]; localizedValues['searchmedicinepatient'][locale.languageCode];
String get appointmentDate =>
localizedValues['appointmentDate'][locale.languageCode];
String get arrivedP => localizedValues['arrived_p'][locale.languageCode];
} }
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -4,6 +4,7 @@ import 'package:doctor_app_flutter/icons_app/doctor_app_icons.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/util/date-utils.dart'; import 'package:doctor_app_flutter/util/date-utils.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/shared/Text.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:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -13,203 +14,264 @@ class PatientCard extends StatelessWidget {
final PatiantInformtion patientInfo; final PatiantInformtion patientInfo;
final Function onTap; final Function onTap;
final String patientType; final String patientType;
const PatientCard({Key key, this.patientInfo, this.onTap, this.patientType}) : super(key: key); const PatientCard({Key key, this.patientInfo, this.onTap, this.patientType})
: super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
padding: EdgeInsets.all(10), width: SizeConfig.screenWidth * 0.95,
decoration: myBoxDecoration(), padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
margin: EdgeInsets.only(bottom: 12), decoration: BoxDecoration(
child: InkWell( borderRadius: BorderRadius.circular(10), color: Colors.white),
child: Row( margin: EdgeInsets.all(5),
children: <Widget>[ child: InkWell(
Column( child: Column(
mainAxisAlignment: children: [
MainAxisAlignment SERVICES_PATIANT2[int.parse(patientType)] == "patientArrivalList"
.start, ? Container(height: 5, color: Colors.green[800])
children: < : Container(),
Widget>[ SizedBox(
Padding( height: 10,
padding: EdgeInsets ),
.only( SERVICES_PATIANT2[int.parse(patientType)] == "patientArrivalList"
left: ? Row(
12.0), mainAxisAlignment: MainAxisAlignment.spaceBetween,
child: children: [
Container( AppText(
decoration: TranslationBase.of(context).arrivedP,
BoxDecoration( color: Colors.green[800],
boxShadow: [ fontWeight: FontWeight.bold,
BoxShadow( ),
color: Color.fromRGBO( AppText(patientInfo.arrivedOn)
0,
0,
0,
0.08),
offset: Offset(0.0,
5.0),
blurRadius:
16.0)
], ],
borderRadius: )
BorderRadius.all( : SizedBox(),
Radius.circular(35.0)), Padding(
color: Color( padding: EdgeInsets.only(left: 12.0),
0xffCCCCCC), child: Row(
), mainAxisAlignment: MainAxisAlignment.spaceBetween,
width: 70,
height: 70,
child: Icon(
patientInfo.genderDescription ==
"Male"
? DoctorApp
.male
: DoctorApp
.female_icon,
size: 70,
color: Colors
.white,
),
),
),
],
),
SizedBox(
width: 10,
),
Expanded(
child: Column(
crossAxisAlignment:CrossAxisAlignment.start,
children: [
AppText(
patientInfo.firstName +
" " +
patientInfo.lastName,
fontSize:
2.0 * SizeConfig.textMultiplier,
fontWeight:
FontWeight.bold,
backGroundcolor:
Colors.white,
),
SizedBox(height: 12,),
Table(
border: TableBorder.symmetric(
// inside: BorderSide(width: 2.0, color: Colors.white),
),
// defaultVerticalAlignment:TableCellVerticalAlignment.middle ,
children: [ children: [
TableRow(children: [ Row(children: [
Container( AppText(
child: RichText( patientInfo.firstName + " " + patientInfo.lastName,
text: new TextSpan( fontSize: SizeConfig.textMultiplier * 2.5,
style: new TextStyle( fontWeight: FontWeight.bold,
fontSize: 2.0 * SizeConfig.textMultiplier, color: Colors.black), backGroundcolor: Colors.white,
children: <TextSpan>[
new TextSpan(
text: TranslationBase.of(context).fileNo,
style: TextStyle(fontWeight: FontWeight.w700, fontSize: 2.2 * SizeConfig.textMultiplier)),
new TextSpan(text: patientInfo.patientId.toString()),
],),),
), ),
Container( patientInfo.gender == 1
child: RichText( ? Icon(
text: new TextSpan( DoctorApp.male_2,
style: new TextStyle( color: Colors.blue,
fontSize: 2.0 * SizeConfig.textMultiplier, color: Colors.black), )
children: <TextSpan>[ : Icon(
new TextSpan( DoctorApp.female_1,
text: TranslationBase.of(context).age+ " : ", color: Colors.pink,
style: TextStyle(fontWeight: FontWeight.w700, )), ),
new TextSpan(text: "${DateUtils.getAgeByBirthday(patientInfo.dateofBirth, context)}"),
],),),
),
]
),
TableRow(children: [
SizedBox(height: 5,),
SizedBox(height: 5,)
]), ]),
TableRow(children: [ AppText(
Container( patientInfo.nationalityName ?? patientInfo.nationality,
child: RichText( fontWeight: FontWeight.bold,
text: new TextSpan( )
style: new TextStyle( ],
fontSize: 2.0 * SizeConfig.textMultiplier, color: Colors.black), )),
children: <TextSpan>[ Row(children: <Widget>[
new TextSpan( Column(
text: TranslationBase.of(context).nationality + " : ", mainAxisAlignment: MainAxisAlignment.start,
style: TextStyle(fontWeight: FontWeight.w700, fontSize: 2.2 * SizeConfig.textMultiplier)), children: <Widget>[
new TextSpan(text: (patientInfo.nationalityName ?? patientInfo.nationality)), Padding(
],),), padding: EdgeInsets.only(left: 12.0),
child: Container(
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: Color.fromRGBO(0, 0, 0, 0.08),
offset: Offset(0.0, 5.0),
blurRadius: 16.0)
],
borderRadius: BorderRadius.all(Radius.circular(35.0)),
color: Color(0xffCCCCCC),
), ),
width: 70,
height: 70,
Container( child: Icon(
child: RichText( patientInfo.gender == 1
text: new TextSpan( ? DoctorApp.male
style: new TextStyle( : DoctorApp.female_icon,
fontSize: 2.0 * SizeConfig.textMultiplier, color: Colors.black), size: 70,
children: <TextSpan>[ color: Colors.white,
new TextSpan(
text: TranslationBase.of(context).gender + " : ",
style: TextStyle(fontWeight: FontWeight.w700, )),
new TextSpan(text: patientInfo.gender.toString() == '1' ? 'Male' : 'Female'),
],),),
), ),
]
), ),
),
], ],
), ),
if(SERVICES_PATIANT2[int.parse(patientType)] == "List_MyOutPatient") SizedBox(
Container( width: 10,
),
child: Row( Expanded(
mainAxisAlignment: MainAxisAlignment.start, child: Column(
children: <Widget>[ crossAxisAlignment: CrossAxisAlignment.start,
Container( children: [
height: 15, Container(
width: 60, child: RichText(
decoration: BoxDecoration( text: new TextSpan(
borderRadius: BorderRadius.circular(25), style: new TextStyle(
color: HexColor("#20A169"), fontSize: 2.0 * SizeConfig.textMultiplier,
), color: Colors.black),
child: AppText( children: <TextSpan>[
patientInfo.startTime, new TextSpan(
color: Colors.white, text: TranslationBase.of(context).fileNo,
fontSize: 1.5 * SizeConfig.textMultiplier, style: TextStyle(
textAlign: TextAlign.center, fontSize:
fontWeight: FontWeight.bold, 2.2 * SizeConfig.textMultiplier)),
), new TextSpan(
), text: patientInfo.patientId.toString(),
SizedBox( style: TextStyle(
width: 3.5, fontWeight: FontWeight.w700,
)),
],
), ),
Container( ),
child: AppText( ),
convertDateFormat2(patientInfo.appointmentDate.toString()), Container(
fontSize: 1.5 * SizeConfig.textMultiplier, child: RichText(
fontWeight: FontWeight.bold, text: new TextSpan(
), style: new TextStyle(
fontSize: 2.0 * SizeConfig.textMultiplier,
color: Colors.black),
children: <TextSpan>[
new TextSpan(
text: TranslationBase.of(context).age + " : ",
),
new TextSpan(
text:
"${DateUtils.getAgeByBirthday(patientInfo.dateofBirth, context)}",
style: TextStyle(
fontWeight: FontWeight.w700,
)),
],
), ),
SizedBox( ),
height: 0.5,
)
],
), ),
margin: EdgeInsets.only(top: 8,), if (SERVICES_PATIANT2[int.parse(patientType)] ==
) "List_MyOutPatient")
], Container(
), child: Row(
), mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
AppText(
TranslationBase.of(context).appointmentDate +
" : ",
fontSize: 14,
),
Container(
height: 15,
width: 60,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25),
color: HexColor("#20A169"),
),
child: AppText(
patientInfo.startTime,
color: Colors.white,
fontSize: 1.5 * SizeConfig.textMultiplier,
textAlign: TextAlign.center,
fontWeight: FontWeight.bold,
),
),
SizedBox(
width: 3.5,
),
Container(
child: AppText(
convertDateFormat2(
patientInfo.appointmentDate.toString()),
fontSize: 1.5 * SizeConfig.textMultiplier,
fontWeight: FontWeight.bold,
),
),
SizedBox(
height: 0.5,
)
],
),
margin: EdgeInsets.only(
top: 8,
),
)
]))
]),
],
),
onTap: onTap,
));
// Divider(color: Colors.grey) // ]),
], // TableRow(children: [
), // SizedBox(
onTap: onTap, // height: 5,
), // ),
); // SizedBox(
// height: 5,
// )
// ]),
// TableRow(children: [
// Container(
// child: RichText(
// text: new TextSpan(
// style: new TextStyle(
// fontSize: 2.0 * SizeConfig.textMultiplier,
// color: Colors.black),
// children: <TextSpan>[
// new TextSpan(
// text: TranslationBase.of(context)
// .nationality +
// " : ",
// style: TextStyle(
// fontWeight: FontWeight.w700,
// fontSize: 2.2 *
// SizeConfig.textMultiplier)),
// // ,
// ],
// ),
// ),
// ),
// Container(
// child: RichText(
// text: new TextSpan(
// style: new TextStyle(
// fontSize: 2.0 * SizeConfig.textMultiplier,
// color: Colors.black),
// children: <TextSpan>[
// new TextSpan(
// text:
// TranslationBase.of(context).gender +
// " : ",
// style: TextStyle(
// fontWeight: FontWeight.w700,
// )),
// new TextSpan(
// text:
// patientInfo.gender.toString() == '1'
// ? 'Male'
// : 'Female'),
// ],
// ),
// ),
// ),
// ]),
// ],
//),
// ),
// Divider(color: Colors.grey)
//],
//),
//],
//),
// onTap: onTap,
// ),
//);
} }
convertDateFormat2(String str) { convertDateFormat2(String str) {
@ -233,12 +295,12 @@ class PatientCard extends StatelessWidget {
myBoxDecoration() { myBoxDecoration() {
return BoxDecoration( return BoxDecoration(
border: Border( border: Border(
bottom: BorderSide( top: BorderSide(
color: Color(0xffCCCCCC), color: Colors.green,
width: 0.5, width: 5,
),
), ),
), borderRadius: BorderRadius.circular(10));
);
} }
} }

@ -4,6 +4,7 @@ import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/custom_validation_error.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/soap_update/custom_validation_error.dart';
import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart'; import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
class DynamicElements extends StatefulWidget { class DynamicElements extends StatefulWidget {
@ -32,20 +33,15 @@ class _DynamicElementsState extends State<DynamicElements> {
var selectedDate = DateFormat.yMd().format(pickedDate); var selectedDate = DateFormat.yMd().format(pickedDate);
if (id == '_selectedFromDate') { if (id == '_selectedFromDate') {
// _fromDateController.text = selectedDate; // _fromDateController.text = selectedDate;
selectedDate = pickedDate.year.toString() + selectedDate = pickedDate.year.toString() +
"-" + "-" +
pickedDate.month.toString().padLeft(2, '0') + pickedDate.month.toString().padLeft(2, '0') +
"-" + "-" +
pickedDate.day.toString().padLeft(2, '0'); pickedDate.day.toString().padLeft(2, '0');
_fromDateController.text = selectedDate; _fromDateController.text = selectedDate;
} else { } else {
selectedDate = pickedDate.year.toString() + selectedDate = pickedDate.year.toString() +
"-" + "-" +
pickedDate.month.toString().padLeft(2, '0') + pickedDate.month.toString().padLeft(2, '0') +
@ -53,7 +49,7 @@ class _DynamicElementsState extends State<DynamicElements> {
pickedDate.day.toString().padLeft(2, '0'); pickedDate.day.toString().padLeft(2, '0');
_toDateController.text = selectedDate; _toDateController.text = selectedDate;
// _toDateController.text = selectedDate; // _toDateController.text = selectedDate;
} }
}); });
}); });
@ -61,11 +57,12 @@ class _DynamicElementsState extends State<DynamicElements> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final screenSize = MediaQuery final screenSize = MediaQuery.of(context).size;
.of(context) InputDecoration textFieldSelectorDecoration(
.size; {String hintText,
InputDecoration textFieldSelectorDecoration({String hintText, String selectedText,
String selectedText, bool isDropDown,IconData icon}) { bool isDropDown,
IconData icon}) {
return InputDecoration( return InputDecoration(
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0), borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
@ -85,9 +82,9 @@ class _DynamicElementsState extends State<DynamicElements> {
fontSize: 14, fontSize: 14,
color: Colors.grey.shade600, color: Colors.grey.shade600,
), ),
) );
;
} }
return LayoutBuilder( return LayoutBuilder(
builder: (ctx, constraints) { builder: (ctx, constraints) {
return Column( return Column(
@ -99,52 +96,63 @@ class _DynamicElementsState extends State<DynamicElements> {
SizedBox( SizedBox(
height: 10, height: 10,
), ),
AppTextFormField( Container(
onTap: ()=> _presentDatePicker('_selectedFromDate'), decoration: BoxDecoration(
hintText: TranslationBase.of(context).fromDate, borderRadius: BorderRadius.all(Radius.circular(6.0)),
controller: _fromDateController, border: Border.all(width: 1.0, color: HexColor("#CCCCCC"))),
inputFormatter: ONLY_DATE, padding: EdgeInsets.all(10),
onSaved: (value) { child: AppTextFormField(
if (_fromDateController.text.toString().trim().isEmpty) { borderColor: Colors.white,
widget._patientSearchFormValues.From = "0"; onTap: () => _presentDatePicker('_selectedFromDate'),
} else { hintText: TranslationBase.of(context).fromDate,
widget._patientSearchFormValues.From = _fromDateController.text.replaceAll("/", "-"); controller: _fromDateController,
} inputFormatter: ONLY_DATE,
}, onSaved: (value) {
readOnly: true, if (_fromDateController.text.toString().trim().isEmpty) {
widget._patientSearchFormValues.From = "0";
), } else {
widget._patientSearchFormValues.From =
_fromDateController.text.replaceAll("/", "-");
}
},
readOnly: true,
)),
SizedBox( SizedBox(
height: 5, height: 5,
), ),
if(widget._patientSearchFormValues.From == "0" && widget.isFormSubmitted) if (widget._patientSearchFormValues.From == "0" &&
CustomValidationError(),SizedBox( widget.isFormSubmitted)
CustomValidationError(),
SizedBox(
height: 10, height: 10,
), ),
AppTextFormField( Container(
readOnly: true, decoration: BoxDecoration(
hintText: TranslationBase border: Border.all(width: 1.0, color: HexColor("#CCCCCC")),
.of(context) borderRadius: BorderRadius.all(Radius.circular(6.0))),
.toDate, padding: EdgeInsets.all(10),
controller: _toDateController, child: AppTextFormField(
onTap: () { readOnly: true,
_presentDatePicker('_selectedToDate'); borderColor: Colors.white,
}, hintText: TranslationBase.of(context).toDate,
inputFormatter: ONLY_DATE, controller: _toDateController,
onSaved: (value) { onTap: () {
if (_toDateController.text _presentDatePicker('_selectedToDate');
.toString() },
.trim() inputFormatter: ONLY_DATE,
.isEmpty) { onSaved: (value) {
widget._patientSearchFormValues.To = "0"; if (_toDateController.text.toString().trim().isEmpty) {
} else { widget._patientSearchFormValues.To = "0";
widget._patientSearchFormValues.To = } else {
_toDateController.text.replaceAll("/", "-"); widget._patientSearchFormValues.To =
} _toDateController.text.replaceAll("/", "-");
}, }
), },
if(widget._patientSearchFormValues.To == "0" && widget.isFormSubmitted) )),
CustomValidationError(),SizedBox( if (widget._patientSearchFormValues.To == "0" &&
widget.isFormSubmitted)
CustomValidationError(),
SizedBox(
height: 10, height: 10,
), ),
], ],

Loading…
Cancel
Save