|
|
|
|
@ -1,9 +1,12 @@
|
|
|
|
|
import 'package:autocomplete_textfield/autocomplete_textfield.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/client/base_app_client.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/config/config.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/config/size_config.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/get_medication_response_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/post_prescrition_req_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/model/Prescription_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/viewModel/medicine_view_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/models/livecare/transfer_to_admin.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
|
|
|
|
|
@ -16,12 +19,15 @@ import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/util/helpers.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/widgets/patients/dynamic_elements.dart';
|
|
|
|
|
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_buttons_widget.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/dialogs/dailog-list-select.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.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:hexcolor/hexcolor.dart';
|
|
|
|
|
import 'package:intl/intl.dart';
|
|
|
|
|
@ -104,9 +110,18 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
TextEditingController instructionController = TextEditingController();
|
|
|
|
|
DateTime selectedDate;
|
|
|
|
|
dynamic selectedDrug;
|
|
|
|
|
GetMedicationResponseModel _selectedMedication;
|
|
|
|
|
GlobalKey key =
|
|
|
|
|
new GlobalKey<AutoCompleteTextFieldState<GetMedicationResponseModel>>();
|
|
|
|
|
|
|
|
|
|
TextEditingController drugIdController = TextEditingController();
|
|
|
|
|
TextEditingController doseController = TextEditingController();
|
|
|
|
|
final searchController = TextEditingController();
|
|
|
|
|
|
|
|
|
|
var notesList;
|
|
|
|
|
var filteredNotesList;
|
|
|
|
|
String textSeartch = "Amoxicillin";
|
|
|
|
|
|
|
|
|
|
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
|
|
|
|
|
final double spaceBetweenTextFileds = 12;
|
|
|
|
|
List<dynamic> referToList;
|
|
|
|
|
@ -165,6 +180,24 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
dynamic route7 = {"id": 27, "name": "In Both EYES"};
|
|
|
|
|
dynamic route8 = {"id": 28, "name": "In Both Ears"};
|
|
|
|
|
dynamic route9 = {"id": 32, "name": "Intramuscular"};
|
|
|
|
|
dynamic route10 = {"id": 60, "name": "TRANSDERMAL"};
|
|
|
|
|
dynamic route11 = {"id": 59, "name": "OROPHARYNGEAL"};
|
|
|
|
|
dynamic route12 = {"id": 15, "name": "for INJECTION"};
|
|
|
|
|
dynamic route13 = {"id": 58, "name": "SUBCUTANEOUS"};
|
|
|
|
|
dynamic route14 = {"id": 57, "name": "NASOGASTRIC"};
|
|
|
|
|
dynamic route15 = {"id": 56, "name": "IRRIGATION"};
|
|
|
|
|
dynamic route16 = {"id": 55, "name": "INTRAVITREAL"};
|
|
|
|
|
dynamic route17 = {"id": 54, "name": "INTRAVENOUS BOLUS"};
|
|
|
|
|
dynamic route18 = {"id": 51, "name": "EPIDURAL"};
|
|
|
|
|
dynamic route19 = {"id": 47, "name": "Parenteral"};
|
|
|
|
|
dynamic route20 = {"id": 43, "name": "IM"};
|
|
|
|
|
dynamic route21 = {"id": 42, "name": "IV"};
|
|
|
|
|
dynamic route22 = {"id": 41, "name": "Sublingual"};
|
|
|
|
|
dynamic route23 = {"id": 40, "name": "For Nebulization"};
|
|
|
|
|
dynamic route24 = {"id": 39, "name": "Nasal"};
|
|
|
|
|
dynamic route25 = {"id": 37, "name": "Inserted into Vagina"};
|
|
|
|
|
dynamic route26 = {"id": 36, "name": "Inserted into Rectum"};
|
|
|
|
|
dynamic route27 = {"id": 31, "name": "In Each Nostril"};
|
|
|
|
|
dynamic frequency1 = {"id": 1, "name": "2 Times a day"};
|
|
|
|
|
dynamic frequency2 = {"id": 2, "name": "3 Times a day"};
|
|
|
|
|
dynamic frequency3 = {"id": 3, "name": "4 Times a day"};
|
|
|
|
|
@ -258,6 +291,24 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
routeList.add(route7);
|
|
|
|
|
routeList.add(route8);
|
|
|
|
|
routeList.add(route9);
|
|
|
|
|
routeList.add(route10);
|
|
|
|
|
routeList.add(route11);
|
|
|
|
|
routeList.add(route12);
|
|
|
|
|
routeList.add(route13);
|
|
|
|
|
routeList.add(route14);
|
|
|
|
|
routeList.add(route15);
|
|
|
|
|
routeList.add(route16);
|
|
|
|
|
routeList.add(route17);
|
|
|
|
|
routeList.add(route18);
|
|
|
|
|
routeList.add(route19);
|
|
|
|
|
routeList.add(route20);
|
|
|
|
|
routeList.add(route21);
|
|
|
|
|
routeList.add(route22);
|
|
|
|
|
routeList.add(route23);
|
|
|
|
|
routeList.add(route24);
|
|
|
|
|
routeList.add(route25);
|
|
|
|
|
routeList.add(route26);
|
|
|
|
|
routeList.add(route27);
|
|
|
|
|
strengthList.add(strength1);
|
|
|
|
|
strengthList.add(strength2);
|
|
|
|
|
strengthList.add(strength3);
|
|
|
|
|
@ -295,15 +346,17 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
ListSelectDialog drugDialog;
|
|
|
|
|
final screenSize = MediaQuery.of(context).size;
|
|
|
|
|
// final routeArgs = ModalRoute.of(context).settings.arguments as Map;
|
|
|
|
|
// patient = routeArgs['patient'];
|
|
|
|
|
|
|
|
|
|
return BaseView<PrescriptionViewModel>(
|
|
|
|
|
onModelReady: (model) => model.getDrugs(),
|
|
|
|
|
builder:
|
|
|
|
|
(BuildContext context, PrescriptionViewModel model, Widget child) =>
|
|
|
|
|
NetworkBaseView(
|
|
|
|
|
return BaseView<MedicineViewModel>(
|
|
|
|
|
onModelReady: (model) async {
|
|
|
|
|
await model.getMedicationList();
|
|
|
|
|
},
|
|
|
|
|
builder: (BuildContext context, MedicineViewModel model, Widget child) =>
|
|
|
|
|
NetworkBaseView(
|
|
|
|
|
baseViewModel: model,
|
|
|
|
|
child: DraggableScrollableSheet(
|
|
|
|
|
initialChildSize: 0.90,
|
|
|
|
|
@ -334,48 +387,73 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
//mainAxisAlignment: MainAxisAlignment.end,
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
height: screenSize.height * 0.070,
|
|
|
|
|
height: MediaQuery.of(context).size.height *
|
|
|
|
|
0.070,
|
|
|
|
|
child: InkWell(
|
|
|
|
|
onTap: model.drugsList != null &&
|
|
|
|
|
model.drugsList.length > 0
|
|
|
|
|
onTap: model.allMedicationList != null
|
|
|
|
|
? () {
|
|
|
|
|
ListSelectDialog dialog =
|
|
|
|
|
ListSelectDialog(
|
|
|
|
|
list: model.drugsList,
|
|
|
|
|
attributeName: 'GenericName',
|
|
|
|
|
attributeValueId: 'ItemId',
|
|
|
|
|
okText:
|
|
|
|
|
TranslationBase.of(context)
|
|
|
|
|
.ok,
|
|
|
|
|
okFunction: (selectedValue) {
|
|
|
|
|
setState(() {
|
|
|
|
|
selectedDrug = selectedValue;
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
showDialog(
|
|
|
|
|
barrierDismissible: false,
|
|
|
|
|
context: context,
|
|
|
|
|
builder: (BuildContext context) {
|
|
|
|
|
return dialog;
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
setState(() {
|
|
|
|
|
_selectedMedication = null;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
: null,
|
|
|
|
|
child: TextField(
|
|
|
|
|
decoration: textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context)
|
|
|
|
|
.searchMedicine,
|
|
|
|
|
selectedDrug != null
|
|
|
|
|
? selectedDrug['GenericName']
|
|
|
|
|
: null,
|
|
|
|
|
true,
|
|
|
|
|
suffixIcon: Icon(
|
|
|
|
|
Icons.search,
|
|
|
|
|
color: Colors.black,
|
|
|
|
|
)),
|
|
|
|
|
enabled: false,
|
|
|
|
|
),
|
|
|
|
|
child: _selectedMedication == null
|
|
|
|
|
? AutoCompleteTextField<
|
|
|
|
|
GetMedicationResponseModel>(
|
|
|
|
|
decoration:
|
|
|
|
|
textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context)
|
|
|
|
|
.searchMedicineNameHere,
|
|
|
|
|
_selectedMedication != null
|
|
|
|
|
? _selectedMedication
|
|
|
|
|
.genericName
|
|
|
|
|
: null,
|
|
|
|
|
true,
|
|
|
|
|
),
|
|
|
|
|
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(
|
|
|
|
|
decoration:
|
|
|
|
|
textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context)
|
|
|
|
|
.searchMedicineNameHere,
|
|
|
|
|
_selectedMedication != null
|
|
|
|
|
? _selectedMedication
|
|
|
|
|
.description +
|
|
|
|
|
('${_selectedMedication.genericName}')
|
|
|
|
|
: null,
|
|
|
|
|
true,
|
|
|
|
|
),
|
|
|
|
|
enabled: false,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
@ -455,47 +533,21 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
Container(
|
|
|
|
|
width:
|
|
|
|
|
MediaQuery.of(context).size.width *
|
|
|
|
|
0.5,
|
|
|
|
|
child: InkWell(
|
|
|
|
|
onTap: strengthList != null
|
|
|
|
|
? () {
|
|
|
|
|
ListSelectDialog dialog =
|
|
|
|
|
ListSelectDialog(
|
|
|
|
|
list: strengthList,
|
|
|
|
|
attributeName: 'name',
|
|
|
|
|
attributeValueId: 'id',
|
|
|
|
|
okText: TranslationBase.of(
|
|
|
|
|
context)
|
|
|
|
|
.ok,
|
|
|
|
|
okFunction:
|
|
|
|
|
(selectedValue) {
|
|
|
|
|
setState(() {
|
|
|
|
|
strength =
|
|
|
|
|
selectedValue;
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
showDialog(
|
|
|
|
|
barrierDismissible: false,
|
|
|
|
|
context: context,
|
|
|
|
|
builder:
|
|
|
|
|
(BuildContext context) {
|
|
|
|
|
return dialog;
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
: null,
|
|
|
|
|
child: TextField(
|
|
|
|
|
decoration:
|
|
|
|
|
textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context)
|
|
|
|
|
.strength,
|
|
|
|
|
strength != null
|
|
|
|
|
? strength['name']
|
|
|
|
|
: null,
|
|
|
|
|
true),
|
|
|
|
|
enabled: false,
|
|
|
|
|
),
|
|
|
|
|
0.650,
|
|
|
|
|
child: TextFields(
|
|
|
|
|
hintText: TranslationBase.of(context)
|
|
|
|
|
.strength,
|
|
|
|
|
controller: strengthController,
|
|
|
|
|
keyboardType: TextInputType.number,
|
|
|
|
|
validator: (value) {
|
|
|
|
|
if (value.isEmpty &&
|
|
|
|
|
strengthController.text.length >
|
|
|
|
|
4)
|
|
|
|
|
return TranslationBase.of(context)
|
|
|
|
|
.emptyMessage;
|
|
|
|
|
else
|
|
|
|
|
return null;
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
@ -504,7 +556,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
Container(
|
|
|
|
|
width:
|
|
|
|
|
MediaQuery.of(context).size.width *
|
|
|
|
|
0.40,
|
|
|
|
|
0.250,
|
|
|
|
|
child: InkWell(
|
|
|
|
|
onTap: unitsList != null
|
|
|
|
|
? () {
|
|
|
|
|
@ -817,8 +869,9 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
indication == null ||
|
|
|
|
|
doseTime == null ||
|
|
|
|
|
duration == null ||
|
|
|
|
|
selectedDrug == null ||
|
|
|
|
|
selectedDate == null) {
|
|
|
|
|
selectedDate == null ||
|
|
|
|
|
units == null ||
|
|
|
|
|
_selectedMedication == null) {
|
|
|
|
|
DrAppToastMsg.showErrorToast(
|
|
|
|
|
"Please Fill All Fields");
|
|
|
|
|
return;
|
|
|
|
|
@ -826,7 +879,32 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
|
|
|
|
|
if (formKey.currentState.validate()) {
|
|
|
|
|
Navigator.pop(context);
|
|
|
|
|
openDrugToDrug();
|
|
|
|
|
{
|
|
|
|
|
postProcedure(
|
|
|
|
|
dose: strengthController.text,
|
|
|
|
|
doseUnit:
|
|
|
|
|
units['id'].toString(),
|
|
|
|
|
patient: widget.patient,
|
|
|
|
|
doseTimeIn:
|
|
|
|
|
doseTime['id'].toString(),
|
|
|
|
|
model: widget.model,
|
|
|
|
|
duration:
|
|
|
|
|
duration['id'].toString(),
|
|
|
|
|
frequency: frequency['id']
|
|
|
|
|
.toString(),
|
|
|
|
|
route: route['id'].toString(),
|
|
|
|
|
drugId: _selectedMedication
|
|
|
|
|
.itemId
|
|
|
|
|
.toString(),
|
|
|
|
|
strength:
|
|
|
|
|
strengthController.text,
|
|
|
|
|
indication:
|
|
|
|
|
indicationController.text,
|
|
|
|
|
instruction:
|
|
|
|
|
instructionController
|
|
|
|
|
.text,
|
|
|
|
|
doseTime: selectedDate);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
// Navigator.push(
|
|
|
|
|
@ -922,7 +1000,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
title: TranslationBase.of(context).addMedication,
|
|
|
|
|
onPressed: () {
|
|
|
|
|
postProcedure(
|
|
|
|
|
dose: strength['id'].toString(),
|
|
|
|
|
dose: strengthController.text,
|
|
|
|
|
doseUnit: units['id'].toString(),
|
|
|
|
|
patient: widget.patient,
|
|
|
|
|
doseTimeIn: doseTime['id'].toString(),
|
|
|
|
|
@ -931,7 +1009,7 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
frequency: frequency['id'].toString(),
|
|
|
|
|
route: route['id'].toString(),
|
|
|
|
|
drugId: selectedDrug['ItemId'].toString(),
|
|
|
|
|
strength: strength['id'].toString(),
|
|
|
|
|
strength: strengthController.text,
|
|
|
|
|
indication: indicationController.text,
|
|
|
|
|
instruction: instructionController.text,
|
|
|
|
|
doseTime: selectedDate);
|
|
|
|
|
@ -945,4 +1023,41 @@ class _PrescriptionFormWidgetState extends State<PrescriptionFormWidget> {
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// searchData(String str, PrescriptionViewModel model) {
|
|
|
|
|
// var strExist = str.length > 0 ? true : false;
|
|
|
|
|
//
|
|
|
|
|
// if (strExist) {
|
|
|
|
|
// filteredNotesList = null;
|
|
|
|
|
// filteredNotesList = model.drugsList
|
|
|
|
|
// .where((note) =>
|
|
|
|
|
// note["GenericName"].toString().contains(str.toUpperCase()))
|
|
|
|
|
// .toList();
|
|
|
|
|
// setState(() {
|
|
|
|
|
// notesList = filteredNotesList;
|
|
|
|
|
// });
|
|
|
|
|
// } else {
|
|
|
|
|
// setState(() {
|
|
|
|
|
// notesList = model.drugsList;
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
searchMedicine(context, PrescriptionViewModel model, String str) async {
|
|
|
|
|
FocusScope.of(context).unfocus();
|
|
|
|
|
// if (searchController.text.isEmpty()) {
|
|
|
|
|
// helpers.showErrorToast(TranslationBase.of(context).typeMedicineName);
|
|
|
|
|
// //"Type Medicine Name")
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
if (searchController.text.length < 0) {
|
|
|
|
|
helpers.showErrorToast(TranslationBase.of(context).moreThan3Letter);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GifLoaderDialogUtils.showMyDialog(context);
|
|
|
|
|
|
|
|
|
|
await model.getDrugs(drugName: searchController.text);
|
|
|
|
|
GifLoaderDialogUtils.hideDialog(context);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|