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.
PatientApp-KKUMC/lib/pages/medical/my_trackers/blood_suger/AddBloodSugarPage.dart

349 lines
14 KiB
Dart

import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/medical/blood_sugar_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/medical/balance/new_text_Field.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/ConfirmWithMessageDialog.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/radio_selection_dialog.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_datetime_picker_plus/flutter_datetime_picker_plus.dart';
import 'package:provider/provider.dart';
class AddBloodSugarPage extends StatefulWidget {
final DateTime? bloodSugarDate;
final String? measureUnitSelectedType;
final bool? isUpdate;
final String? measuredTime;
final String? bloodSugarValue;
final int? lineItemNo;
final String? measuredSelectedType;
final BloodSugarViewMode? bloodSugarViewMode;
AddBloodSugarPage(
{Key? key, this.bloodSugarDate, this.measureUnitSelectedType, this.isUpdate = false, this.measuredTime, this.bloodSugarValue, this.lineItemNo, this.bloodSugarViewMode, this.measuredSelectedType})
: super(key: key);
@override
_AddBloodSugarPageState createState() => _AddBloodSugarPageState();
}
class _AddBloodSugarPageState extends State<AddBloodSugarPage> {
TextEditingController _bloodSugarValueController = TextEditingController();
DateTime bloodSugarDate = DateTime.now();
DateTime timeSugarDate = DateTime.now();
String measureUnitSelectedType = 'mg/dlt';
int measuredTime = 9;
bool isButtonDisabled = true;
int _selectedMeasureUnitIndex = 0;
final List<String> measureUnitList = ['mg/dlt', 'mol/L'];
final List<String> measureTimeEnList = [
'Before Breakfast',
'After Breakfast',
'Before Lunch',
'After Lunch',
'Before Dinner',
'After Dinner',
'Before Sleep',
'After Sleep',
'Fasting',
'Other',
];
final List<String> measureTimeArList = [
"قبل الإفطار",
"بعد الإفطار",
"قبل الغداء",
"بعد الغداء",
"قبل العشاء",
"بعد العشاء",
"قبل النوم",
"بعد النوم",
"صائم",
"آخر",
];
int? _selectedMeasureTimeIndex =9;
String? measureTimeSelectedType;
@override
void initState() {
super.initState();
if (widget.isUpdate!) {
bloodSugarDate = widget.bloodSugarDate!;
timeSugarDate = widget.bloodSugarDate!;
measureUnitSelectedType = widget.measureUnitSelectedType!;
if (measureTimeEnList.contains(widget.measuredTime))
measuredTime = measureTimeEnList.indexOf(widget.measuredTime!);
else if (measureTimeArList.contains(widget.measuredTime)) measuredTime = measureTimeArList.indexOf(widget.measuredTime!);
_bloodSugarValueController.text = widget.bloodSugarValue!;
measureTimeSelectedType = widget.measuredSelectedType;
validateForm();
}
}
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return AppScaffold(
isShowAppBar: true,
showNewAppBar: true,
showNewAppBarTitle: true,
appBarTitle: widget.isUpdate! ? TranslationBase.of(context).update : TranslationBase.of(context).add,
body: Column(
children: [
Expanded(
child: SingleChildScrollView(
physics: BouncingScrollPhysics(),
padding: EdgeInsets.all(21),
child: Column(
children: [
NewTextFields(
hintText: TranslationBase.of(context).sugarAdd,
controller: _bloodSugarValueController,
keyboardType: TextInputType.number,
onChanged: (value) => validateForm(),
fontWeight: FontWeight.normal,
fontSize: 14,
),
SizedBox(height: 12),
InkWell(
onTap: () {
confirmSelectMeasureUnitDialog();
},
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(measureUnitSelectedType),
Icon(
Icons.arrow_drop_down,
color: Colors.grey,
)
],
),
),
),
SizedBox(height: 12),
InkWell(
onTap: () {
DatePicker.showDatePicker(context, showTitleActions: true, minTime: DateTime(DateTime.now().year - 1, 1, 1), maxTime: DateTime.now(), onConfirm: (date) {
setState(() {
bloodSugarDate = date;
});
}, currentTime: bloodSugarDate, locale: projectViewModel.localeType);
},
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(TranslationBase.of(context).date),
Texts(getDate()),
],
),
),
),
SizedBox(height: 12),
InkWell(
onTap: () {
DatePicker.showTimePicker(context, showTitleActions: true, onConfirm: (date) {
setState(() {
timeSugarDate = date;
});
}, currentTime: timeSugarDate, locale: projectViewModel.localeType);
},
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [Texts(TranslationBase.of(context).time), Texts(getTime())],
),
),
),
SizedBox(height: 12),
InkWell(
onTap: () {
confirmSelectMeasureTimeDialog(projectViewModel.isArabic ? measureTimeArList : measureTimeEnList);
},
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
height: 65,
decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(measureTimeSelectedType ?? TranslationBase.of(context).other),
Icon(
Icons.arrow_drop_down,
color: Colors.grey,
)
],
),
),
),
widget.isUpdate!
? Container(
padding: EdgeInsets.all(10),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
InkWell(
child: Texts(
TranslationBase.of(context).delete,
decoration: TextDecoration.underline,
fontWeight: FontWeight.bold,
color: Colors.red[900],
),
onTap: () {
showDialog(
context: context,
builder: (cxt) => ConfirmWithMessageDialog(
message: TranslationBase.of(context).removeMeasure,
onTap: () async {
GifLoaderDialogUtils.showMyDialog(context);
widget.bloodSugarViewMode!.deactivateDiabeticStatus(lineItemNo: widget.lineItemNo!).then((value) {
GifLoaderDialogUtils.hideDialog(context);
if (widget.bloodSugarViewMode!.state == ViewState.ErrorLocal)
AppToast.showErrorToast(message: widget.bloodSugarViewMode!.error);
else
Navigator.pop(context);
}).catchError((e) {
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: widget.bloodSugarViewMode!.error);
});
},
),
);
},
)
],
),
)
: Container()
],
),
),
),
DefaultButton(
TranslationBase.of(context).save,
isButtonDisabled
? null
: () async {
if (_bloodSugarValueController.text.isNotEmpty) {
GifLoaderDialogUtils.showMyDialog(context);
if (widget.isUpdate!) {
await widget.bloodSugarViewMode!.updateDiabtecResult(
month: bloodSugarDate,
hour: timeSugarDate,
diabtecUnit: measureUnitSelectedType,
measuredTime: measuredTime,
lineItemNo: widget.lineItemNo,
bloodSugerResult: _bloodSugarValueController.text.toString());
GifLoaderDialogUtils.hideDialog(context);
if (widget.bloodSugarViewMode!.state == ViewState.ErrorLocal)
AppToast.showErrorToast(message: widget.bloodSugarViewMode!.error);
else
Navigator.pop(context);
} else {
await widget.bloodSugarViewMode!.addDiabtecResult(
diabtecUnit: measureUnitSelectedType,
measuredTime: measuredTime,
bloodSugerResult: _bloodSugarValueController.text.toString(),
bloodSugerDateChart: '${bloodSugarDate.year}-${bloodSugarDate.month}-${bloodSugarDate.day} ${timeSugarDate.hour}:${timeSugarDate.minute}:00',
);
GifLoaderDialogUtils.hideDialog(context);
if (widget.bloodSugarViewMode!.state == ViewState.Error)
AppToast.showErrorToast(message: widget.bloodSugarViewMode!.error);
else
Navigator.pop(context);
}
}
},
disabledColor: Colors.grey,
).insideContainer,
],
),
);
}
String getDate() {
return "${DateUtil.getMonth(bloodSugarDate.month)} ${bloodSugarDate.day}, ${bloodSugarDate.year}";
}
String getTime() {
return " ${timeSugarDate.hour}:${timeSugarDate.minute}";
}
void confirmSelectMeasureUnitDialog() {
List<RadioSelectionDialogModel> list = [
RadioSelectionDialogModel("mg/dlt", 0),
RadioSelectionDialogModel("mol/L", 1),
];
showDialog(
context: context,
builder: (cxt) => RadioSelectionDialog(
listData: list,
selectedIndex: _selectedMeasureUnitIndex,
onValueSelected: (index) {
_selectedMeasureUnitIndex = index;
measureUnitSelectedType = list[index].title;
setState(() {});
},
),
);
}
void confirmSelectMeasureTimeDialog(List<String> dataList) {
List<RadioSelectionDialogModel> list = [
for (int i = 0; i < dataList.length; i++) RadioSelectionDialogModel(dataList[i], i),
];
showDialog(
context: context,
builder: (cxt) => RadioSelectionDialog(
listData: list,
selectedIndex: _selectedMeasureTimeIndex,
isScrollable: true,
onValueSelected: (index) {
_selectedMeasureTimeIndex = index;
measureTimeSelectedType = list[index].title;
measuredTime = index;
setState(() {});
},
),
);
}
void validateForm() {
if (_bloodSugarValueController.text.length > 0) {
setState(() {
isButtonDisabled = false;
});
} else {
setState(() {
isButtonDisabled = true;
});
}
}
}