import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/core/enum/view_state.dart'; import 'package:doctor_app_flutter/core/model/dashboard/get_special_clinical_care_List_Respose_Model.dart'; import 'package:doctor_app_flutter/core/model/patient_muse/PatientSearchRequestModel.dart'; import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.dart'; import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/patients/In_patient/InPatientHeader.dart'; import 'package:doctor_app_flutter/utils/date-utils.dart'; import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/utils/tab_utils.dart'; import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; import 'package:doctor_app_flutter/utils/utils.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../DischargedPatientPage.dart'; import 'in_patient_list_page.dart'; class InPatientScreen extends StatefulWidget { GetSpecialClinicalCareListResponseModel? specialClinic; bool isAllClinic = true; bool showBottomSheet = false; String selectedClinicName = ""; InPatientScreen({Key? key, required this.specialClinic}); @override _InPatientScreenState createState() => _InPatientScreenState(); } class _InPatientScreenState extends State with SingleTickerProviderStateMixin { late TabController _tabController; ProjectViewModel? viewModel = null; int _activeTab = 0; int selectedMapId = 0; bool isVidaPlusProject = false; @override void initState() { super.initState(); _tabController = TabController(length: 3, vsync: this); _tabController.addListener(_handleTabSelection); } @override void dispose() { super.dispose(); _tabController.dispose(); } _handleTabSelection() { Utils.hideKeyboard(context); setState(() { widget.showBottomSheet = false; _activeTab = _tabController.index; }); } @override Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; viewModel = Provider.of(context); PatientSearchRequestModel requestModel = PatientSearchRequestModel(); return BaseView( onModelReady: (model) async { model.noDataFoundText = TranslationBase.of(context).noDataAvailable; model.clearPatientList(); var doctorProfile = await model.getDoctorProfile(); if (widget.specialClinic != null && widget.specialClinic!.clinicID != null) { print(widget.specialClinic!.toJson()); await model.getSpecialClinicalCareMappingList(widget.specialClinic!.clinicID); // requestModel.nursingStationID = // model.specialClinicalCareMappingList[0].nursingStationID; } requestModel.clinicID = 0; isVidaPlusProject = Utils.isVidaPlusProject(viewModel!, doctorProfile.projectID ?? -1); if (isVidaPlusProject) { requestModel.transformDataForVidaPlus(); DateTime dateTime = DateTime.now(); String currentDate = AppDateUtils.convertDateToFormat( dateTime, 'yyyy-MM-dd'); print("the current date is $currentDate"); requestModel.from = "$currentDate 00:00:00"; dateTime = dateTime.add(Duration(days: 1)); currentDate = AppDateUtils.convertDateToFormat( dateTime, 'yyyy-MM-dd'); requestModel.to = "$currentDate 00:00:00"; requestModel.pageSize = 10; requestModel.pageIndex = 0; requestModel.searchType = null; requestModel.transformDataForVidaPlus(); } await model.getInPatientList(requestModel, isVidaPlusProject: isVidaPlusProject); }, builder: (_, model, w) => AppScaffold( baseViewModel: model, isShowAppBar: true, appBar: InPatientHeader( model: model, selectedMapId: selectedMapId, specialClinic: widget.specialClinic!, activeTab: _activeTab, onChangeFunc: (newValue) async { setState(() { selectedMapId = newValue; }); model.clearPatientList(); GifLoaderDialogUtils.showMyDialog(context); PatientSearchRequestModel requestModel = PatientSearchRequestModel(nursingStationID: selectedMapId, clinicID: 0); if (isVidaPlusProject) { requestModel.transformDataForVidaPlus(); } await model.getInPatientList(requestModel, isLocalBusy: true, isVidaPlusProject: Utils.isVidaPlusProject( Provider.of(context), requestModel.projectID ?? -1)); GifLoaderDialogUtils.hideDialog(context); if (model.state == ViewState.ErrorLocal) { DrAppToastMsg.showErrorToast(model.error); } else { onChangeState(isAllClinic: true, showBottomSheet: false, selectedClinicName: null); } }), body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: Scaffold( extendBodyBehindAppBar: false, appBar: PreferredSize( preferredSize: Size.fromHeight(MediaQuery.of(context).size.height * 0.070), child: Container( height: MediaQuery.of(context).size.height * 0.070, decoration: BoxDecoration( border: Border( bottom: BorderSide(color: Theme.of(context).dividerColor, width: 0.5), //width: 0.7 ), color: Colors.white), child: Container( margin: EdgeInsets.only(top: 9), color: TabUtils.getBgTabColor(), child: TabBar( isScrollable: false, controller: _tabController, indicatorColor: AppGlobal.appRedColor, indicatorWeight: 0.001, indicator: BoxDecoration(), // indicatorSize: TabBarIndicatorSize.tab, // labelColor: Theme.of(context).primaryColor, labelPadding: EdgeInsets.only(top: 0, left: 0, right: 0, bottom: 0), // unselectedLabelColor: Colors.grey[800], tabs: [ tabWidget(screenSize, _activeTab == 0, TranslationBase.of(context).inPatientAll, context: context, counter: model.mainList.length, isFirst: true), tabWidget( screenSize, _activeTab == 1, TranslationBase.of(context).myInPatientTitle, counter: model.filteredMyInPatientItems.length, isMiddle: true, context: context, ), tabWidget( screenSize, _activeTab == 2, TranslationBase.of(context).discharged, isLast: true, context: context, ), ], ), ), ), ), body: Column( children: [ Expanded( child: TabBarView( physics: BouncingScrollPhysics(), controller: _tabController, children: [ InPatientListPage( isMyInPatient: false, patientSearchViewModel: model, isAllClinic: widget.isAllClinic, showBottomSheet: widget.showBottomSheet, selectedClinicName: widget.selectedClinicName, onChangeValue: onChangeState, isVidaPlusProject: isVidaPlusProject, ), InPatientListPage( isMyInPatient: true, patientSearchViewModel: model, isAllClinic: widget.isAllClinic, showBottomSheet: widget.showBottomSheet, selectedClinicName: widget.selectedClinicName, onChangeValue: onChangeState, isVidaPlusProject: isVidaPlusProject, ), DischargedPatient( isVidaPlusProject: isVidaPlusProject, ), ], ), ), ], ), ), ), ], ), ), ); } onChangeState({isAllClinic, showBottomSheet, selectedClinicName}) { setState(() { widget.isAllClinic = isAllClinic; widget.showBottomSheet = showBottomSheet; widget.selectedClinicName = selectedClinicName??""; }); } Widget tabWidget( Size screenSize, bool isActive, String title, { int counter = -1, bool isFirst = false, bool isMiddle = false, bool isLast = false, BuildContext? context, }) { ProjectViewModel projectsProvider = Provider.of(context!); return Container( color: Colors.yellow, child: Center( child: Container( height: TabUtils.getTabHeight(context), decoration: TabUtils.getBoxTabsBoxDecoration( isActive: isActive, isFirst: isFirst, isMiddle: isMiddle, isLast: isLast, projectViewModel: projectsProvider, ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ TabUtils.getTabText(title: title, isActive: isActive), if (counter != -1) TabUtils.getTabCounter( isActive: isActive, counter: counter, ), ], ), ), ), ); } }