diff --git a/lib/main.dart b/lib/main.dart index d5f65406..bb3000ee 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,3 +1,4 @@ +import 'package:doctor_app_flutter/providers/medicine_provider.dart'; import 'package:doctor_app_flutter/providers/project_provider.dart'; import 'package:doctor_app_flutter/providers/schedule_provider.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; @@ -30,7 +31,8 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (context) => AuthProvider()), ChangeNotifierProvider(create: (context) => HospitalProvider()), ChangeNotifierProvider(create: (context) => ProjectProvider(),), - ChangeNotifierProvider(create: (context) => ScheduleProvider(),) + ChangeNotifierProvider(create: (context) => ScheduleProvider(),), + ChangeNotifierProvider(create: (context) => MedicineProvider(),), ], child: Consumer( builder: (context,projectProvider,child) => MaterialApp( diff --git a/lib/providers/medicine_provider.dart b/lib/providers/medicine_provider.dart index 661a5e81..873d28a7 100644 --- a/lib/providers/medicine_provider.dart +++ b/lib/providers/medicine_provider.dart @@ -1,103 +1,72 @@ -import 'dart:convert'; - -import 'package:doctor_app_flutter/client/app_client.dart'; +import 'package:doctor_app_flutter/client/base_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/pharmacies_List_request_model.dart'; import 'package:doctor_app_flutter/models/pharmacies/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 = true; bool hasError = false; String errorMsg = ''; - PharmaciesItemsRequestModel _itemsRequestModel =PharmaciesItemsRequestModel(); + PharmaciesItemsRequestModel _itemsRequestModel = + PharmaciesItemsRequestModel(); PharmaciesListRequestModel _listRequestModel = PharmaciesListRequestModel(); - Future getMedicineItem(String itemName) async { + + clearPharmacyItemsList(){ + pharmacyItemsList.clear(); + notifyListeners(); + } + + getMedicineItem(String itemName) async { + _itemsRequestModel.pHRItemName = itemName; resetDefaultValues(); + pharmacyItemsList.clear(); + notifyListeners(); 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; - errorMsg = 'Error While Fetching data'; - } else { - var parsed = json.decode(response.body.toString()); - if (parsed['MessageStatus'] == 1) { - pharmacyItemsList = parsed['ListPharmcy_Region']; + await BaseAppClient.post(PHARMACY_ITEMS_URL, + onSuccess: (dynamic response, int statusCode) { + pharmacyItemsList = response['ListPharmcy_Region']; hasError = false; isFinished = true; errorMsg = "Done"; - } else { + }, onFailure: (String error, int statusCode) { + isFinished = true; hasError = true; - errorMsg = parsed['ErrorMessage'] ?? parsed['ErrorEndUserMessage']; - } - } - } else { - isFinished = true; - hasError = true; - errorMsg = 'Please Check The Internet Connection'; - } + errorMsg = error; + }, body: _itemsRequestModel.toJson()); notifyListeners(); } catch (error) { throw error; } - - return errorMsg; } - Future getPharmaciesList(int itemId) async { - String token = await sharedPref.getString(TOKEN); + getPharmaciesList(int itemId) async { 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; - errorMsg = 'Error While Fetching data'; - } else { - var parsed = json.decode(response.body.toString()); - if (parsed['MessageStatus'] == 1) { - pharmaciesList = parsed['PharmList']; + _listRequestModel.itemID = itemId; + isFinished = true; + await BaseAppClient.post(PHARMACY_LIST_URL, + onSuccess: (dynamic response, int statusCode) { + pharmaciesList = response['PharmList']; hasError = false; isFinished = true; errorMsg = "Done"; - } else { + }, onFailure: (String error, int statusCode) { + isFinished = true; hasError = true; - errorMsg = parsed['ErrorMessage'] ?? parsed['ErrorEndUserMessage']; - } - } - } else { - isFinished = true; - hasError = true; - errorMsg = 'Please Check The Internet Connection'; - } + errorMsg = error; + }, body: _listRequestModel.toJson()); notifyListeners(); } catch (error) { throw error; } - - return errorMsg; } resetDefaultValues() { diff --git a/lib/screens/medicine/medicine_search_screen.dart b/lib/screens/medicine/medicine_search_screen.dart index 5c8726d7..67b4a651 100644 --- a/lib/screens/medicine/medicine_search_screen.dart +++ b/lib/screens/medicine/medicine_search_screen.dart @@ -92,7 +92,7 @@ class _MedicineSearchState extends State { children: [ AppText( TranslationBase.of(context).youCanFind + - (data == null ? "0" : data.length.toString()) + + (_medicineProvider.pharmacyItemsList == null ? "0" : _medicineProvider.pharmacyItemsList.length.toString()) + TranslationBase.of(context).itemsInSearch, fontWeight: FontWeight.bold, margin: 5, @@ -116,25 +116,22 @@ class _MedicineSearchState extends State { : ListView.builder( scrollDirection: Axis.vertical, shrinkWrap: true, - itemCount: data == null ? 0 : data.length, + itemCount: _medicineProvider.pharmacyItemsList == null ? 0 : _medicineProvider.pharmacyItemsList.length, itemBuilder: (BuildContext context, int index) { return InkWell( child: MedicineItemWidget( - label: data[index]["ItemDescription"], - url: data[index]["ProductImageBase64"], + label: _medicineProvider.pharmacyItemsList[index]["ItemDescription"], + url: _medicineProvider.pharmacyItemsList[index]["ProductImageBase64"], ), onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => - ChangeNotifierProvider( - create: (_) => MedicineProvider(), - child: PharmaciesListScreen( - itemID: data[index]["ItemID"], - url: data[index] - ["ProductImageBase64"]), - ), + PharmaciesListScreen( + itemID: _medicineProvider.pharmacyItemsList[index]["ItemID"], + url: _medicineProvider.pharmacyItemsList[index] + ["ProductImageBase64"]), ), ); }, @@ -150,16 +147,10 @@ class _MedicineSearchState extends State { searchMedicine(context) { FocusScope.of(context).unfocus(); if (myController.text.isNullOrEmpty()) { - this.setState(() { - data = null; - }); + _medicineProvider.clearPharmacyItemsList(); helpers.showErrorToast("Type Medicine Name"); return; } - _medicineProvider.getMedicineItem(myController.text).then((str) { - this.setState(() { - data = _medicineProvider.pharmacyItemsList; - }); - }); + _medicineProvider.getMedicineItem(myController.text); } } diff --git a/lib/screens/medicine/pharmacies_list_screen.dart b/lib/screens/medicine/pharmacies_list_screen.dart index 2f42a8ea..fbbae4f4 100644 --- a/lib/screens/medicine/pharmacies_list_screen.dart +++ b/lib/screens/medicine/pharmacies_list_screen.dart @@ -55,7 +55,17 @@ class _PharmaciesListState extends State { projectsProvider = Provider.of(context); return AppScaffold( appBarTitle: TranslationBase.of(context).pharmaciesList, - body: Container( + body: !_medicineProvider.isFinished + ? DrAppCircularProgressIndeicator() + : _medicineProvider.hasError + ? Center( + child: Text( + _medicineProvider.errorMsg, + style: TextStyle( + color: Theme.of(context).errorColor), + ), + ) + :Container( height: SizeConfig.screenHeight, child: ListView( shrinkWrap: true, @@ -63,84 +73,70 @@ class _PharmaciesListState extends State { physics: const AlwaysScrollableScrollPhysics(), children: [ RoundedContainer( - child: !_medicineProvider.isFinished - ? DrAppCircularProgressIndeicator() - : _medicineProvider.hasError - ? Center( - child: Text( - _medicineProvider.errorMsg, - style: TextStyle( - color: Theme.of(context).errorColor), - ), - ) - : StreamBuilder( - stream: null, - builder: (context, snapshot) { - return Row( - children: [ - Expanded( - flex: 1, - child: ClipRRect( - borderRadius: BorderRadius.all( - Radius.circular(7)), - child: Image.memory( - dataFromBase64String(widget.url), - height: - SizeConfig.imageSizeMultiplier * - 21, - width: - SizeConfig.imageSizeMultiplier * - 20, - fit: BoxFit.cover, - ), - ), - ), - Expanded( - flex: 3, - child: Column( - mainAxisAlignment: - MainAxisAlignment.start, - crossAxisAlignment: - CrossAxisAlignment.stretch, - children: [ - AppText( - TranslationBase.of(context) - .description, - marginLeft: 10, - marginTop: 0, - marginRight: 10, - marginBottom: 2, - fontWeight: FontWeight.bold, - ), - AppText( - _data[0]["ItemDescription"], - marginLeft: 10, - marginTop: 0, - marginRight: 10, - marginBottom: 10, - ), - AppText( - TranslationBase.of(context).price, - marginLeft: 10, - marginTop: 0, - marginRight: 10, - marginBottom: 2, - fontWeight: FontWeight.bold, - ), - AppText( - _data[0]["SellingPrice"] - .toString(), - marginLeft: 10, - marginTop: 0, - marginRight: 10, - marginBottom: 10, - ), - ], - ), - ) - ], - ); - })), + child: Row( + children: [ + Expanded( + flex: 1, + child: ClipRRect( + borderRadius: BorderRadius.all( + Radius.circular(7)), + child: Image.memory( + dataFromBase64String(widget.url), + height: + SizeConfig.imageSizeMultiplier * + 21, + width: + SizeConfig.imageSizeMultiplier * + 20, + fit: BoxFit.cover, + ), + ), + ), + Expanded( + flex: 3, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.stretch, + children: [ + AppText( + TranslationBase.of(context) + .description, + marginLeft: 10, + marginTop: 0, + marginRight: 10, + marginBottom: 2, + fontWeight: FontWeight.bold, + ), + AppText( + _medicineProvider.pharmaciesList[0]["ItemDescription"], + marginLeft: 10, + marginTop: 0, + marginRight: 10, + marginBottom: 10, + ), + AppText( + TranslationBase.of(context).price, + marginLeft: 10, + marginTop: 0, + marginRight: 10, + marginBottom: 2, + fontWeight: FontWeight.bold, + ), + AppText( + _medicineProvider.pharmaciesList[0]["SellingPrice"] + .toString(), + marginLeft: 10, + marginTop: 0, + marginRight: 10, + marginBottom: 10, + ), + ], + ), + ) + ], + )), Container( margin: EdgeInsets.only( top: SizeConfig.widthMultiplier * 2, @@ -165,7 +161,7 @@ class _PharmaciesListState extends State { child: ListView.builder( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), - itemCount: _data == null ? 0 : _data.length, + itemCount: _medicineProvider.pharmaciesList == null ? 0 : _medicineProvider.pharmaciesList.length, itemBuilder: (BuildContext context, int index) { return RoundedContainer( child: Row( @@ -176,7 +172,7 @@ class _PharmaciesListState extends State { borderRadius: BorderRadius.all(Radius.circular(7)), child: Image.network( - _data[index]["ProjectImageURL"], + _medicineProvider.pharmaciesList[index]["ProjectImageURL"], height: SizeConfig.imageSizeMultiplier * 15, width: @@ -188,7 +184,7 @@ class _PharmaciesListState extends State { Expanded( flex: 4, child: AppText( - _data[index]["LocationDescription"], + _medicineProvider.pharmaciesList[index]["LocationDescription"], margin: 10, ), ), @@ -207,7 +203,7 @@ class _PharmaciesListState extends State { color: Colors.red, ), onTap: () => launch("tel://" + - _data[index]["PhoneNumber"]), + _medicineProvider.pharmaciesList[index]["PhoneNumber"]), ), ), Padding( @@ -220,10 +216,10 @@ class _PharmaciesListState extends State { onTap: () { MapsLauncher.launchCoordinates( double.parse( - _data[index]["Latitude"]), + _medicineProvider.pharmaciesList[index]["Latitude"]), double.parse( - _data[index]["Longitude"]), - _data[index] + _medicineProvider.pharmaciesList[index]["Longitude"]), + _medicineProvider.pharmaciesList[index] ["LocationDescription"]); }, ), @@ -241,19 +237,15 @@ class _PharmaciesListState extends State { )); } - Future pharmaciesList() async { - _medicineProvider.getPharmaciesList(widget.itemID).then((result) { - this.setState(() { - _data = _medicineProvider.pharmaciesList; - }); - }); - return true; + pharmaciesList() async { + _medicineProvider.getPharmaciesList(widget.itemID); } Image imageFromBase64String(String base64String) { return Image.memory(base64Decode(base64String)); } + //TODO CHECK THE URL IS NULL OR NOT Uint8List dataFromBase64String(String base64String) { return base64Decode(base64String); }