routing added
parent
e3ccf398bc
commit
8bf2ca3a63
@ -0,0 +1,154 @@
|
|||||||
|
import 'package:autocomplete_textfield/autocomplete_textfield.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_allergy.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/screens/base/base_view.dart';
|
||||||
|
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
|
||||||
|
import 'package:doctor_app_flutter/utils/utils.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/bottom_sheet/custom_bottom_sheet_container.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
import '../../../soap_update/shared_soap_widgets/bottom_sheet_title.dart';
|
||||||
|
import 'master_key_checkbox_search_allergies_widget.dart';
|
||||||
|
|
||||||
|
class AddAllergies extends StatefulWidget {
|
||||||
|
final Function? addAllergiesFun;
|
||||||
|
final List<MySelectedAllergy>? myAllergiesList;
|
||||||
|
|
||||||
|
const AddAllergies({Key? key, this.addAllergiesFun, this.myAllergiesList}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_AddAllergiesState createState() => _AddAllergiesState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AddAllergiesState extends State<AddAllergies> {
|
||||||
|
List<MasterKeyModel> allergiesList = [];
|
||||||
|
List<MasterKeyModel> allergySeverityList = [];
|
||||||
|
List<MySelectedAllergy> myAllergiesListLocal = [];
|
||||||
|
|
||||||
|
@override
|
||||||
|
initState() {
|
||||||
|
super.initState();
|
||||||
|
myAllergiesListLocal = [...?widget.myAllergiesList];
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>();
|
||||||
|
bool isFormSubmitted = false;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
// baseViewModel: model,
|
||||||
|
isShowAppBar: true,
|
||||||
|
appBar: BottomSheetTitle(
|
||||||
|
title: TranslationBase.of(context).addAllergies,
|
||||||
|
),
|
||||||
|
body: Center(
|
||||||
|
child: Container(
|
||||||
|
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||||
|
SizedBox(
|
||||||
|
height: 10,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 16,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: FractionallySizedBox(
|
||||||
|
widthFactor: 0.9,
|
||||||
|
child: Center(
|
||||||
|
child: BaseView<SOAPViewModel>(
|
||||||
|
onModelReady: (model) async {},
|
||||||
|
builder: (_, model, w) {
|
||||||
|
return MasterKeyCheckboxSearchAllergiesWidget(
|
||||||
|
model: model,
|
||||||
|
masterList: model.allergiesList,
|
||||||
|
removeAllergy: (master) {
|
||||||
|
// setState(() {
|
||||||
|
// removeAllergyFromLocalList(master);
|
||||||
|
// });
|
||||||
|
},
|
||||||
|
addAllergy: (MySelectedAllergy mySelectedAllergy) {
|
||||||
|
addAllergyLocally(mySelectedAllergy);
|
||||||
|
},
|
||||||
|
addSelectedAllergy: () {
|
||||||
|
setState(() {
|
||||||
|
widget.addAllergiesFun!(myAllergiesListLocal);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
isServiceSelected: (master) => isServiceSelected(master),
|
||||||
|
getServiceSelectedAllergy: (master) => getSelectedAllergy(master),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: MediaQuery.of(context).size.height * 0.11,
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
bottomSheet:
|
||||||
|
// model.state != ViewState.Idle
|
||||||
|
// ?
|
||||||
|
// Container(
|
||||||
|
// height: 0,
|
||||||
|
// )
|
||||||
|
// :
|
||||||
|
CustomBottomSheetContainer(
|
||||||
|
label: TranslationBase.of(context).addAllergies,
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
widget.addAllergiesFun!(myAllergiesListLocal);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
isServiceSelected(MasterKeyModel masterKey) {
|
||||||
|
Iterable<MySelectedAllergy> allergy =
|
||||||
|
myAllergiesListLocal.where((element) => masterKey.id == element.selectedAllergy!.id && masterKey.typeId == element.selectedAllergy!.typeId && element.isChecked);
|
||||||
|
if (allergy.length > 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
removeAllergyFromLocalList(MasterKeyModel masterKey) {
|
||||||
|
myAllergiesListLocal.removeWhere((element) => element.selectedAllergy!.id == masterKey.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
MySelectedAllergy getSelectedAllergy(MasterKeyModel masterKey) {
|
||||||
|
Iterable<MySelectedAllergy> allergy =
|
||||||
|
myAllergiesListLocal.where((element) => masterKey.id == element.selectedAllergy!.id && masterKey.typeId == element.selectedAllergy!.typeId && element.isChecked);
|
||||||
|
if (allergy.length > 0) {
|
||||||
|
return allergy.first;
|
||||||
|
}
|
||||||
|
return MySelectedAllergy();
|
||||||
|
}
|
||||||
|
|
||||||
|
addAllergyLocally(MySelectedAllergy mySelectedAllergy) {
|
||||||
|
if (mySelectedAllergy.selectedAllergy == null) {
|
||||||
|
Utils.showErrorToast(TranslationBase.of(context).requiredMsg);
|
||||||
|
} else {
|
||||||
|
setState(() {
|
||||||
|
List<MySelectedAllergy> allergy =
|
||||||
|
// ignore: missing_return
|
||||||
|
myAllergiesListLocal.where((element) => mySelectedAllergy.selectedAllergy!.id == element.selectedAllergy!.id).toList();
|
||||||
|
|
||||||
|
if (allergy.isEmpty) {
|
||||||
|
myAllergiesListLocal.add(mySelectedAllergy);
|
||||||
|
} else {
|
||||||
|
allergy.first.selectedAllergy = mySelectedAllergy.selectedAllergy;
|
||||||
|
allergy.first.selectedAllergySeverity = mySelectedAllergy.selectedAllergySeverity;
|
||||||
|
allergy.first.remark = mySelectedAllergy.remark;
|
||||||
|
allergy.first.isChecked = mySelectedAllergy.isChecked;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,180 @@
|
|||||||
|
import 'package:doctor_app_flutter/config/size_config.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_allergy.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
|
||||||
|
import 'package:doctor_app_flutter/utils/utils.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/dialogs/master_key_dailog.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/expandable-widget-header-body.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
|
||||||
|
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
import '../../../soap_update/soap_utils.dart';
|
||||||
|
|
||||||
|
|
||||||
|
class AddAllergiesItem extends StatefulWidget {
|
||||||
|
final SOAPViewModel? model;
|
||||||
|
final Function(MasterKeyModel)? removeAllergy;
|
||||||
|
final Function(MySelectedAllergy mySelectedAllergy)? addAllergy;
|
||||||
|
final bool Function(MasterKeyModel)? isServiceSelected;
|
||||||
|
final MySelectedAllergy Function(MasterKeyModel)? getServiceSelectedAllergy;
|
||||||
|
final MasterKeyModel? item;
|
||||||
|
|
||||||
|
const AddAllergiesItem({Key? key, this.model, this.removeAllergy, this.addAllergy, this.isServiceSelected, this.getServiceSelectedAllergy, this.item}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_AddAllergiesItemState createState() => _AddAllergiesItemState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AddAllergiesItemState extends State<AddAllergiesItem> {
|
||||||
|
MasterKeyModel _selectedAllergySeverity = MasterKeyModel();
|
||||||
|
bool isSubmitted = false;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
ProjectViewModel projectViewModel = Provider.of(context);
|
||||||
|
|
||||||
|
bool isSelected = widget.isServiceSelected!(widget.item!);
|
||||||
|
MySelectedAllergy mySelectedAllergy = MySelectedAllergy();
|
||||||
|
if (isSelected) {
|
||||||
|
mySelectedAllergy = widget.getServiceSelectedAllergy!(widget.item!);
|
||||||
|
}
|
||||||
|
TextEditingController remarkController = TextEditingController(text: isSelected ? mySelectedAllergy.remark : null);
|
||||||
|
TextEditingController severityController = TextEditingController(
|
||||||
|
text: isSelected
|
||||||
|
? mySelectedAllergy.selectedAllergySeverity != null
|
||||||
|
? projectViewModel.isArabic
|
||||||
|
? mySelectedAllergy.selectedAllergySeverity!.nameAr
|
||||||
|
: mySelectedAllergy.selectedAllergySeverity!.nameEn
|
||||||
|
: null
|
||||||
|
: null);
|
||||||
|
return HeaderBodyExpandableNotifier(
|
||||||
|
headerWidget: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Checkbox(
|
||||||
|
value: widget.isServiceSelected!(widget.item!),
|
||||||
|
activeColor: Colors.red[800],
|
||||||
|
onChanged: (bool? newValue) {
|
||||||
|
onTapItem();
|
||||||
|
}),
|
||||||
|
InkWell(
|
||||||
|
onTap: onTapItem,
|
||||||
|
child: Container(
|
||||||
|
child: AppText(
|
||||||
|
projectViewModel.isArabic
|
||||||
|
? widget.item!.nameAr != ""
|
||||||
|
? widget.item!.nameAr!
|
||||||
|
: widget.item!.nameEn!
|
||||||
|
: widget.item!.nameEn!,
|
||||||
|
color: Color(0xFF575757),
|
||||||
|
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * (SizeConfig.isWidthLarge ? 3 : 3.8),
|
||||||
|
letterSpacing: -0.56,
|
||||||
|
),
|
||||||
|
width: MediaQuery.of(context).size.width * 0.55,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
if (mySelectedAllergy != null) {
|
||||||
|
setState(() {
|
||||||
|
mySelectedAllergy.isExpanded = mySelectedAllergy.isExpanded == null ? false : true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Icon(
|
||||||
|
(mySelectedAllergy != null ? mySelectedAllergy.isExpanded! : false) ? EvaIcons.arrowIosUpwardOutline : EvaIcons.arrowIosDownwardOutline,
|
||||||
|
color: Color(0xFF575757),
|
||||||
|
size: 20,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
bodyWidget: Center(
|
||||||
|
child: FractionallySizedBox(
|
||||||
|
widthFactor: 0.9,
|
||||||
|
child: Center(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
AppTextFieldCustom(
|
||||||
|
onClick: widget.model!.allergySeverityList != null
|
||||||
|
? () {
|
||||||
|
MasterKeyDailog dialog = MasterKeyDailog(
|
||||||
|
list: widget.model!.allergySeverityList,
|
||||||
|
selectedValue: mySelectedAllergy.selectedAllergySeverity!,
|
||||||
|
okText: TranslationBase.of(context).ok,
|
||||||
|
okFunction: (selectedValue) {
|
||||||
|
setState(() {
|
||||||
|
mySelectedAllergy.selectedAllergySeverity = selectedValue;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
showDialog(
|
||||||
|
barrierDismissible: false,
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return dialog;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
: () {},
|
||||||
|
isTextFieldHasSuffix: true,
|
||||||
|
hintText: TranslationBase.of(context).selectSeverity + "*",
|
||||||
|
enabled: false,
|
||||||
|
maxLines: 1,
|
||||||
|
minLines: 1,
|
||||||
|
height: Utils.getTextFieldHeight(),
|
||||||
|
validationError: mySelectedAllergy != null && mySelectedAllergy.selectedAllergySeverity == null && mySelectedAllergy.hasValidationError!
|
||||||
|
? TranslationBase.of(context).severityValidationError
|
||||||
|
: "",
|
||||||
|
controller: severityController,
|
||||||
|
onChanged: (value) {},
|
||||||
|
onFieldSubmitted: () {},
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 10,
|
||||||
|
),
|
||||||
|
AppTextFieldCustom(
|
||||||
|
hintText: TranslationBase.of(context).remarks,
|
||||||
|
controller: remarkController,
|
||||||
|
maxLines: 25,
|
||||||
|
minLines: 3,
|
||||||
|
hasBorder: true,
|
||||||
|
onChanged: (value) {
|
||||||
|
mySelectedAllergy.remark = value;
|
||||||
|
},
|
||||||
|
inputType: TextInputType.multiline,
|
||||||
|
onClick: () {},
|
||||||
|
onFieldSubmitted: () {},
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 10,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
isExpand: mySelectedAllergy != null ? mySelectedAllergy.isExpanded! : false,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
onTapItem() {
|
||||||
|
setState(() {
|
||||||
|
if (widget.isServiceSelected!(widget.item!)) {
|
||||||
|
widget.removeAllergy!(widget.item!);
|
||||||
|
} else {
|
||||||
|
MySelectedAllergy mySelectedAllergy = SoapUtils.generateMySelectedAllergy(allergy: widget.item, allergySeverity: _selectedAllergySeverity, remark: null, isChecked: true, isExpanded: true);
|
||||||
|
widget.addAllergy!(mySelectedAllergy);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,165 @@
|
|||||||
|
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/enum/view_state.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_allergy.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
|
||||||
|
import 'package:doctor_app_flutter/utils/utils.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/divider_with_spaces_around.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
import 'allergies_item.dart';
|
||||||
|
|
||||||
|
class MasterKeyCheckboxSearchAllergiesWidget extends StatefulWidget {
|
||||||
|
final SOAPViewModel model;
|
||||||
|
final Function() addSelectedAllergy;
|
||||||
|
final Function(MasterKeyModel) removeAllergy;
|
||||||
|
final Function(MySelectedAllergy mySelectedAllergy) addAllergy;
|
||||||
|
final bool Function(MasterKeyModel) isServiceSelected;
|
||||||
|
final MySelectedAllergy Function(MasterKeyModel) getServiceSelectedAllergy;
|
||||||
|
|
||||||
|
final List<MasterKeyModel> masterList;
|
||||||
|
final String? buttonName;
|
||||||
|
final String? hintSearchText;
|
||||||
|
|
||||||
|
MasterKeyCheckboxSearchAllergiesWidget(
|
||||||
|
{Key? key,
|
||||||
|
required this.model,
|
||||||
|
required this.addSelectedAllergy,
|
||||||
|
required this.removeAllergy,
|
||||||
|
required this.masterList,
|
||||||
|
required this.addAllergy,
|
||||||
|
required this.isServiceSelected,
|
||||||
|
this.buttonName,
|
||||||
|
this.hintSearchText,
|
||||||
|
required this.getServiceSelectedAllergy})
|
||||||
|
: super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_MasterKeyCheckboxSearchAllergiesWidgetState createState() => _MasterKeyCheckboxSearchAllergiesWidgetState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MasterKeyCheckboxSearchAllergiesWidgetState extends State<MasterKeyCheckboxSearchAllergiesWidget> {
|
||||||
|
List<MasterKeyModel> items = [];
|
||||||
|
|
||||||
|
TextEditingController filteredSearchController = TextEditingController();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
items.addAll(widget.masterList);
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Container(
|
||||||
|
height: Utils.getTextFieldHeight(),
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
AppTextFieldCustom(
|
||||||
|
hintText: TranslationBase.of(context).selectAllergy,
|
||||||
|
isTextFieldHasSuffix: true,
|
||||||
|
hasBorder: false,
|
||||||
|
controller: filteredSearchController,
|
||||||
|
onChanged: (value) {
|
||||||
|
// filterSearchResults(value);
|
||||||
|
},
|
||||||
|
onFieldSubmitted: () {
|
||||||
|
|
||||||
|
// widget.model.getMasterLookup(
|
||||||
|
// MasterKeysService.Allergies,
|
||||||
|
// searchKey: filteredSearchController.text);
|
||||||
|
// widget.model.getMasterLookup(
|
||||||
|
// MasterKeysService.AllergySeverity,
|
||||||
|
// searchKey: "");
|
||||||
|
},
|
||||||
|
// onFieldSubmitted: (value) {
|
||||||
|
// widget.model.getMasterLookup(MasterKeysService.Allergies!, searchKey: filteredSearchController.text!);
|
||||||
|
// widget.model.getMasterLookup(MasterKeysService.AllergySeverity, searchKey: "");
|
||||||
|
// },
|
||||||
|
suffixIcon: IconButton(
|
||||||
|
icon: Icon(
|
||||||
|
Icons.search,
|
||||||
|
color: Colors.black,
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
|
||||||
|
widget.model.getMasterLookup(MasterKeysService.Allergies, searchKey: filteredSearchController.text);
|
||||||
|
widget.model.getMasterLookup(MasterKeysService.AllergySeverity, searchKey: "");
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
DividerWithSpacesAround(),
|
||||||
|
SizedBox(
|
||||||
|
height: 10,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: FractionallySizedBox(
|
||||||
|
widthFactor: 0.9,
|
||||||
|
child: Container(
|
||||||
|
height: MediaQuery.of(context).size.height * 0.60,
|
||||||
|
child: widget.model.state == ViewState.Idle
|
||||||
|
? ListView.builder(
|
||||||
|
itemCount: widget.model.allergiesList.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
return AddAllergiesItem(
|
||||||
|
item: widget.model.allergiesList[index],
|
||||||
|
model: widget.model,
|
||||||
|
removeAllergy: widget.removeAllergy,
|
||||||
|
addAllergy: widget.addAllergy,
|
||||||
|
isServiceSelected: widget.isServiceSelected,
|
||||||
|
getServiceSelectedAllergy: widget.getServiceSelectedAllergy,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
)
|
||||||
|
: widget.model.state == ViewState.Busy
|
||||||
|
? Center(child: CircularProgressIndicator())
|
||||||
|
: Container(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 10,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void filterSearchResults(String query) {
|
||||||
|
List<MasterKeyModel> dummySearchList = [];
|
||||||
|
dummySearchList.addAll(widget.masterList);
|
||||||
|
if (query.isNotEmpty) {
|
||||||
|
List<MasterKeyModel> dummyListData = [];
|
||||||
|
dummySearchList.forEach((items) {
|
||||||
|
if (items.nameAr!.toLowerCase().contains(query.toLowerCase()) || items.nameEn!.toLowerCase().contains(query.toLowerCase())) {
|
||||||
|
dummyListData.add(items);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
setState(() {
|
||||||
|
items.clear();
|
||||||
|
items.addAll(dummyListData);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
setState(() {
|
||||||
|
items.clear();
|
||||||
|
items.addAll(widget.masterList);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,193 @@
|
|||||||
|
import 'package:doctor_app_flutter/config/size_config.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
|
||||||
|
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_allergy.dart';
|
||||||
|
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/remark_text.dart';
|
||||||
|
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/remove_button.dart';
|
||||||
|
import 'package:doctor_app_flutter/utils/utils.dart';
|
||||||
|
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
|
||||||
|
import 'package:doctor_app_flutter/widgets/shared/divider_with_spaces_around.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
import '../../../soap_update/shared_soap_widgets/SOAP_open_items.dart';
|
||||||
|
import 'add_allergies.dart';
|
||||||
|
|
||||||
|
// ignore: must_be_immutable
|
||||||
|
class UpdateAllergiesWidget extends StatefulWidget {
|
||||||
|
List<MySelectedAllergy>? myAllergiesList;
|
||||||
|
|
||||||
|
UpdateAllergiesWidget({Key? key, this.myAllergiesList});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_UpdateAllergiesWidgetState createState() => _UpdateAllergiesWidgetState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _UpdateAllergiesWidgetState extends State<UpdateAllergiesWidget> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
ProjectViewModel projectViewModel = Provider.of(context);
|
||||||
|
changeAllState() {
|
||||||
|
setState(() {
|
||||||
|
print(widget.myAllergiesList);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
SOAPOpenItems(
|
||||||
|
label: "${TranslationBase.of(context).addAllergies}",
|
||||||
|
onTap: () {
|
||||||
|
openAllergiesList(context, changeAllState, removeAllergy);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 20,
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(left: 15, right: 15, top: 15),
|
||||||
|
child: Column(
|
||||||
|
children: widget.myAllergiesList!.map((selectedAllergy) {
|
||||||
|
return Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
AppText(
|
||||||
|
projectViewModel.isArabic ? selectedAllergy.selectedAllergy!.nameAr! : selectedAllergy.selectedAllergy!.nameEn!.toUpperCase(),
|
||||||
|
textDecoration: selectedAllergy.isChecked! ? TextDecoration.none : TextDecoration.lineThrough,
|
||||||
|
bold: true,
|
||||||
|
color: Color(0xFF2B353E),
|
||||||
|
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.5,
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
letterSpacing: -0.48,
|
||||||
|
// fontHeight:0.18 ,
|
||||||
|
),
|
||||||
|
AppText(
|
||||||
|
projectViewModel.isArabic ? selectedAllergy.selectedAllergySeverity!.nameAr! : selectedAllergy.selectedAllergySeverity!.nameEn ?? ""!.toUpperCase(),
|
||||||
|
textDecoration: selectedAllergy.isChecked! ? TextDecoration.none : TextDecoration.lineThrough,
|
||||||
|
color: Color(0xFFCC9B14),
|
||||||
|
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3,
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
letterSpacing: -0.48,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
width: MediaQuery.of(context).size.width * 0.5,
|
||||||
|
),
|
||||||
|
if (selectedAllergy.isChecked)
|
||||||
|
RemoveButton(
|
||||||
|
onTap: () => removeAllergy(selectedAllergy),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 8),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
RemarkText(
|
||||||
|
remark: selectedAllergy.remark ?? "",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
DividerWithSpacesAround()
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 10,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}).toList()),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
removeAllergy(MySelectedAllergy mySelectedAllergy) {
|
||||||
|
List<MySelectedAllergy> allergy =
|
||||||
|
// ignore: missing_return
|
||||||
|
widget.myAllergiesList!
|
||||||
|
.where((element) => mySelectedAllergy.selectedAllergySeverity!.id == element.selectedAllergySeverity!.id && mySelectedAllergy.selectedAllergy!.id == element.selectedAllergy!.id)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
if (allergy.length > 0) {
|
||||||
|
if (allergy.first.isLocal) {
|
||||||
|
setState(() {
|
||||||
|
widget.myAllergiesList!.remove(allergy.first);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
setState(() {
|
||||||
|
allergy[0].isChecked = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
openAllergiesList(BuildContext context, Function changeParentState, removeAllergy) {
|
||||||
|
showModalBottomSheet(
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
isScrollControlled: true,
|
||||||
|
isDismissible: false,
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return AddAllergies(
|
||||||
|
myAllergiesList: widget.myAllergiesList,
|
||||||
|
addAllergiesFun: (List<MySelectedAllergy> mySelectedAllergy) {
|
||||||
|
bool isAllDataFilled = true;
|
||||||
|
mySelectedAllergy.forEach((element) {
|
||||||
|
if (element.selectedAllergySeverity == null) {
|
||||||
|
element.hasValidationError = true;
|
||||||
|
isAllDataFilled = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (isAllDataFilled) {
|
||||||
|
mySelectedAllergy.forEach((element) {
|
||||||
|
if (
|
||||||
|
widget.myAllergiesList!.singleWhere(
|
||||||
|
(it) => it.selectedAllergy!.id == element.selectedAllergy!.id,
|
||||||
|
orElse: () => MySelectedAllergy(),
|
||||||
|
).selectedAllergySeverity
|
||||||
|
==
|
||||||
|
null) {
|
||||||
|
widget.myAllergiesList!.add(element);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/// remove items.
|
||||||
|
List<MySelectedAllergy> removedList = [];
|
||||||
|
widget.myAllergiesList!.forEach((element) {
|
||||||
|
if (
|
||||||
|
mySelectedAllergy.singleWhere(
|
||||||
|
(it) => it.selectedAllergy!.id == element.selectedAllergy!.id,
|
||||||
|
orElse: () => MySelectedAllergy(),
|
||||||
|
)
|
||||||
|
.selectedAllergySeverity ==
|
||||||
|
null) {
|
||||||
|
removedList.add(element);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
removedList.forEach((element) {
|
||||||
|
removeAllergy(element);
|
||||||
|
});
|
||||||
|
changeParentState();
|
||||||
|
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
} else {
|
||||||
|
Utils.showErrorToast(TranslationBase.of(context).requiredMsg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue