You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
394 lines
20 KiB
Dart
394 lines
20 KiB
Dart
import 'package:doctor_app_flutter/config/size_config.dart';
|
|
import 'package:doctor_app_flutter/core/viewModel/patient-ucaf-viewmodel.dart';
|
|
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
|
|
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
|
|
import 'package:doctor_app_flutter/screens/base/base_view.dart';
|
|
import 'package:doctor_app_flutter/utils/utils.dart';
|
|
import 'package:doctor_app_flutter/utils/translations_delegate_base.dart';
|
|
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
|
|
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
|
|
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
|
|
import '../../../../widgets/shared/errors/error_message.dart';
|
|
|
|
class UCAFInputScreen extends StatefulWidget {
|
|
final PatiantInformtion patient;
|
|
final Function changeLoadingState;
|
|
|
|
UCAFInputScreen(this.patient, {this.changeLoadingState});
|
|
|
|
@override
|
|
_UCAFInputScreenState createState() => _UCAFInputScreenState(this.patient);
|
|
}
|
|
|
|
class _UCAFInputScreenState extends State<UCAFInputScreen> {
|
|
final PatiantInformtion patient;
|
|
|
|
_UCAFInputScreenState(this.patient);
|
|
|
|
bool _inPatient = false;
|
|
bool _emergencyCase = false;
|
|
final _durationOfIllnessController = TextEditingController();
|
|
final _additionalComplaintsController = TextEditingController();
|
|
final _otherController = TextEditingController();
|
|
final _howController = TextEditingController();
|
|
final _whenController = TextEditingController();
|
|
final _whereController = TextEditingController();
|
|
final _managementsLineController = TextEditingController();
|
|
final _signsController = TextEditingController();
|
|
|
|
///TODO Elham* fix this
|
|
List<Map> conditionsData = [
|
|
{"name": "CHRONIC", "isChecked": false},
|
|
{"name": "RTA", "isChecked": false},
|
|
{"name": "PSYCHIATRIC", "isChecked": false},
|
|
{"name": "WORK RELATED", "isChecked": false},
|
|
{"name": "VACCINATION", "isChecked": false},
|
|
{"name": "CONGENITAL", "isChecked": false},
|
|
{"name": "INFERTILITY", "isChecked": false},
|
|
{"name": "CHECK-UP", "isChecked": false},
|
|
{"name": "PREGNANCY/INDICATE MP", "isChecked": false},
|
|
{"name": "CLEANING", "isChecked": false},
|
|
{"name": "ORTHO DONTICS", "isChecked": false},
|
|
{"name": "SPORTS RELATED", "isChecked": false},
|
|
{"name": "REGULAR DENTAL TREATMENT", "isChecked": false},
|
|
{"name": "IS TRAUMA TREATMENT SPECIFY ETA", "isChecked": false},
|
|
];
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return BaseView<UcafViewModel>(
|
|
onModelReady: (model) async {
|
|
model.resetDataInFirst();
|
|
await model.getUCAFData(patient);
|
|
widget.changeLoadingState(false);
|
|
},
|
|
builder: (_, model, w) => AppScaffold(
|
|
baseViewModel: model,
|
|
isShowAppBar: false,
|
|
body: model.patientVitalSignsHistory != null &&
|
|
model.patientVitalSignsHistory.length > 0 &&
|
|
model.patientChiefComplaintList != null &&
|
|
model.patientChiefComplaintList.length > 0
|
|
? Column(
|
|
children: [
|
|
Expanded(
|
|
child: SingleChildScrollView(
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
// PatientHeaderWidgetNoAvatar(patient),
|
|
Container(
|
|
margin: EdgeInsets.symmetric(
|
|
vertical: 0, horizontal: 16),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
/*CheckboxListTile(
|
|
title: AppText(
|
|
TranslationBase.of(context).inPatient,
|
|
fontWeight: FontWeight.normal,
|
|
fontFamily: 'Poppins',
|
|
fontSize: SizeConfig.textMultiplier * 2.2,
|
|
),
|
|
value: _inPatient,
|
|
onChanged: (newValue) {
|
|
setState(() {
|
|
_inPatient = newValue;
|
|
});
|
|
},
|
|
activeColor: HexColor("#D02127"),
|
|
controlAffinity:
|
|
ListTileControlAffinity.leading,
|
|
contentPadding: EdgeInsets.all(0),
|
|
),
|
|
CheckboxListTile(
|
|
title: AppText(
|
|
TranslationBase.of(context).emergencyCase,
|
|
fontWeight: FontWeight.normal,
|
|
fontFamily: 'Poppins',
|
|
fontSize: SizeConfig.textMultiplier * 2.2,
|
|
),
|
|
value: _emergencyCase,
|
|
onChanged: (newValue) {
|
|
setState(() {
|
|
_emergencyCase = newValue;
|
|
});
|
|
},
|
|
activeColor: HexColor("#D02127"),
|
|
controlAffinity:
|
|
ListTileControlAffinity.leading,
|
|
contentPadding: EdgeInsets.all(0),
|
|
),
|
|
AppTextFieldCustom(
|
|
hintText: TranslationBase.of(context)
|
|
.durationOfIllness,
|
|
dropDownText: "3",
|
|
inputType: TextInputType.number,
|
|
inputFormatters: [
|
|
FilteringTextInputFormatter.allow(
|
|
RegExp(ONLY_NUMBERS))
|
|
],
|
|
),
|
|
SizedBox(
|
|
height: 16,
|
|
),*/
|
|
Row(
|
|
mainAxisAlignment:
|
|
MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Row(
|
|
children: [
|
|
Icon(
|
|
DoctorApp.warning,
|
|
size: 20,
|
|
color: Color(0xFFCC9B14),
|
|
),
|
|
SizedBox(
|
|
width: 8,
|
|
),
|
|
AppText(
|
|
"BP (H/L)",
|
|
fontSize:
|
|
SizeConfig.textMultiplier * 1.8,
|
|
color: Colors.black,
|
|
fontWeight: FontWeight.normal,
|
|
),
|
|
SizedBox(
|
|
width: 8,
|
|
),
|
|
AppText(
|
|
"${model.bloodPressure}",
|
|
fontSize:
|
|
SizeConfig.textMultiplier * 2,
|
|
color: Colors.grey.shade800,
|
|
fontWeight: FontWeight.w700,
|
|
),
|
|
],
|
|
),
|
|
SizedBox(
|
|
width: 6,
|
|
),
|
|
Expanded(
|
|
child: Row(
|
|
children: [
|
|
AppText(
|
|
"${TranslationBase.of(context).temperature}",
|
|
fontSize:
|
|
SizeConfig.textMultiplier * 1.8,
|
|
color: Colors.black,
|
|
fontWeight: FontWeight.normal,
|
|
),
|
|
SizedBox(
|
|
width: 4,
|
|
),
|
|
Expanded(
|
|
child: AppText(
|
|
"${model.temperatureCelcius}(C), ${(double.parse(model.temperatureCelcius) * (9 / 5) + 32).toStringAsFixed(2)}(F)",
|
|
fontSize:
|
|
SizeConfig.textMultiplier * 2,
|
|
color: Colors.grey.shade800,
|
|
fontWeight: FontWeight.w700,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
SizedBox(
|
|
height: 2,
|
|
),
|
|
Row(
|
|
mainAxisAlignment:
|
|
MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Row(
|
|
children: [
|
|
AppText(
|
|
"${TranslationBase.of(context).pulseBeats}:",
|
|
fontSize:
|
|
SizeConfig.textMultiplier * 1.8,
|
|
color: Colors.black,
|
|
fontWeight: FontWeight.normal,
|
|
),
|
|
SizedBox(
|
|
width: 4,
|
|
),
|
|
AppText(
|
|
"${model.hartRat}",
|
|
fontSize:
|
|
SizeConfig.textMultiplier * 2,
|
|
color: Colors.grey.shade800,
|
|
fontWeight: FontWeight.w700,
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
SizedBox(
|
|
height: 16,
|
|
),
|
|
AppText(
|
|
TranslationBase.of(context)
|
|
.chiefComplaintsAndSymptoms,
|
|
fontFamily: 'Poppins',
|
|
fontSize: SizeConfig.textMultiplier * 2.2,
|
|
fontWeight: FontWeight.w700,
|
|
color: Color(0xFF2E303A),
|
|
),
|
|
/* SizedBox(
|
|
height: 4,
|
|
),
|
|
AppText(
|
|
TranslationBase.of(context)
|
|
.patientFeelsPainInHisBackAndCough,
|
|
fontFamily: 'Poppins',
|
|
fontWeight: FontWeight.normal,
|
|
color: Color(0xFF575757),
|
|
fontSize: SizeConfig.textMultiplier * 1.8,
|
|
),*/
|
|
SizedBox(
|
|
height: 8,
|
|
),
|
|
AppTextFieldCustom(
|
|
hintText:
|
|
TranslationBase.of(context).instruction,
|
|
dropDownText: TabUtil.parseHtmlString(model
|
|
.patientChiefComplaintList[0]
|
|
.chiefComplaint),
|
|
controller: _additionalComplaintsController,
|
|
inputType: TextInputType.multiline,
|
|
enabled: false,
|
|
minLines: 1,
|
|
maxLines: 20,
|
|
),
|
|
/*SizedBox(
|
|
height: 16,
|
|
),
|
|
AppText(
|
|
TranslationBase.of(context).otherConditions,
|
|
fontWeight: FontWeight.bold,
|
|
fontSize: SizeConfig.textMultiplier * 2.1,
|
|
color: Color(0xFF2E303A),
|
|
),
|
|
...List.generate(
|
|
conditionsData.length,
|
|
(index) => CheckboxListTile(
|
|
title: AppText(
|
|
conditionsData[index]['name'],
|
|
fontWeight: FontWeight.normal,
|
|
fontSize:
|
|
SizeConfig.textMultiplier * 2.1,
|
|
fontFamily: 'Poppins',
|
|
),
|
|
value: conditionsData[index]
|
|
['isChecked'],
|
|
onChanged: (newValue) {
|
|
setState(() {
|
|
conditionsData[index]
|
|
['isChecked'] = newValue;
|
|
});
|
|
},
|
|
controlAffinity:
|
|
ListTileControlAffinity.leading,
|
|
contentPadding: EdgeInsets.all(0),
|
|
)),*/
|
|
SizedBox(
|
|
height: 8,
|
|
),
|
|
/* AppTextFieldCustom(
|
|
hintText: TranslationBase.of(context).other,
|
|
dropDownText: TranslationBase.of(context).none,
|
|
enabled: false,
|
|
),
|
|
SizedBox(
|
|
height: 8,
|
|
),
|
|
AppTextFieldCustom(
|
|
hintText: TranslationBase.of(context).how,
|
|
dropDownText: TranslationBase.of(context).none,
|
|
enabled: false,
|
|
),
|
|
SizedBox(
|
|
height: 8,
|
|
),
|
|
Row(
|
|
children: [
|
|
Expanded(
|
|
child: AppTextFieldCustom(
|
|
hintText:
|
|
TranslationBase.of(context).when,
|
|
dropDownText: TranslationBase.of(context).none,
|
|
enabled: false,
|
|
),
|
|
),
|
|
SizedBox(
|
|
width: 4,
|
|
),
|
|
Expanded(
|
|
child: AppTextFieldCustom(
|
|
hintText:
|
|
TranslationBase.of(context).where,
|
|
dropDownText: TranslationBase.of(context).none,
|
|
enabled: false,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
SizedBox(
|
|
height: 8,
|
|
),
|
|
AppTextFieldCustom(
|
|
height: screenSize.height * 0.1,
|
|
hintText: TranslationBase.of(context)
|
|
.specifyPossibleLineManagement,
|
|
dropDownText: TranslationBase.of(context).none,
|
|
enabled: false,
|
|
minLines: 4,
|
|
maxLines: 6,
|
|
),
|
|
SizedBox(
|
|
height: 26,
|
|
),
|
|
AppText(
|
|
TranslationBase.of(context).significantSigns,
|
|
fontWeight: FontWeight.bold,
|
|
fontFamily: 'Poppins',
|
|
fontSize: SizeConfig.textMultiplier * 2.2,
|
|
),
|
|
SizedBox(
|
|
height: 8,
|
|
),
|
|
AppTextFieldCustom(
|
|
height: screenSize.height * 0.1,
|
|
hintText:
|
|
TranslationBase.of(context).backAbdomen,
|
|
dropDownText: "BackLNeck",
|
|
enabled: false,
|
|
),*/
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
],
|
|
)
|
|
: model.patientChiefComplaintList != null ||
|
|
model.patientVitalSignsHistory != null
|
|
? Center(
|
|
child: ErrorMessage(
|
|
error: model.patientVitalSignsHistory == null ||
|
|
model.patientVitalSignsHistory.length == 0
|
|
? TranslationBase.of(context).vitalSignEmptyMsg
|
|
: TranslationBase.of(context).chiefComplaintEmptyMsg))
|
|
: Container(),
|
|
),
|
|
);
|
|
}
|
|
}
|