|
|
|
@ -1,9 +1,16 @@
|
|
|
|
|
import 'package:doctor_app_flutter/config/config.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/models/patient/patiant_info_model.dart';
|
|
|
|
|
import 'package:doctor_app_flutter/screens/base/base_view.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/shared/app_buttons_widget.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:flutter/material.dart';
|
|
|
|
|
import 'package:flutter/services.dart';
|
|
|
|
|
import 'package:hexcolor/hexcolor.dart';
|
|
|
|
|
|
|
|
|
|
class UCAFInputScreen extends StatefulWidget {
|
|
|
|
|
@override
|
|
|
|
@ -11,6 +18,33 @@ class UCAFInputScreen extends StatefulWidget {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _UCAFInputScreenState extends State<UCAFInputScreen> {
|
|
|
|
|
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();
|
|
|
|
|
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) {
|
|
|
|
|
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
|
|
|
|
@ -21,8 +55,379 @@ class _UCAFInputScreenState extends State<UCAFInputScreen> {
|
|
|
|
|
builder: (_, model, w) => AppScaffold(
|
|
|
|
|
baseViewModel: model,
|
|
|
|
|
appBarTitle: TranslationBase.of(context).ucaf,
|
|
|
|
|
body: Container(),
|
|
|
|
|
body: SingleChildScrollView(
|
|
|
|
|
child: Column(
|
|
|
|
|
children: [
|
|
|
|
|
PatientHeaderWidget(patient),
|
|
|
|
|
Container(
|
|
|
|
|
margin: EdgeInsets.symmetric(vertical: 16, horizontal: 16),
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
CheckboxListTile(
|
|
|
|
|
title: AppText(
|
|
|
|
|
TranslationBase.of(context).inPatient,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.1,
|
|
|
|
|
),
|
|
|
|
|
value: _inPatient,
|
|
|
|
|
onChanged: (newValue) {
|
|
|
|
|
setState(() {
|
|
|
|
|
_inPatient = newValue;
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
controlAffinity: ListTileControlAffinity.leading,
|
|
|
|
|
contentPadding: EdgeInsets.all(0),
|
|
|
|
|
),
|
|
|
|
|
CheckboxListTile(
|
|
|
|
|
title: AppText(
|
|
|
|
|
TranslationBase.of(context).emergencyCase,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.1,
|
|
|
|
|
),
|
|
|
|
|
value: _emergencyCase,
|
|
|
|
|
onChanged: (newValue) {
|
|
|
|
|
setState(() {
|
|
|
|
|
_emergencyCase = newValue;
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
controlAffinity: ListTileControlAffinity.leading,
|
|
|
|
|
contentPadding: EdgeInsets.all(0),
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
height: screenSize.height * 0.070,
|
|
|
|
|
child: TextField(
|
|
|
|
|
decoration: Helpers.textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context).durationOfIllness,
|
|
|
|
|
null,
|
|
|
|
|
false),
|
|
|
|
|
enabled: true,
|
|
|
|
|
controller: _durationOfIllnessController,
|
|
|
|
|
inputFormatters: [
|
|
|
|
|
FilteringTextInputFormatter.allow(
|
|
|
|
|
RegExp(ONLY_NUMBERS))
|
|
|
|
|
],
|
|
|
|
|
keyboardType: TextInputType.number,
|
|
|
|
|
)),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 10,
|
|
|
|
|
),
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
AppText(
|
|
|
|
|
"BP (H/L)",
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 1.8,
|
|
|
|
|
color: Colors.black,
|
|
|
|
|
fontWeight: FontWeight.w700,
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 8,
|
|
|
|
|
),
|
|
|
|
|
AppText(
|
|
|
|
|
"120/80",
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2,
|
|
|
|
|
color: Colors.grey.shade800,
|
|
|
|
|
fontWeight: FontWeight.normal,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
AppText(
|
|
|
|
|
"${TranslationBase.of(context).temperature}",
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 1.8,
|
|
|
|
|
color: Colors.black,
|
|
|
|
|
fontWeight: FontWeight.w700,
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 8,
|
|
|
|
|
),
|
|
|
|
|
AppText(
|
|
|
|
|
"37.5(C), 98.6(F)",
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2,
|
|
|
|
|
color: Colors.grey.shade800,
|
|
|
|
|
fontWeight: FontWeight.normal,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 4,
|
|
|
|
|
),
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
AppText(
|
|
|
|
|
"${TranslationBase.of(context).pulseBeats} :",
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 1.8,
|
|
|
|
|
color: Colors.black,
|
|
|
|
|
fontWeight: FontWeight.w700,
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 8,
|
|
|
|
|
),
|
|
|
|
|
AppText(
|
|
|
|
|
"80",
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2,
|
|
|
|
|
color: Colors.grey.shade800,
|
|
|
|
|
fontWeight: FontWeight.normal,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 16,
|
|
|
|
|
),
|
|
|
|
|
AppText(
|
|
|
|
|
TranslationBase.of(context).chiefComplaintsAndSymptoms,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.5,
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
AppText(
|
|
|
|
|
TranslationBase.of(context)
|
|
|
|
|
.patientFeelsPainInHisBackAndCough,
|
|
|
|
|
fontWeight: FontWeight.normal,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.0,
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
child: TextField(
|
|
|
|
|
decoration: Helpers.textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context).additionalTextComplaints,
|
|
|
|
|
null,
|
|
|
|
|
false),
|
|
|
|
|
enabled: true,
|
|
|
|
|
controller: _additionalComplaintsController,
|
|
|
|
|
keyboardType: TextInputType.text,
|
|
|
|
|
minLines: 4,
|
|
|
|
|
maxLines: 6,
|
|
|
|
|
)),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 16,
|
|
|
|
|
),
|
|
|
|
|
AppText(
|
|
|
|
|
TranslationBase.of(context).otherConditions,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.0,
|
|
|
|
|
),
|
|
|
|
|
...List.generate(
|
|
|
|
|
conditionsData.length,
|
|
|
|
|
(index) => CheckboxListTile(
|
|
|
|
|
title: AppText(
|
|
|
|
|
conditionsData[index]['name'],
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.1,
|
|
|
|
|
),
|
|
|
|
|
value: conditionsData[index]['isChecked'],
|
|
|
|
|
onChanged: (newValue) {
|
|
|
|
|
setState(() {
|
|
|
|
|
conditionsData[index]['isChecked'] = newValue;
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
controlAffinity: ListTileControlAffinity.leading,
|
|
|
|
|
contentPadding: EdgeInsets.all(0),
|
|
|
|
|
)),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
height: screenSize.height * 0.070,
|
|
|
|
|
child: TextField(
|
|
|
|
|
decoration: Helpers.textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context).other,
|
|
|
|
|
null,
|
|
|
|
|
false),
|
|
|
|
|
enabled: true,
|
|
|
|
|
controller: _otherController,
|
|
|
|
|
keyboardType: TextInputType.text,
|
|
|
|
|
)),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
height: screenSize.height * 0.070,
|
|
|
|
|
child: TextField(
|
|
|
|
|
decoration: Helpers.textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context).how,
|
|
|
|
|
null,
|
|
|
|
|
false),
|
|
|
|
|
enabled: true,
|
|
|
|
|
controller: _howController,
|
|
|
|
|
keyboardType: TextInputType.text,
|
|
|
|
|
)),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Expanded(
|
|
|
|
|
child: Container(
|
|
|
|
|
height: screenSize.height * 0.070,
|
|
|
|
|
child: TextField(
|
|
|
|
|
decoration: Helpers.textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context).when,
|
|
|
|
|
null,
|
|
|
|
|
false),
|
|
|
|
|
enabled: true,
|
|
|
|
|
controller: _whenController,
|
|
|
|
|
keyboardType: TextInputType.text,
|
|
|
|
|
)),
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 4,
|
|
|
|
|
),
|
|
|
|
|
Expanded(
|
|
|
|
|
child: Container(
|
|
|
|
|
height: screenSize.height * 0.070,
|
|
|
|
|
child: TextField(
|
|
|
|
|
decoration: Helpers.textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context).where,
|
|
|
|
|
null,
|
|
|
|
|
false),
|
|
|
|
|
enabled: true,
|
|
|
|
|
controller: _whereController,
|
|
|
|
|
keyboardType: TextInputType.text,
|
|
|
|
|
)),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
child: TextField(
|
|
|
|
|
decoration: Helpers.textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context).specifyPossibleLineManagement,
|
|
|
|
|
null,
|
|
|
|
|
false),
|
|
|
|
|
enabled: true,
|
|
|
|
|
controller: _managementsLineController,
|
|
|
|
|
keyboardType: TextInputType.text,
|
|
|
|
|
minLines: 4,
|
|
|
|
|
maxLines: 6,
|
|
|
|
|
)),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 16,
|
|
|
|
|
),
|
|
|
|
|
AppText(
|
|
|
|
|
TranslationBase.of(context)
|
|
|
|
|
.significantSigns,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.0,
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
child: TextField(
|
|
|
|
|
decoration: Helpers.textFieldSelectorDecoration(
|
|
|
|
|
TranslationBase.of(context).backAbdomen,
|
|
|
|
|
null,
|
|
|
|
|
false),
|
|
|
|
|
enabled: true,
|
|
|
|
|
controller: _signsController,
|
|
|
|
|
keyboardType: TextInputType.text,
|
|
|
|
|
minLines: 4,
|
|
|
|
|
maxLines: 6,
|
|
|
|
|
)),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 16,
|
|
|
|
|
),
|
|
|
|
|
AppButton(
|
|
|
|
|
title: TranslationBase.of(context).next,
|
|
|
|
|
color: HexColor("#B8382B"),
|
|
|
|
|
onPressed: (){
|
|
|
|
|
// Navigator.of(context).pushNamed(PATIENT_ADMISSION_REQUEST_3, arguments: {'patient': patient});
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class PatientHeaderWidget extends StatelessWidget {
|
|
|
|
|
final PatiantInformtion patient;
|
|
|
|
|
|
|
|
|
|
PatientHeaderWidget(this.patient);
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return Column(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
margin: EdgeInsets.all(16),
|
|
|
|
|
child: Row(
|
|
|
|
|
children: [
|
|
|
|
|
Expanded(
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
AppText(
|
|
|
|
|
patient.firstName + ' ' + patient.lastName,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.2,
|
|
|
|
|
),
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
AppText(
|
|
|
|
|
"VIP",
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.2,
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 8,
|
|
|
|
|
),
|
|
|
|
|
AppText(
|
|
|
|
|
" ${patient.age}",
|
|
|
|
|
fontWeight: FontWeight.normal,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.0,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
AppText(
|
|
|
|
|
"NEW VISIT",
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.0,
|
|
|
|
|
),
|
|
|
|
|
AppText(
|
|
|
|
|
"${patient.companyName}",
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
fontSize: SizeConfig.textMultiplier * 2.0,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
Icon(
|
|
|
|
|
Icons.info_outline,
|
|
|
|
|
color: Colors.black,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
width: double.infinity,
|
|
|
|
|
height: 1,
|
|
|
|
|
color: Color(0xffCCCCCC),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|