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/flutter_datetime_picker.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 { TextEditingController _bloodSugarValueController = TextEditingController(); DateTime bloodSugarDate = DateTime.now(); DateTime timeSugarDate = DateTime.now(); String measureUnitSelectedType = 'mg/dlt'; int measuredTime = 1; bool isButtonDisabled = true; int _selectedMeasureUnitIndex = 0; final List measureUnitList = ['mg/dlt', 'mol/L']; final List measureTimeEnList = [ 'Before Breakfast', 'After Breakfast', 'Before Lunch', 'After Lunch', 'Before Dinner', 'After Dinner', 'Before Sleep', 'After Sleep', 'Fasting', 'Other', ]; final List measureTimeArList = [ "قبل الإفطار", "بعد الإفطار", "قبل الغداء", "بعد الغداء", "قبل العشاء", "بعد العشاء", "قبل النوم", "بعد النوم", "صائم", "آخر", ]; int _selectedMeasureTimeIndex; 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 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 dataList) { List 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; }); } } }