Merge branch 'soap_update' into 'development'

Soap update

See merge request Cloud_Solution/doctor_app_flutter!245
merge-requests/246/merge
Mohammad Aljammal 4 years ago
commit 748802af1d

@ -64,10 +64,9 @@ class _LandingPageState extends State<LandingPage> {
ShowCaseWidget(
builder: Builder(builder: (context) => DashboardScreen()),
),
MessagesScreen(),
//MyScheduleScreen(),
NewPrescriptionScreen(),
ServicesScreen()
// MessagesScreen(),
MyScheduleScreen(),
// ServicesScreen()
],
),
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:provider/provider.dart';
import '../custom_validation_error.dart';
class UpdateAllergiesWidget extends StatefulWidget {
final List<MySelectedAllergy> myAllergiesList;
@ -226,10 +228,11 @@ class _AddAllergiesState extends State<AddAllergies> {
MasterKeyModel _selectedAllergy;
TextEditingController remarkController = TextEditingController();
GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>();
bool isFormSubmitted = false;
InputDecoration textFieldSelectorDecoration(String hintText,
String selectedText, bool isDropDown,{IconData icon}) {
InputDecoration textFieldSelectorDecoration(
String hintText, String selectedText, bool isDropDown,
{IconData icon}) {
return InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCCCCCC), width: 2.0),
@ -328,18 +331,24 @@ class _AddAllergiesState extends State<AddAllergies> {
input.toLowerCase()) ||
suggestion.nameEn.toLowerCase()
.startsWith(input.toLowerCase()),
):TextField(
) : TextField(
decoration: textFieldSelectorDecoration(
TranslationBase
.of(context)
.selectAllergy,
_selectedAllergy != null
? projectViewModel.isArabic?_selectedAllergy.nameAr: _selectedAllergy.nameEn
: null, true, icon: EvaIcons.search),
? projectViewModel.isArabic
? _selectedAllergy.nameAr
: _selectedAllergy.nameEn
: null,
true,
icon: EvaIcons.search),
enabled: false,
),
),
),
if(isFormSubmitted && _selectedAllergy == null)
CustomValidationError(),
SizedBox(
height: 10,
),
@ -382,6 +391,8 @@ class _AddAllergiesState extends State<AddAllergies> {
),
),
),
if(isFormSubmitted && _selectedAllergySeverity == null)
CustomValidationError(),
SizedBox(
height: 10,
),
@ -410,12 +421,18 @@ class _AddAllergiesState extends State<AddAllergies> {
AppButton(
title: TranslationBase.of(context).add.toUpperCase(),
onPressed: () {
MySelectedAllergy mySelectedAllergy = new MySelectedAllergy(
remark: remarkController.text,
selectedAllergy: _selectedAllergy,
isChecked: true,
selectedAllergySeverity: _selectedAllergySeverity,);
widget.addAllergiesFun(mySelectedAllergy);
setState(() {
isFormSubmitted = true;
});
if(_selectedAllergy !=null && _selectedAllergySeverity !=null) {
MySelectedAllergy mySelectedAllergy = new 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/app_scaffold_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:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
@ -271,6 +272,9 @@ class _AddHistoryDialogState extends State<AddHistoryDialog> {
onModelReady: (model) async {
if (model.historyFamilyList.length == 0) {
await model.getMasterLookup(MasterKeysService.HistoryFamily);
setState(() {
});
}
},
builder: (_, model, w) => AppScaffold(
@ -313,62 +317,71 @@ class _AddHistoryDialogState extends State<AddHistoryDialog> {
},
scrollDirection: Axis.horizontal,
children: <Widget>[
MasterKeyCheckboxSearchWidget(
model: model,
masterList: model.historyFamilyList,
removeHistory: (history){
setState(() {
widget.removeHistory(history);
});
},
addHistory: (history){
setState(() {
createAndAddHistory(
history);
});
},
addSelectedHistories: (){
widget.addSelectedHistories();
},
isServiceSelected: (master) =>isServiceSelected(master),
NetworkBaseView(
baseViewModel: model,
child: MasterKeyCheckboxSearchWidget(
model: model,
masterList: model.historyFamilyList,
removeHistory: (history){
setState(() {
widget.removeHistory(history);
});
},
addHistory: (history){
setState(() {
createAndAddHistory(
history);
});
},
addSelectedHistories: (){
widget.addSelectedHistories();
},
isServiceSelected: (master) =>isServiceSelected(master),
),
),
MasterKeyCheckboxSearchWidget(
model: model,
masterList: model.mergeHistorySurgicalWithHistorySportList,
removeHistory: (history){
setState(() {
widget.removeHistory(history);
});
},
addHistory: (history){
setState(() {
createAndAddHistory(
history);
});
},
addSelectedHistories: (){
widget.addSelectedHistories();
},
isServiceSelected: (master) =>isServiceSelected(master),
NetworkBaseView(
baseViewModel: model,
child: MasterKeyCheckboxSearchWidget(
model: model,
masterList: model.mergeHistorySurgicalWithHistorySportList,
removeHistory: (history){
setState(() {
widget.removeHistory(history);
});
},
addHistory: (history){
setState(() {
createAndAddHistory(
history);
});
},
addSelectedHistories: (){
widget.addSelectedHistories();
},
isServiceSelected: (master) =>isServiceSelected(master),
),
),
MasterKeyCheckboxSearchWidget(
model: model,
masterList: model.historyMedicalList,
removeHistory: (history){
setState(() {
widget.removeHistory(history);
});
},
addHistory: (history){
setState(() {
createAndAddHistory(
history);
});
},
addSelectedHistories: (){
widget.addSelectedHistories();
},
isServiceSelected: (master) =>isServiceSelected(master),
NetworkBaseView(
baseViewModel: model,
child: MasterKeyCheckboxSearchWidget(
model: model,
masterList: model.historyMedicalList,
removeHistory: (history){
setState(() {
widget.removeHistory(history);
});
},
addHistory: (history){
setState(() {
createAndAddHistory(
history);
});
},
addSelectedHistories: (){
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:font_awesome_flutter/font_awesome_flutter.dart';
import 'custom_validation_error.dart';
class UpdateAssessmentPage extends StatefulWidget {
final Function changePageViewIndex;
List<MySelectedAssessment> mySelectedAssessmentList;
@ -399,6 +401,7 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> {
addSelectedAssessment: (MySelectedAssessment mySelectedAssessment,
bool isUpdate) async {
setState(() {
widget.mySelectedAssessmentList.add(mySelectedAssessment);
});
});
@ -413,7 +416,6 @@ class AddAssessmentDetails extends StatefulWidget {
final Function(MySelectedAssessment mySelectedAssessment, bool isUpdate) addSelectedAssessment;
final PatiantInformtion patientInfo;
final bool isUpdate;
AddAssessmentDetails(
{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 appointmentIdController = TextEditingController();
GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>();
bool isFormSubmitted = false;
@override
Widget build(BuildContext context) {
@ -549,6 +552,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
),
),
),
if(isFormSubmitted && widget.mySelectedAssessment
.selectedICD == null)
CustomValidationError(),
SizedBox(
height: 10,
),
@ -595,6 +601,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
),
),
),
if(isFormSubmitted && widget.mySelectedAssessment
.selectedDiagnosisCondition == null)
CustomValidationError(),
SizedBox(
height: 10,
),
@ -641,6 +650,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
),
),
),
if(isFormSubmitted && widget.mySelectedAssessment
.selectedDiagnosisType == null)
CustomValidationError(),
SizedBox(
height: 10,
),
@ -671,6 +683,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
title: (widget.isUpdate?TranslationBase.of(context).update:TranslationBase.of(context).add).toUpperCase(),
loading: model.state == ViewState.BusyLocal,
onPressed: () async {
setState(() {
isFormSubmitted = true;
});
widget.mySelectedAssessment.remark =
remarkController.text;
widget.mySelectedAssessment
@ -692,10 +707,6 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
model: model,
mySelectedAssessment: widget
.mySelectedAssessment);
} else {
helpers.showErrorToast(TranslationBase
.of(context)
.requiredMsg);
}
},
),
@ -752,7 +763,8 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
mySelectedAssessment.icdCode10ID = mySelectedAssessment.selectedICD.code;
if (!isUpdate) {
widget.mySelectedAssessmentList.add(mySelectedAssessment);
// widget.mySelectedAssessmentList.add(mySelectedAssessment);
widget.addSelectedAssessment(mySelectedAssessment,isUpdate);
}
Navigator.of(context).pop();
}

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

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

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

Loading…
Cancel
Save