From 22a21faff75cc17567910a15c97c384b180aaa59 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 30 Apr 2020 01:30:23 +0300 Subject: [PATCH] pharmacies screen --- lib/routes.dart | 2 +- .../medicine/medicine_search_screen.dart | 125 +++++++++++++++--- .../medicine/pharmacies_list_screen.dart | 108 +++++++++++++-- .../medicine/medicine_item_widget.dart | 51 +++++++ 4 files changed, 258 insertions(+), 28 deletions(-) create mode 100644 lib/widgets/medicine/medicine_item_widget.dart diff --git a/lib/routes.dart b/lib/routes.dart index 75211a7c..d3c00c70 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -52,5 +52,5 @@ var routes = { VERIFY_ACCOUNT: (_) => VerifyAccountScreen(), VERIFICATION_METHODS:(_)=> VerificationMethodsScreen(), PATIENTS_PROFILE:(_)=> PatientProfileScreen(), - PHARMACIES_LIST: (_) => PharmaciesListScreen() + PHARMACIES_LIST: (_) => PharmaciesListScreen(itemID: null,) }; diff --git a/lib/screens/medicine/medicine_search_screen.dart b/lib/screens/medicine/medicine_search_screen.dart index a8c15377..b427982a 100644 --- a/lib/screens/medicine/medicine_search_screen.dart +++ b/lib/screens/medicine/medicine_search_screen.dart @@ -1,12 +1,20 @@ +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/models/pharmacies_items_request_model.dart'; import 'package:doctor_app_flutter/providers/medicine_provider.dart'; +import 'package:doctor_app_flutter/screens/medicine/pharmacies_list_screen.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; +import 'package:doctor_app_flutter/util/helpers.dart'; +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/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; - import '../../routes.dart'; +import '../../util/extenstions.dart'; DrAppSharedPreferances sharedPref = DrAppSharedPreferances(); @@ -19,9 +27,12 @@ class MedicineSearchScreen extends StatefulWidget with DrAppToastMsg { } class _MedicineSearchState extends State { + var data; + final myController = TextEditingController(); + Helpers helpers = new Helpers(); + var _medicineModel = PharmaciesItemsRequestModel( IsLoginForDoctorApp: true, - PHR_itemName: "Panadol", PatientOutSA: false, PatientTypeID: 1, LanguageID: 2, @@ -30,6 +41,7 @@ class _MedicineSearchState extends State { TokenID: "2Fi7HoIHB0eDyekVa6tCJg==", stamp: "2020-04-23T21:01:21.492Z", SessionID: "e29zoooEJ4"); + @override Widget build(BuildContext context) { return ChangeNotifierProvider( @@ -37,34 +49,113 @@ class _MedicineSearchState extends State { child: Consumer( builder: (context, provider, child) => AppScaffold( appBarTitle: "Search Medicine", - body: RaisedButton( - onPressed: () { - MedicineProvider medicineProvider = - Provider.of(context); - searchMedicine(context, medicineProvider); - Navigator.of(context).pushNamed(PHARMACIES_LIST); - }, + 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, + top: SizeConfig.heightMultiplier * 3), + child: AppTextFormField( + hintText: 'Type Medicine Name Here..', + controller: myController, + onSaved: (value) {}, + // validator: (value) { + // return TextValidator().validateName(value); + // }, + inputFormatter: ONLY_LETTERS), + ) + ], + )), + Container( + margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: "Search", + color: Color(0xff58434F), + onPressed: () { + MedicineProvider medicineProvider = + Provider.of(context); + searchMedicine(context, medicineProvider); + }, + ), + ], + ), + ), + Expanded( + child: Container( + width: SizeConfig.screenWidth * 0.80, + child: 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"], + ), + onTap: () { + //Navigator.of(context).pushNamed(PHARMACIES_LIST); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => PharmaciesListScreen( + itemID: data[index]["ItemID"]), + ), + ); + }, + ); + }, + ), + ), + ), + ], )))); } - searchMedicine( - context, MedicineProvider medicineProvider) { + searchMedicine(context, MedicineProvider medicineProvider) { + FocusScope.of(context).unfocus(); + if (myController.text.isNullOrEmpty()) { + this.setState(() { + data = null; + }); + helpers.showErrorToast("Type Medicine Name"); + return; + } + _medicineModel.PHR_itemName = myController.text; medicineProvider.getMedicineItem(_medicineModel).then((res) { - if (res['MessageStatus'] == 1) { print("ListMedicine " + res['ListPharmcy'].toString()); - - //Navigator.of(context).pushNamed(); + this.setState(() { + data = res['ListPharmcy']; + }); + //Navigator.of(context).pushNamed(PHARMACIES_LIST); } else { // handel error - // widget.showCenterShortLoadingToast("watting"); - //helpers.showErrorToast(res['ErrorEndUserMessage']); + this.setState(() { + data = null; + }); + widget.showCenterShortLoadingToast("watting"); + helpers.showErrorToast(res['ErrorEndUserMessage']); } // Navigator.of(context).pushNamed(HOME); }).catchError((err) { print('$err'); - //helpers.showErrorToast(); + this.setState(() { + data = null; + }); + helpers.showErrorToast(); }); } } diff --git a/lib/screens/medicine/pharmacies_list_screen.dart b/lib/screens/medicine/pharmacies_list_screen.dart index 7a889d98..9227c771 100644 --- a/lib/screens/medicine/pharmacies_list_screen.dart +++ b/lib/screens/medicine/pharmacies_list_screen.dart @@ -1,20 +1,32 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/models/pharmacies_List_request_model.dart'; import 'package:doctor_app_flutter/providers/medicine_provider.dart'; import 'package:doctor_app_flutter/util/dr_app_shared_pref.dart'; +import 'package:doctor_app_flutter/util/helpers.dart'; +import 'package:doctor_app_flutter/widgets/medicine/medicine_item_widget.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/rounded_container_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; DrAppSharedPreferances sharedPref = DrAppSharedPreferances(); class PharmaciesListScreen extends StatefulWidget { + final int itemID; + + // In the constructor, require a item id. + PharmaciesListScreen({Key key, @required this.itemID}) : super(key: key); + @override _PharmaciesListState createState() => _PharmaciesListState(); } class _PharmaciesListState extends State { + var data; + Helpers helpers = new Helpers(); + var _pharmaciesModel = PharmaciesListRequestModel( - ItemID: 90417, IsLoginForDoctorApp: true, PatientOutSA: false, PatientTypeID: 1, @@ -29,24 +41,100 @@ class _PharmaciesListState extends State { @override Widget build(BuildContext context) { return ChangeNotifierProvider( - create: (context) => MedicineProvider(), //change builder to create + create: (context) => MedicineProvider(), + //change builder to create child: Consumer( builder: (context, provider, child) => AppScaffold( appBarTitle: "Pharmacies List", - body: RaisedButton( - onPressed: () { - MedicineProvider medicineProvider = - Provider.of(context); - pharmaciesList(context, medicineProvider); - }, - )))); + body: Column( + children: [ + RoundedContainer( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + AppText( + "Description", + margin: 10, + fontWeight: FontWeight.bold, + ), + AppText( + "ItemDescription", + marginLeft: 10, + marginTop: 0, + marginRight: 10, + marginBottom: 10, + ), + AppText( + "Price", + margin: 10, + fontWeight: FontWeight.bold, + ), + AppText("SellingPrice", + 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( + scrollDirection: Axis.vertical, + shrinkWrap: true, + itemCount: data == null ? 0 : data.length, + itemBuilder: (BuildContext context, int index) { + return InkWell( + child: MedicineItemWidget( + label: data[index]["ItemDescription"], + ), + onTap: () { + //Navigator.of(context).pushNamed(PHARMACIES_LIST); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => PharmaciesListScreen( + itemID: data[index]["ItemID"]), + ), + ); + }, + ); + }, + ), + ), + ), + ], + ) + // RaisedButton( + // onPressed: () { + // + // }, + // ) + ))); } - pharmaciesList(context, MedicineProvider medicineProvider) { + pharmaciesList(context) { + _pharmaciesModel.ItemID = widget.itemID; + MedicineProvider medicineProvider = + Provider.of(context); medicineProvider.getPharmaciesList(_pharmaciesModel).then((res) { print(res.toString()); if (res['MessageStatus'] == 1) { print("ListPharmcy " + res['PharmList'].toString()); + this.setState(() { + data = res['PharmList']; + }); //Navigator.of(context).pushNamed(); } else { diff --git a/lib/widgets/medicine/medicine_item_widget.dart b/lib/widgets/medicine/medicine_item_widget.dart new file mode 100644 index 00000000..56cf4638 --- /dev/null +++ b/lib/widgets/medicine/medicine_item_widget.dart @@ -0,0 +1,51 @@ +import 'package:doctor_app_flutter/config/size_config.dart'; + +import '../shared/rounded_container_widget.dart'; +import '../shared/app_texts_widget.dart'; +import 'package:flutter/material.dart'; + +/* + *@author: ibrahim albitar + *@Date:28/4/2020 + *@param: + *@return: + *@desc: + */ + +class MedicineItemWidget extends StatefulWidget { + +final String label; +final Color backgroundColor; +final bool showBorder; +final Color borderColor; + +MedicineItemWidget({ @required this.label, this.backgroundColor = Colors.white, this.showBorder = false, this.borderColor = Colors.white}); + @override + _MedicineItemWidgetState createState() => _MedicineItemWidgetState(); +} + +class _MedicineItemWidgetState extends State { + @override + 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: Colors.red, + margin: 0, + topLeft: 6, + topRight: 0, + bottomLeft: 6, + bottomRight: 0, + customCornerRaduis: true, + child: SizedBox(width: SizeConfig.widthMultiplier, height: SizeConfig.heightMultiplier*3,), + ), + 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,); + } +} \ No newline at end of file