Merge branch 'development' into feature-ucaf

merge-requests/246/head
mosazaid 5 years ago
commit db502b7f0d

@ -64,10 +64,9 @@ class _LandingPageState extends State<LandingPage> {
ShowCaseWidget( ShowCaseWidget(
builder: Builder(builder: (context) => DashboardScreen()), builder: Builder(builder: (context) => DashboardScreen()),
), ),
MessagesScreen(), // MessagesScreen(),
//MyScheduleScreen(), MyScheduleScreen(),
NewPrescriptionScreen(), // ServicesScreen()
ServicesScreen()
], ],
), ),
bottomNavigationBar: BottomNavBar(changeIndex: _changeCurrentTab), bottomNavigationBar: BottomNavBar(changeIndex: _changeCurrentTab),

@ -0,0 +1,33 @@
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:flutter/material.dart';
// ignore: must_be_immutable
class CustomValidationError extends StatelessWidget {
String error;
CustomValidationError({
Key key, this.error,
}) : super(key: key);
@override
Widget build(BuildContext context) {
if(error == null )
error = TranslationBase
.of(context)
.emptyMessage;
return Column(
children: [
SizedBox(
height: 2,
),
Container(
margin: EdgeInsets.symmetric(horizontal: 3),
child: AppText(error, color: Theme
.of(context)
.errorColor, fontSize: 14,),
),
],
);
}
}

@ -19,6 +19,8 @@ import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../custom_validation_error.dart';
class UpdateAllergiesWidget extends StatefulWidget { class UpdateAllergiesWidget extends StatefulWidget {
final List<MySelectedAllergy> myAllergiesList; final List<MySelectedAllergy> myAllergiesList;
@ -226,10 +228,11 @@ class _AddAllergiesState extends State<AddAllergies> {
MasterKeyModel _selectedAllergy; MasterKeyModel _selectedAllergy;
TextEditingController remarkController = TextEditingController(); TextEditingController remarkController = TextEditingController();
GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>(); GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>();
bool isFormSubmitted = false;
InputDecoration textFieldSelectorDecoration(
InputDecoration textFieldSelectorDecoration(String hintText, String hintText, String selectedText, bool isDropDown,
String selectedText, bool isDropDown,{IconData icon}) { {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),
@ -328,18 +331,24 @@ class _AddAllergiesState extends State<AddAllergies> {
input.toLowerCase()) || input.toLowerCase()) ||
suggestion.nameEn.toLowerCase() suggestion.nameEn.toLowerCase()
.startsWith(input.toLowerCase()), .startsWith(input.toLowerCase()),
):TextField( ) : TextField(
decoration: textFieldSelectorDecoration( decoration: textFieldSelectorDecoration(
TranslationBase TranslationBase
.of(context) .of(context)
.selectAllergy, .selectAllergy,
_selectedAllergy != null _selectedAllergy != null
? projectViewModel.isArabic?_selectedAllergy.nameAr: _selectedAllergy.nameEn ? projectViewModel.isArabic
: null, true, icon: EvaIcons.search), ? _selectedAllergy.nameAr
: _selectedAllergy.nameEn
: null,
true,
icon: EvaIcons.search),
enabled: false, enabled: false,
), ),
), ),
), ),
if(isFormSubmitted && _selectedAllergy == null)
CustomValidationError(),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
@ -382,6 +391,8 @@ class _AddAllergiesState extends State<AddAllergies> {
), ),
), ),
), ),
if(isFormSubmitted && _selectedAllergySeverity == null)
CustomValidationError(),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
@ -410,12 +421,18 @@ class _AddAllergiesState extends State<AddAllergies> {
AppButton( AppButton(
title: TranslationBase.of(context).add.toUpperCase(), title: TranslationBase.of(context).add.toUpperCase(),
onPressed: () { onPressed: () {
MySelectedAllergy mySelectedAllergy = new MySelectedAllergy( setState(() {
remark: remarkController.text, isFormSubmitted = true;
selectedAllergy: _selectedAllergy, });
isChecked: true, if(_selectedAllergy !=null && _selectedAllergySeverity !=null) {
selectedAllergySeverity: _selectedAllergySeverity,); MySelectedAllergy mySelectedAllergy = new MySelectedAllergy(
widget.addAllergiesFun(mySelectedAllergy); remark: remarkController.text,
selectedAllergy: _selectedAllergy,
isChecked: true,
selectedAllergySeverity: _selectedAllergySeverity,);
widget.addAllergiesFun(mySelectedAllergy);
}
}, },
), ),
] ]
@ -433,3 +450,4 @@ class _AddAllergiesState extends State<AddAllergies> {

@ -10,6 +10,7 @@ import 'package:doctor_app_flutter/widgets/shared/Text.dart';
import 'package:doctor_app_flutter/widgets/shared/TextFields.dart'; import 'package:doctor_app_flutter/widgets/shared/TextFields.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/master_key_checkbox_search_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/master_key_checkbox_search_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
@ -271,6 +272,9 @@ class _AddHistoryDialogState extends State<AddHistoryDialog> {
onModelReady: (model) async { onModelReady: (model) async {
if (model.historyFamilyList.length == 0) { if (model.historyFamilyList.length == 0) {
await model.getMasterLookup(MasterKeysService.HistoryFamily); await model.getMasterLookup(MasterKeysService.HistoryFamily);
setState(() {
});
} }
}, },
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
@ -313,62 +317,71 @@ class _AddHistoryDialogState extends State<AddHistoryDialog> {
}, },
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
children: <Widget>[ children: <Widget>[
MasterKeyCheckboxSearchWidget( NetworkBaseView(
model: model, baseViewModel: model,
masterList: model.historyFamilyList, child: MasterKeyCheckboxSearchWidget(
removeHistory: (history){ model: model,
setState(() { masterList: model.historyFamilyList,
widget.removeHistory(history); removeHistory: (history){
}); setState(() {
}, widget.removeHistory(history);
addHistory: (history){ });
setState(() { },
createAndAddHistory( addHistory: (history){
history); setState(() {
}); createAndAddHistory(
}, history);
addSelectedHistories: (){ });
widget.addSelectedHistories(); },
}, addSelectedHistories: (){
isServiceSelected: (master) =>isServiceSelected(master), widget.addSelectedHistories();
},
isServiceSelected: (master) =>isServiceSelected(master),
),
), ),
MasterKeyCheckboxSearchWidget( NetworkBaseView(
model: model, baseViewModel: model,
masterList: model.mergeHistorySurgicalWithHistorySportList, child: MasterKeyCheckboxSearchWidget(
removeHistory: (history){ model: model,
setState(() { masterList: model.mergeHistorySurgicalWithHistorySportList,
widget.removeHistory(history); removeHistory: (history){
}); setState(() {
}, widget.removeHistory(history);
addHistory: (history){ });
setState(() { },
createAndAddHistory( addHistory: (history){
history); setState(() {
}); createAndAddHistory(
}, history);
addSelectedHistories: (){ });
widget.addSelectedHistories(); },
}, addSelectedHistories: (){
isServiceSelected: (master) =>isServiceSelected(master), widget.addSelectedHistories();
},
isServiceSelected: (master) =>isServiceSelected(master),
),
), ),
MasterKeyCheckboxSearchWidget( NetworkBaseView(
model: model, baseViewModel: model,
masterList: model.historyMedicalList, child: MasterKeyCheckboxSearchWidget(
removeHistory: (history){ model: model,
setState(() { masterList: model.historyMedicalList,
widget.removeHistory(history); removeHistory: (history){
}); setState(() {
}, widget.removeHistory(history);
addHistory: (history){ });
setState(() { },
createAndAddHistory( addHistory: (history){
history); setState(() {
}); createAndAddHistory(
}, history);
addSelectedHistories: (){ });
widget.addSelectedHistories(); },
}, addSelectedHistories: (){
isServiceSelected: (master) =>isServiceSelected(master), widget.addSelectedHistories();
},
isServiceSelected: (master) =>isServiceSelected(master),
),
), ),
], ],
), ),

@ -23,6 +23,8 @@ import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'custom_validation_error.dart';
class UpdateAssessmentPage extends StatefulWidget { class UpdateAssessmentPage extends StatefulWidget {
final Function changePageViewIndex; final Function changePageViewIndex;
List<MySelectedAssessment> mySelectedAssessmentList; List<MySelectedAssessment> mySelectedAssessmentList;
@ -399,6 +401,7 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> {
addSelectedAssessment: (MySelectedAssessment mySelectedAssessment, addSelectedAssessment: (MySelectedAssessment mySelectedAssessment,
bool isUpdate) async { bool isUpdate) async {
setState(() { setState(() {
widget.mySelectedAssessmentList.add(mySelectedAssessment);
}); });
}); });
@ -413,7 +416,6 @@ class AddAssessmentDetails extends StatefulWidget {
final Function(MySelectedAssessment mySelectedAssessment, bool isUpdate) addSelectedAssessment; final Function(MySelectedAssessment mySelectedAssessment, bool isUpdate) addSelectedAssessment;
final PatiantInformtion patientInfo; final PatiantInformtion patientInfo;
final bool isUpdate; final bool isUpdate;
AddAssessmentDetails( AddAssessmentDetails(
{Key key, this.mySelectedAssessment, this.addSelectedAssessment, this.patientInfo, this.isUpdate = false, this.mySelectedAssessmentList}); {Key key, this.mySelectedAssessment, this.addSelectedAssessment, this.patientInfo, this.isUpdate = false, this.mySelectedAssessmentList});
@ -426,6 +428,7 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
TextEditingController remarkController = TextEditingController(); TextEditingController remarkController = TextEditingController();
TextEditingController appointmentIdController = TextEditingController(); TextEditingController appointmentIdController = TextEditingController();
GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>(); GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>();
bool isFormSubmitted = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -549,6 +552,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
), ),
), ),
), ),
if(isFormSubmitted && widget.mySelectedAssessment
.selectedICD == null)
CustomValidationError(),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
@ -595,6 +601,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
), ),
), ),
), ),
if(isFormSubmitted && widget.mySelectedAssessment
.selectedDiagnosisCondition == null)
CustomValidationError(),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
@ -641,6 +650,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
), ),
), ),
), ),
if(isFormSubmitted && widget.mySelectedAssessment
.selectedDiagnosisType == null)
CustomValidationError(),
SizedBox( SizedBox(
height: 10, height: 10,
), ),
@ -671,6 +683,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
title: (widget.isUpdate?TranslationBase.of(context).update:TranslationBase.of(context).add).toUpperCase(), title: (widget.isUpdate?TranslationBase.of(context).update:TranslationBase.of(context).add).toUpperCase(),
loading: model.state == ViewState.BusyLocal, loading: model.state == ViewState.BusyLocal,
onPressed: () async { onPressed: () async {
setState(() {
isFormSubmitted = true;
});
widget.mySelectedAssessment.remark = widget.mySelectedAssessment.remark =
remarkController.text; remarkController.text;
widget.mySelectedAssessment widget.mySelectedAssessment
@ -692,10 +707,6 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
model: model, model: model,
mySelectedAssessment: widget mySelectedAssessment: widget
.mySelectedAssessment); .mySelectedAssessment);
} else {
helpers.showErrorToast(TranslationBase
.of(context)
.requiredMsg);
} }
}, },
), ),
@ -752,7 +763,8 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
mySelectedAssessment.icdCode10ID = mySelectedAssessment.selectedICD.code; mySelectedAssessment.icdCode10ID = mySelectedAssessment.selectedICD.code;
if (!isUpdate) { if (!isUpdate) {
widget.mySelectedAssessmentList.add(mySelectedAssessment); // widget.mySelectedAssessmentList.add(mySelectedAssessment);
widget.addSelectedAssessment(mySelectedAssessment,isUpdate);
} }
Navigator.of(context).pop(); Navigator.of(context).pop();
} }

@ -315,7 +315,7 @@ class _UpdateObjectivePageState extends State<UpdateObjectivePage> {
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
maxLines: 25, maxLines: 25,
minLines: 4, minLines: 4,
controller: remarksController, // controller: remarksController,
validator: (value) { validator: (value) {
if (value == null) if (value == null)
return TranslationBase.of(context) return TranslationBase.of(context)

@ -113,7 +113,7 @@ class _UpdatePlanPageState extends State<UpdatePlanPage> {
), ),
Column( Column(
children: [ children: [
if(model.patientProgressNoteList.isEmpty) if(model.patientProgressNoteList.isEmpty || progressNoteController.text !='')
Container( Container(
margin: margin:
EdgeInsets.only(left: 10, right: 10, top: 15), EdgeInsets.only(left: 10, right: 10, top: 15),
@ -140,7 +140,7 @@ class _UpdatePlanPageState extends State<UpdatePlanPage> {
SizedBox( SizedBox(
height: 20, height: 20,
), ),
if (progressNoteController.text.isNotEmpty) if (progressNoteController.text !='')
Container( Container(
margin: margin:
EdgeInsets.only(left: 5, right: 5, top: 15), EdgeInsets.only(left: 5, right: 5, top: 15),
@ -350,6 +350,9 @@ class _UpdatePlanPageState extends State<UpdatePlanPage> {
AppButton( AppButton(
title: "Add".toUpperCase(), title: "Add".toUpperCase(),
onPressed: () { onPressed: () {
setState(() {
print(progressNoteController.text);
});
Navigator.of(context).pop(); Navigator.of(context).pop();
}, },
), ),

@ -53,71 +53,68 @@ class _MasterKeyCheckboxSearchWidgetState extends State<MasterKeyCheckboxSearchW
return Container( return Container(
child: Column( child: Column(
children: [ children: [
NetworkBaseView( Container(
baseViewModel: widget.model, height: MediaQuery.of(context).size.height * 0.5,
child: Container( child: Center(
height: MediaQuery.of(context).size.height * 0.5, child: Container(
child: Center( margin: EdgeInsets.only(top: 15),
child: Container( decoration: BoxDecoration(
margin: EdgeInsets.only(top: 15), borderRadius: BorderRadius.circular(12),
decoration: BoxDecoration( color: Colors.white),
borderRadius: BorderRadius.circular(12), child: ListView(
color: Colors.white), children: [
child: ListView( TextFields(
children: [ hintText: widget.hintSearchText ?? TranslationBase
TextFields( .of(context)
hintText: widget.hintSearchText ?? TranslationBase .searchHistory,
.of(context) suffixIcon: EvaIcons.search,
.searchHistory, onChanged: (value) {
suffixIcon: EvaIcons.search, filterSearchResults(value);
onChanged: (value) { },
filterSearchResults(value); ),
}, SizedBox(height: 15,),
), Column(
SizedBox(height: 15,), children: items.map((historyInfo) {
Column( return Column(
children: items.map((historyInfo) { children: [
return Column( Row(
children: [ children: [
Row( Checkbox(
children: [ value:
Checkbox( widget.isServiceSelected(historyInfo),
value: activeColor: Colors.red[800],
widget.isServiceSelected(historyInfo), onChanged: (bool newValue) {
activeColor: Colors.red[800], setState(() {
onChanged: (bool newValue) { if (widget
setState(() { .isServiceSelected(historyInfo)) {
if (widget widget.removeHistory(historyInfo);
.isServiceSelected(historyInfo)) { } else {
widget.removeHistory(historyInfo); widget.addHistory(historyInfo);
} else { }
widget.addHistory(historyInfo); });
} }),
}); Expanded(
}), child: Padding(
Expanded( padding: const EdgeInsets.symmetric(
child: Padding( horizontal: 10, vertical: 0),
padding: const EdgeInsets.symmetric( child: Texts(projectViewModel.isArabic
horizontal: 10, vertical: 0), ? historyInfo.nameAr!=""?historyInfo.nameAr:historyInfo.nameEn
child: Texts(projectViewModel.isArabic : historyInfo.nameEn,
? historyInfo.nameAr!=""?historyInfo.nameAr:historyInfo.nameEn variant: "bodyText",
: historyInfo.nameEn, bold: true,
variant: "bodyText", color: Colors.black),
bold: true,
color: Colors.black),
),
), ),
], ),
), ],
DividerWithSpacesAround(), ),
], DividerWithSpacesAround(),
); ],
}).toList(), );
), }).toList(),
], ),
), ],
)), ),
), )),
), ),
SizedBox( SizedBox(
height: 10, height: 10,

Loading…
Cancel
Save