import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.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/models/dashboard/get_special_clinical_care_List_Respose_Model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/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/loader/gif_loader_dialog_utils.dart'; import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'DischargedPatientPage.dart'; import 'InPatientPage.dart'; class PatientInPatientScreen extends StatefulWidget { GetSpecialClinicalCareListResponseModel specialClinic; PatientInPatientScreen({Key key, this.specialClinic}); @override _PatientInPatientScreenState createState() => _PatientInPatientScreenState(); } class _PatientInPatientScreenState extends State with SingleTickerProviderStateMixin { TabController _tabController; int _activeTab = 0; int selectedMapId; @override void initState() { super.initState(); _tabController = TabController(length: 3, vsync: this); _tabController.addListener(_handleTabSelection); } @override void dispose() { super.dispose(); _tabController.dispose(); } _handleTabSelection() { setState(() { _activeTab = _tabController.index; }); } @override Widget build(BuildContext context) { final screenSize = MediaQuery .of(context) .size; PatientSearchRequestModel requestModel = PatientSearchRequestModel(); ProjectViewModel projectsProvider = Provider.of(context); return BaseView( onModelReady: (model) async { model.clearPatientList(); if (widget.specialClinic != null) { await model.getSpecialClinicalCareMappingList(widget.specialClinic.clinicID); requestModel.nursingStationID = model.specialClinicalCareMappingList[0].nursingStationID; requestModel.clinicID = 0; } model.getInPatientList(requestModel); }, builder: (_, model, w) => AppScaffold( baseViewModel: model, isShowAppBar: false, body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: EdgeInsets.only(left: 0, right: 5, bottom: 5, top: 5), decoration: BoxDecoration( color: Colors.white, ), child: Container( padding: EdgeInsets.only(left: 10, right: 10, bottom: 10), margin: EdgeInsets.only(top: 50), child: Row(children: [ IconButton( icon: Icon(Icons.arrow_back_ios), color: Colors.black, //Colors.black, onPressed: () => Navigator.pop(context), ), Expanded( child: AppText( TranslationBase .of(context) .inPatient, fontSize: SizeConfig.textMultiplier * 2.8, fontWeight: FontWeight.bold, color: Color(0xFF2B353E), ), ), if (model.specialClinicalCareMappingList.isNotEmpty && widget.specialClinic != null && _activeTab != 2) Container( width: MediaQuery.of(context).size.width * .3, child: DropdownButtonHideUnderline( child: DropdownButton( dropdownColor: Colors.white, iconEnabledColor: Colors.black, isExpanded: true, value: selectedMapId == null ? model .specialClinicalCareMappingList[0] .nursingStationID : selectedMapId, iconSize: 25, elevation: 16, selectedItemBuilder: (BuildContext context) { return model .specialClinicalCareMappingList .map((item) { return Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.end, children: [ Column( mainAxisAlignment: MainAxisAlignment .center, children: [ Container( padding: EdgeInsets.all(2), margin: EdgeInsets.all(2), decoration: new BoxDecoration( color: Colors.red[800], borderRadius: BorderRadius .circular( 20), ), constraints: BoxConstraints( minWidth: 20, minHeight: 20, ), child: Center( child: AppText( model .specialClinicalCareMappingList .length .toString(), color: Colors.white, fontSize: projectsProvider .isArabic ? 10 : 11, textAlign: TextAlign .center, ), )), ], ), AppText(item.description, fontSize: 12, color: Colors.black, fontWeight: FontWeight.bold, textAlign: TextAlign.end), ], ); }).toList(); }, onChanged: (newValue) async { setState(() { selectedMapId = newValue; }); model.clearPatientList(); GifLoaderDialogUtils.showMyDialog( context); PatientSearchRequestModel requestModel = PatientSearchRequestModel( nursingStationID: selectedMapId, clinicID: 0); await model.getInPatientList(requestModel, isLocalBusy: true); GifLoaderDialogUtils.hideDialog( context); if (model.state == ViewState.ErrorLocal) { DrAppToastMsg.showErrorToast( model.error); } }, items: model .specialClinicalCareMappingList .map((item) { return DropdownMenuItem( child: AppText( item.description, textAlign: TextAlign.left, ), value: item.nursingStationID, ); }).toList(), )), ) ]), ), ), Expanded( child: Scaffold( extendBodyBehindAppBar: true, 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: Center( child: TabBar( isScrollable: false, controller: _tabController, indicatorColor: Colors.transparent, indicatorWeight: 1.0, 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, counter: model.inPatientList.length), tabWidget( screenSize, _activeTab == 1, "My InPatients", counter: model.myIinPatientList.length), tabWidget(screenSize, _activeTab == 2, TranslationBase.of(context).discharged), ], ), ), ), ), body: Column( children: [ Expanded( child: TabBarView( physics: BouncingScrollPhysics(), controller: _tabController, children: [ InPatientPage(false, model), InPatientPage(true,model), DischargedPatient(), ], ), ), ], ), ), ), ], ), ), ); } Widget tabWidget(Size screenSize, bool isActive, String title, {int counter = -1}) { return Center( child: Container( height: screenSize.height * 0.070, decoration: TextFieldsUtils.containerBorderDecoration( isActive ? Color(0xFFD02127 /*B8382B*/) : Color(0xFFEAEAEA), isActive ? Color(0xFFD02127) : Color(0xFFEAEAEA), borderRadius: 4, borderWidth: 0), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ AppText( title, fontSize: SizeConfig.textMultiplier * 1.5, color: isActive ? Colors.white : Color(0xFF2B353E), fontWeight: FontWeight.w700, ), if (counter != -1) Container( margin: EdgeInsets.all(4), width: 15, height: 15, decoration: BoxDecoration( color: isActive ? Colors.white : Color(0xFFD02127), shape: BoxShape.circle, ), child: Center( child: FittedBox( child: AppText( "$counter", fontSize: SizeConfig.textMultiplier * 1.5, color: !isActive ? Colors.white : Color(0xFFD02127), fontWeight: FontWeight.w700, ), ), ), ), ], ), ), ); } }