From 61674bec4703fdd63a80e3386013d6c1ef2c0a23 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 3 Jun 2020 02:31:38 +0300 Subject: [PATCH] new pages --- lib/config/config.dart | 2 +- lib/models/pharmacies_List_request_model.dart | 2 +- .../pharmacies_items_request_model.dart | 8 +- lib/providers/medicine_provider.dart | 22 +- lib/providers/patients_provider.dart | 15 +- .../medicine/medicine_search_screen.dart | 67 ++++-- .../medicine/pharmacies_list_screen.dart | 214 ++++++++++-------- .../medicine/medicine_item_widget.dart | 57 +++-- lib/widgets/shared/app_buttons_widget.dart | 21 +- lib/widgets/shared/app_text_form_field.dart | 7 +- 10 files changed, 259 insertions(+), 156 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index 92291ed3..46eb5102 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -4,7 +4,7 @@ const ONLY_LETTERS = "[a-zA-Z]"; const ONLY_DATE = "[0-9/]"; const BASE_URL = 'https://uat.hmgwebservices.com/Services/'; -const PHARMACY_ITEMS_URL = "Lists.svc/REST/GetPharmcyItems"; +const PHARMACY_ITEMS_URL = "Lists.svc/REST/GetPharmcyItems_Region"; const PHARMACY_LIST_URL = "Patients.svc/REST/GetPharmcyList"; const PATIENT_PROGRESS_NOTE_URL = "DoctorApplication.svc/REST/GetProgressNoteForInPatient"; const PATIENT_INSURANCE_APPROVALS_URL = "DoctorApplication.svc/REST/GetApprovalStatusForInpatient"; diff --git a/lib/models/pharmacies_List_request_model.dart b/lib/models/pharmacies_List_request_model.dart index a2b4e5c2..eea446dd 100644 --- a/lib/models/pharmacies_List_request_model.dart +++ b/lib/models/pharmacies_List_request_model.dart @@ -29,7 +29,7 @@ class PharmaciesListRequestModel { this.stamp = '2020-04-23T21:01:21.492Z', this.ipAdress = '11.11.11.11', this.versionID = 1.2, - this.tokenID = '@dm!n', + this.tokenID , this.sessionID = 'e29zoooEJ4', this.isLoginForDoctorApp = true, this.channel = 9, diff --git a/lib/models/pharmacies_items_request_model.dart b/lib/models/pharmacies_items_request_model.dart index 210c8db7..f9531e63 100644 --- a/lib/models/pharmacies_items_request_model.dart +++ b/lib/models/pharmacies_items_request_model.dart @@ -22,10 +22,10 @@ class PharmaciesItemsRequestModel { this.patientTypeID = 1, this.languageID = 2, this.stamp = '2020-04-23T21:01:21.492Z', - this.ipAdress = '11.11.11.11', - this.versionID = 1.2, - this.tokenID = '@dm!n', - this.sessionID = 'e29zoooEJ4', + this.ipAdress = '10.20.10.20', + this.versionID = 5.2, + this.tokenID , + this.sessionID = "KvFJENeAUCxyVdIfEkHw", this.isLoginForDoctorApp = true, this.patientOutSA = false}); diff --git a/lib/providers/medicine_provider.dart b/lib/providers/medicine_provider.dart index 5e7a0ef4..97e030fe 100644 --- a/lib/providers/medicine_provider.dart +++ b/lib/providers/medicine_provider.dart @@ -2,15 +2,19 @@ import 'dart:convert'; import 'package:doctor_app_flutter/client/app_client.dart'; import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/models/pharmacies_List_request_model.dart'; import 'package:doctor_app_flutter/models/pharmacies_items_request_model.dart'; +import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:flutter/cupertino.dart'; class MedicineProvider with ChangeNotifier { + DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); + var pharmacyItemsList = []; var pharmaciesList = []; - bool isFinished = false; + bool isFinished = true; bool hasError = false; String errorMsg = ''; @@ -18,12 +22,15 @@ class MedicineProvider with ChangeNotifier { PharmaciesListRequestModel _listRequestModel = PharmaciesListRequestModel(); Future getMedicineItem(String itemName) async { + resetDefaultValues(); try { if (await Helpers.checkConnection()) { _itemsRequestModel.phrItemName = itemName; + final response = await AppClient.post(PHARMACY_ITEMS_URL, body: json.encode(_itemsRequestModel.toJson())); final int statusCode = response.statusCode; + isFinished = true; if (statusCode < 200 || statusCode >= 400 || json == null) { isFinished = true; hasError = true; @@ -31,7 +38,7 @@ class MedicineProvider with ChangeNotifier { } else { var parsed = json.decode(response.body.toString()); if (parsed['MessageStatus'] == 1) { - pharmacyItemsList = parsed['ListPharmcy']; + pharmacyItemsList = parsed['ListPharmcy_Region']; hasError = false; isFinished = true; errorMsg = "Done"; @@ -54,12 +61,16 @@ class MedicineProvider with ChangeNotifier { } Future getPharmaciesList(int itemId) async { + String token = await sharedPref.getString(TOKEN); + resetDefaultValues(); try { if (await Helpers.checkConnection()) { _listRequestModel.itemID = itemId; + _listRequestModel.tokenID = token; final response = await AppClient.post(PHARMACY_LIST_URL, body: json.encode(_listRequestModel.toJson())); final int statusCode = response.statusCode; + isFinished = true; if (statusCode < 200 || statusCode >= 400 || json == null) { isFinished = true; hasError = true; @@ -88,4 +99,11 @@ class MedicineProvider with ChangeNotifier { return errorMsg; } + + resetDefaultValues() { + isFinished = false; + hasError = false; + errorMsg = ''; + notifyListeners(); + } } diff --git a/lib/providers/patients_provider.dart b/lib/providers/patients_provider.dart index c5f92247..f880f43e 100644 --- a/lib/providers/patients_provider.dart +++ b/lib/providers/patients_provider.dart @@ -30,6 +30,11 @@ class PatientsProvider with ChangeNotifier { List patientLabResultOrdersList = []; List patientPrescriptionsList = []; List patientRadiologyList = []; + + /*@author: ibrahe albitar + *@Date:2/6/2020 + *@desc: getPatientPrescriptions + */ var patientProgressNoteList = []; var insuranceApporvalsList = []; @@ -283,7 +288,10 @@ class PatientsProvider with ChangeNotifier { } } - +/*@author: ibrahe albitar + *@Date:2/6/2020 + *@desc: getPatientPrescriptions + */ getPatientProgressNote(patient) async{ setBasicData(); try { @@ -315,7 +323,10 @@ class PatientsProvider with ChangeNotifier { handelCatchErrorCase(err); } } - +/*@author: ibrahe albitar + *@Date:2/6/2020 + *@desc: getPatientPrescriptions + */ getPatientInsuranceApprovals(patient) async{ setBasicData(); diff --git a/lib/screens/medicine/medicine_search_screen.dart b/lib/screens/medicine/medicine_search_screen.dart index d49adb22..1add0181 100644 --- a/lib/screens/medicine/medicine_search_screen.dart +++ b/lib/screens/medicine/medicine_search_screen.dart @@ -9,6 +9,8 @@ import 'package:doctor_app_flutter/widgets/medicine/medicine_item_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/dr_app_circular_progress_Indeicator.dart'; import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -31,45 +33,51 @@ class _MedicineSearchState extends State { MedicineProvider _medicineProvider; + bool _isInit = true; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + if (_isInit) { + _medicineProvider = Provider.of(context); + } + _isInit = false; + } + @override Widget build(BuildContext context) { - _medicineProvider = Provider.of(context); + return AppScaffold( appBarTitle: "Search Medicine", body: Column( children: [ - RoundedContainer( - child: Column( - children: [ - Icon( - Icons.search, - size: SizeConfig.imageSizeMultiplier * 15, - ), Padding( padding: EdgeInsets.only( - bottom: SizeConfig.heightMultiplier * 5, - right: SizeConfig.heightMultiplier * 3, - left: SizeConfig.heightMultiplier * 3, + bottom: SizeConfig.heightMultiplier * 1, + right: SizeConfig.heightMultiplier * 2, + left: SizeConfig.heightMultiplier * 2, top: SizeConfig.heightMultiplier * 3), child: AppTextFormField( - hintText: 'Type Medicine Name Here..', + hintText: 'Search Medicine Name Here..', controller: myController, onSaved: (value) {}, // validator: (value) { // return TextValidator().validateName(value); // }, inputFormatter: ONLY_LETTERS), - ) - ], - )), + ), + Container( - margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), + margin: EdgeInsets.only(bottom: 5, + left: 10, + right: 10, + top: 0), child: Wrap( alignment: WrapAlignment.center, children: [ AppButton( title: "Search", - color: Color(0xff58434F), + color: Color(PRIMARY_COLOR), onPressed: () { searchMedicine(context); }, @@ -77,17 +85,40 @@ class _MedicineSearchState extends State { ], ), ), + Container( + margin: EdgeInsets.only(left: SizeConfig.heightMultiplier * 2), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AppText( + "You find " + (data == null ? "0": data.length.toString())+" items in search", + fontWeight: FontWeight.bold, + margin: 5,), + ], + ), + ), Expanded( child: Container( width: SizeConfig.screenWidth * 0.80, - child: ListView.builder( + child: !_medicineProvider.isFinished + ? DrAppCircularProgressIndeicator() + : _medicineProvider.hasError + ? Center( + child: Text( + _medicineProvider.errorMsg, + style: TextStyle( + color: Theme.of(context).errorColor), + ), + ):ListView.builder( scrollDirection: Axis.vertical, shrinkWrap: true, itemCount: data == null ? 0 : data.length, itemBuilder: (BuildContext context, int index) { + return InkWell( child: MedicineItemWidget( label: data[index]["ItemDescription"], + url: data[index]["ProductImageBase64"], ), onTap: () { Navigator.push( diff --git a/lib/screens/medicine/pharmacies_list_screen.dart b/lib/screens/medicine/pharmacies_list_screen.dart index c34d26e4..4c682cea 100644 --- a/lib/screens/medicine/pharmacies_list_screen.dart +++ b/lib/screens/medicine/pharmacies_list_screen.dart @@ -15,7 +15,6 @@ import 'package:provider/provider.dart'; import 'package:maps_launcher/maps_launcher.dart'; import 'package:url_launcher/url_launcher.dart'; - DrAppSharedPreferances sharedPref = DrAppSharedPreferances(); class PharmaciesListScreen extends StatefulWidget { @@ -32,118 +31,139 @@ class _PharmaciesListState extends State { var _data; Helpers helpers = new Helpers(); MedicineProvider _medicineProvider; + + bool _isInit = true; //bool _isOutOfStuck = false; + @override + void didChangeDependencies() { + super.didChangeDependencies(); + if (_isInit) { + _medicineProvider = Provider.of(context); + pharmaciesList(); + } + _isInit = false; + } + @override Widget build(BuildContext context) { - _medicineProvider = Provider.of(context); - pharmaciesList(); return AppScaffold( appBarTitle: "Pharmacies List", - body: Column( - children: [ - RoundedContainer( - child: !_medicineProvider.isFinished - ? DrAppCircularProgressIndeicator() - : _medicineProvider.hasError - ? Center( - child: Text( - _medicineProvider.errorMsg, - style: TextStyle( - color: Theme.of(context).errorColor), + body: Column(children: [ + RoundedContainer( + child: !_medicineProvider.isFinished + ? DrAppCircularProgressIndeicator() + : _medicineProvider.hasError + ? Center( + child: Text( + _medicineProvider.errorMsg, + style: + TextStyle(color: Theme.of(context).errorColor), + ), + ) + : Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + AppText( + "Description", + margin: 10, + fontWeight: FontWeight.bold, ), - ) - : Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - AppText( - "Description", - margin: 10, - fontWeight: FontWeight.bold, - ), - AppText( - _data[0]["ItemDescription"], - marginLeft: 10, - marginTop: 0, - marginRight: 10, - marginBottom: 10, - ), - AppText( - "Price", - margin: 10, - fontWeight: FontWeight.bold, - ), - AppText( - _data[0]["SellingPrice"].toString(), - marginLeft: 10, - marginTop: 0, - marginRight: 10, - marginBottom: 10, - ), - ], - )), - Container( - margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), - child: Align( - alignment: Alignment.centerLeft, - child: AppText( - "You can Find it in", - fontWeight: FontWeight.bold, - fontSize: SizeConfig.textMultiplier * 3, - ))), - Expanded( - child: Container( - width: SizeConfig.screenWidth * 0.80, - child: ListView.builder( + AppText( + _data[0]["ItemDescription"], + marginLeft: 10, + marginTop: 0, + marginRight: 10, + marginBottom: 10, + ), + AppText( + "Price", + margin: 10, + fontWeight: FontWeight.bold, + ), + AppText( + _data[0]["SellingPrice"].toString(), + marginLeft: 10, + marginTop: 0, + marginRight: 10, + marginBottom: 10, + ), + ], + )), + Container( + margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), + child: Align( + alignment: Alignment.centerLeft, + child: AppText( + "You can Find it in", + fontWeight: FontWeight.bold, + fontSize: SizeConfig.textMultiplier * 3, + ))), + Expanded( + child: Container( + width: SizeConfig.screenWidth * 0.99, + child: ListView.builder( scrollDirection: Axis.vertical, shrinkWrap: true, itemCount: _data == null ? 0 : _data.length, itemBuilder: (BuildContext context, int index) { - return Column( - children: [ - MedicineItemWidget( - label: _data[index]["LocationDescription"], - ), - Container( - margin: EdgeInsets.only(bottom: 10), - child: Row( - children: [ - Expanded(flex: 2, child: SizedBox()), - Expanded( - flex: 6, - child: AppButton( - title: "Call", - fontSize: 2, - color: Colors.brown[200], - padding: 0, - onPressed: () => launch("tel://"+_data[index]["PhoneNumber"])), + return RoundedContainer( + child: Row( + children: [ + Expanded( + flex: 1, + child: ClipRRect( + borderRadius:BorderRadius.all(Radius.circular(7)), + child: Image.network( + _data[index]["ProjectImageURL"], + height: SizeConfig.imageSizeMultiplier * 15, + width: SizeConfig.imageSizeMultiplier * 15, + fit: BoxFit.cover, ), - Expanded(flex: 1, child: SizedBox()), - Expanded( - flex: 6, - child: AppButton( - title: "Direction", - fontSize: 2, - color: Color(PRIMARY_COLOR), - padding: 0, - onPressed: () { - MapsLauncher.launchCoordinates(double.parse(_data[index]["Latitude"]), double.parse( _data[index]["Longitude"]), _data[index]["LocationDescription"] ); - }), - + ), + ), + Expanded( + flex: 4, + child: AppText( + _data[index]["LocationDescription"], + margin: 10, + ), + ), + Expanded( + flex: 2, + child: Wrap( + direction: Axis.horizontal, + alignment: WrapAlignment.end, + crossAxisAlignment: WrapCrossAlignment.end, + children: [ + Padding( + padding: EdgeInsets.all(5), + child: InkWell(child: Icon(Icons.call, color: Colors.red,),onTap: ()=>launch( + "tel://" + _data[index]["PhoneNumber"]),), ), - Expanded(flex: 2, child: SizedBox()), - ], +Padding( + padding: EdgeInsets.all(5), + child: InkWell(child: Icon(Icons.pin_drop, color: Colors.red,),onTap: () { + MapsLauncher.launchCoordinates( + double.parse(_data[index]["Latitude"]), + double.parse(_data[index]["Longitude"]), + _data[index]["LocationDescription"]); + },), + ), + ], + + ), ), - ) - ], + + + ], + ), ); - }, - ), - ), + }), ), - ], - )); + ) + ])); } Future pharmaciesList() async { diff --git a/lib/widgets/medicine/medicine_item_widget.dart b/lib/widgets/medicine/medicine_item_widget.dart index e18477c4..1d606793 100644 --- a/lib/widgets/medicine/medicine_item_widget.dart +++ b/lib/widgets/medicine/medicine_item_widget.dart @@ -1,5 +1,9 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/widgets/shared/profile_image_widget.dart'; import '../shared/rounded_container_widget.dart'; import '../shared/app_texts_widget.dart'; @@ -19,8 +23,9 @@ final String label; final Color backgroundColor; final bool showBorder; final Color borderColor; +final String url; -MedicineItemWidget({ @required this.label, this.backgroundColor = Colors.white, this.showBorder = false, this.borderColor = Colors.white}); +MedicineItemWidget({ @required this.label, this.backgroundColor = Colors.white, this.showBorder = false, this.borderColor = Colors.white, this.url}); @override _MedicineItemWidgetState createState() => _MedicineItemWidgetState(); } @@ -30,23 +35,41 @@ class _MedicineItemWidgetState extends State { Widget build(BuildContext context) { return new RoundedContainer( height: SizeConfig.heightMultiplier * 8, - child:Row( - crossAxisAlignment: CrossAxisAlignment.stretch, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - RoundedContainer( - width: SizeConfig.widthMultiplier * 2, - backgroundColor: Color(PRIMARY_COLOR), - margin: 0, - topLeft: 6, - topRight: 0, - bottomLeft: 6, - bottomRight: 0, - customCornerRaduis: true, - child: SizedBox(width: SizeConfig.widthMultiplier, height: SizeConfig.heightMultiplier*3,), + child:Padding( + padding: const EdgeInsets.all(5.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.stretch, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + if(widget.url != null) Container( + height: 39, + width: 39, + child: ClipRRect( + borderRadius:BorderRadius.all(Radius.circular(7)), + child: Image.memory( + dataFromBase64String(widget.url), + height: SizeConfig.imageSizeMultiplier * 15, + width: SizeConfig.imageSizeMultiplier * 15, + fit: BoxFit.cover, + ), + ), ), - Expanded(child: Padding( padding: EdgeInsets.all(5), child: Align( alignment: Alignment.centerLeft, child: AppText(widget.label)))) - ],), + Expanded(child: Padding( padding: EdgeInsets.all(5), child: Align( alignment: Alignment.centerLeft, child: AppText(widget.label)))) + ],), + ), backgroundColor: widget.backgroundColor, showBorder: widget.showBorder, borderColor: widget.borderColor, margin: 4, raduis: 10,); } + + Image imageFromBase64String(String base64String) { + return Image.memory(base64Decode(base64String)); +} + +Uint8List dataFromBase64String(String base64String) { + return base64Decode(base64String); +} + +String base64String(Uint8List data) { + return base64Encode(data); +} + } \ No newline at end of file diff --git a/lib/widgets/shared/app_buttons_widget.dart b/lib/widgets/shared/app_buttons_widget.dart index 10bf6997..7b911d9a 100644 --- a/lib/widgets/shared/app_buttons_widget.dart +++ b/lib/widgets/shared/app_buttons_widget.dart @@ -29,21 +29,22 @@ class AppButton extends StatefulWidget { splashColor: widget.color, child: Padding( padding: EdgeInsets.only( - top: 10, - bottom: 10, - right: SizeConfig.widthMultiplier * widget.padding, - left: SizeConfig.widthMultiplier * widget.padding + top: 15, + bottom: 15, + //right: SizeConfig.widthMultiplier * widget.padding, + //left: SizeConfig.widthMultiplier * widget.padding ), child: Row( - mainAxisSize: MainAxisSize.min, + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, children: [ - /*Icon( + if (widget.icon != null) Icon( widget.icon, color: Colors.white, ), - SizedBox( - width: 10.0, - ),*/ + if (widget.icon != null) SizedBox( + width: 5.0, + ), AppText( widget.title, color: Colors.white, @@ -54,7 +55,7 @@ class AppButton extends StatefulWidget { ), ), onPressed: widget.onPressed, - shape: const StadiumBorder(), + shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(10))), ); } } \ No newline at end of file diff --git a/lib/widgets/shared/app_text_form_field.dart b/lib/widgets/shared/app_text_form_field.dart index 54b0f9a3..fd50ad66 100644 --- a/lib/widgets/shared/app_text_form_field.dart +++ b/lib/widgets/shared/app_text_form_field.dart @@ -36,17 +36,16 @@ class AppTextFormField extends FormField { hintText: hintText, hintStyle: TextStyle(fontSize: SizeConfig.textMultiplier * 2), enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(30)), + borderRadius: BorderRadius.all(Radius.circular(10)), borderSide: BorderSide(color: Color(0xff707070)), ), focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(30)), + borderRadius: BorderRadius.all(Radius.circular(10)), ) //BorderRadius.all(Radius.circular(20)); ), onTap: onTap, - controller: controller, - + controller: controller, ), state.hasError? Text(