import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/search_criteria_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/search_e_referral_request_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/all_habib_medical_services/e_referral_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/E-Referral/referral_details.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/medical/balance/new_text_Field.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/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/medical/doctor_card.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/errors/app_embedded_error.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'New_E_Referral/new_e_referral_step_one_page.dart'; import 'dialogs/select_country_ingo_Dialog.dart'; import 'dialogs/select_search_criteria_dialog.dart'; class SearchForReferralsPage extends StatefulWidget { SearchForReferralsPage({Key key}); @override _SearchForReferralsPageState createState() => _SearchForReferralsPageState(); } class _SearchForReferralsPageState extends State { TextEditingController _searchTextController = TextEditingController(); TextEditingController _mobileTextController = TextEditingController(); bool _isSubmitted = false; dynamic _selectedCountry = {"name": "Saudi Arabia", "name_ar": "المملكة العربية السعودية", "code": "+966", "countryCode": "SA", "pattern": "5xxxxxxxx", "maxLength": 9}; SearchCriteriaModel selectedCriteria = SearchCriteriaModel(name: "Identification Number", nameAr: "رقم المحول", value: 1); @override Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return BaseView( onModelReady: (model) async { if (projectViewModel.isLogin) { Future.delayed(new Duration(milliseconds: 300)).then((value) async { GifLoaderDialogUtils.showMyDialog(context); SearchEReferralRequestModel searchEReferralRequestModel = new SearchEReferralRequestModel( patientMobileNumber: (projectViewModel.user.outSA == 0 ? "966" : "971") + projectViewModel.user.mobileNumber.substring(1, projectViewModel.user.mobileNumber.length), ); if (selectedCriteria.value == 1) { searchEReferralRequestModel.identificationNo = _searchTextController.text; searchEReferralRequestModel.referralNumber = 0; } else { searchEReferralRequestModel.referralNumber = int.parse(_searchTextController.text); searchEReferralRequestModel.identificationNo = projectViewModel.user.patientIdentificationNo; } await model.getEReferrals(searchEReferralRequestModel); GifLoaderDialogUtils.hideDialog(context); }); } }, builder: (_, model, widget) => AppScaffold( isShowAppBar: false, baseViewModel: model, body: SingleChildScrollView( physics: ScrollPhysics(), child: Container( margin: EdgeInsets.all(12), child: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( height: 10, ), InkWell( onTap: () => selectSearchCriteriaDialog(), 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(getSearchCriteriaName()), Icon(Icons.arrow_drop_down)], ), ), ), SizedBox( height: 12, ), NewTextFields( hintText: selectedCriteria.value == 1 ? "Enter Patient Identification No" : "Enter Referral Number", controller: _searchTextController, onChanged: (_) { setState(() {}); }, ), SizedBox( height: 12, ), InkWell( onTap: () => confirmSelectCountryTypeDialog(), 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(getCountryName()), Icon(Icons.arrow_drop_down)], ), ), ), SizedBox( height: 12, ), MobileNumberTextFiled( controller: _mobileTextController, onChange: (_) { setState(() {}); }, code: _selectedCountry == null ? "11" : _selectedCountry["code"], ), SizedBox( height: 12, ), if ((model.state == ViewState.Idle && model.allReferral.length == 0)) Center(child: Text(TranslationBase.of(context).noSearchResult)), if ((model.state == ViewState.ErrorLocal)) AppEmbeddedError(error: model.error), model.allReferral.length > 0 ? NetworkBaseView( baseViewModel: model, child: ListView.separated( separatorBuilder: (context, index) => SizedBox(height: 0), shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemCount: model.allReferral == null ? 0 : model.allReferral.length, itemBuilder: (BuildContext context, int index) { return Container( width: double.infinity, child: InkWell( onTap: () { Navigator.push( context, FadePage( page: ReferralDetails(referral: model.allReferral[index]), ), ); }, child: Card( shape: cardRadius(12), margin: EdgeInsets.all(10), child: Padding( padding: const EdgeInsets.all(12.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(projectViewModel.isArabic ? model.allReferral[index].statusAr : model.allReferral[index].status, style: TextStyle(fontSize: 14.0, letterSpacing: -0.56, fontWeight: FontWeight.bold)), Container( margin: EdgeInsets.only(top: 5.0), child: myRichText(TranslationBase.of(context).patientName + ": ", model.allReferral[index].patientName, projectViewModel.isArabic)), myRichText(TranslationBase.of(context).hospital + ": ", model.allReferral[index].preferredBranchName, projectViewModel.isArabic), myRichText(TranslationBase.of(context).referralDate + ": ", DateUtil.getMonthDayYearDateFormatted(DateUtil.convertStringToDateNoTimeZone(model.allReferral[index].referralDate)), projectViewModel.isArabic), ], ), Icon(projectViewModel.isArabic ? Icons.arrow_back_ios_outlined : Icons.arrow_forward_outlined), ], ), ), ), ), ); }, ), ) : Container(), SizedBox( height: 80.0, ) ], ), ), ), ), bottomSheet: Container( color: Theme.of(context).scaffoldBackgroundColor, width: double.infinity, padding: EdgeInsets.all(14), child: DefaultButton( TranslationBase.of(context).search, (_searchTextController.text.isEmpty || _mobileTextController.text.isEmpty) ? null : () async { SearchEReferralRequestModel searchEReferralRequestModel = new SearchEReferralRequestModel( patientMobileNumber: _selectedCountry['code'] + _mobileTextController.text, ); if (selectedCriteria.value == 1) { searchEReferralRequestModel.identificationNo = _searchTextController.text; searchEReferralRequestModel.referralNumber = 0; } else { searchEReferralRequestModel.referralNumber = int.parse(_searchTextController.text); searchEReferralRequestModel.identificationNo = ''; } await model.getEReferrals(searchEReferralRequestModel); setState(() { _isSubmitted = true; }); }, disabledColor: Colors.grey, ), ))); } void confirmSelectCountryTypeDialog() { showDialog( context: context, child: SelectCountryDialog( selectedCountry: _selectedCountry, onValueSelected: (value) { setState(() { _selectedCountry = value; }); }, ), ); } String getCountryName() { if (_selectedCountry != null) return _selectedCountry["name"]; else return "Country"; } void selectSearchCriteriaDialog() { showDialog( context: context, child: SelectSearchCriteriaDialog( selectedCriteria: selectedCriteria, onValueSelected: (value) { setState(() { selectedCriteria = value; }); }, ), ); } String getSearchCriteriaName() { return selectedCriteria.name; } }