Design and return Pharmacy List

merge-requests/13/merge
hussam al-habibeh 4 years ago
parent ae2f9a077d
commit e92cb2e1ac

@ -4,22 +4,21 @@ import 'dart:io';
const MAX_SMALL_SCREEN = 660;
const BASE_URL = 'https://hmgwebservices.com/Services';
const GET_PROJECT = '/Lists.svc/REST/GetProject';
//const BASE_URL = 'https://hmgwebservices.com/'; // Production Environment
//const BASE_URL = 'https://uat.hmgwebservices.com/'; // UAT Environment
//URL to get clinic list
const GET_CLINICS_LIST_URL = "Services/lists.svc/REST/GetClinicCentralized";
//URL to get doctors list
const GET_DOCTORS_LIST_URL = "Services/Doctors.svc/REST/SearchDoctorsByTime";
//URL to get medicine and pharmacies list
const GET_PHARMCY_ITEMS = "/Lists.svc/REST/GetPharmcyItems_Region";
const GET_PHARMACY_LIST = "/Patients.svc/REST/GetPharmcyList";
class AppGlobal {
static var context;
AppSharedPreferences sharedPref = AppSharedPreferences();
@ -38,10 +37,9 @@ class AppGlobal {
return request;
}
}
const CHANNEL = 3;
const GENERAL_ID = 'Cs2020@2016\$2958';
const IP_ADDRESS = '10.20.10.20';
const VERSION_ID = 5.5;
const VERSION_ID = 8.5;

@ -19,7 +19,10 @@ const Map<String, Map<String, String>> localizedValues = {
'clinicName': {'en': 'Clinic Name', 'ar': 'اسم العيادة'},
'doctorName': {'en': 'Doctor Name', 'ar': 'إسم الطبيب'},
'nearestAppo': {'en': 'Nearest appointment', 'ar': 'أقرب موعد'},
'searchByDocText': {'en': 'Type the name of the doctor to help you find him', 'ar': 'اكتب اسم الطبيب لمساعدتك في العثور عليه'},
'searchByDocText': {
'en': 'Type the name of the doctor to help you find him',
'ar': 'اكتب اسم الطبيب لمساعدتك في العثور عليه'
},
'enterDocName': {'en': 'Enter Doctor name', 'ar': 'أدخل إسم الطبيب'},
'search': {'en': 'Search', 'ar': 'بحث'},
'bookNow': {'en': 'BOOK NOW', 'ar': 'احجز الآن'},
@ -29,19 +32,23 @@ const Map<String, Map<String, String>> localizedValues = {
'gender': {'en': 'Gender', 'ar': 'الجنس'},
'nationality': {'en': 'nationality', 'ar': 'الجنسية'},
'docQualifications': {'en': 'Doctor Qualifications', 'ar': 'مؤهلات الطبيب'},
'confirmAppoHeading': {'en': 'Kindly confirm your Appointment', 'ar': 'يرجى تأكيد موعدك'},
'confirmAppoHeading': {
'en': 'Kindly confirm your Appointment',
'ar': 'يرجى تأكيد موعدك'
},
'patientInfo': {'en': 'Patient Information', 'ar': 'معلومات المريض'},
'bookSuccess': {'en': 'Book Success', 'ar': 'تم حجز الموعد بنجاح'},
'patientShare': {'en': 'Patient Share', 'ar': 'المبلغ المستحق'},
'patientShareWithTax': {'en': 'Patient Share with Tax', 'ar': 'المبلغ الإجمالي المستحق'},
'patientShareWithTax': {
'en': 'Patient Share with Tax',
'ar': 'المبلغ الإجمالي المستحق'
},
'confirmAppo': {'en': 'Confirm Appointment', 'ar': 'تأكيد الموعد'},
'confirm': {'en': 'Confirm', 'ar': 'تأكيد'},
'appointment': {'en': 'Appointment', 'ar': 'الموعد'},
'confirmLater': {'en': 'Confirm Later', 'ar': 'تأكيد لاحقا'},
'todoList': {'en': 'Todo List', 'ar': 'مهامي'},
'appoActions': {'en': 'Appointment Actions', 'ar': 'إجراءات الموعد'},
'login': {'en': 'Login', 'ar': 'تسجيل الدخول'},
'loginregister': {'en': 'Login / Register', 'ar': 'دخولتسجيل'},
'welcome': {'en': 'Welcome', 'ar': 'أهلا بك'},
@ -85,4 +92,11 @@ const Map<String, Map<String, String>> localizedValues = {
'en': 'Search Medicine Here',
'ar': 'ابحث عن الدواء هنا'
},
'description': {'en': 'Description', 'ar': 'الوصف'},
'price': {'en': 'Price', 'ar': 'السعر'},
'youCanFindItIn': {'en': 'You can find it in', 'ar': 'يمكنكة ان تجده في'},
'pleaseEnterMedicineName': {
'en': 'Please Enter Medicine Name',
'ar': 'الرجائ ادخال اسم الدواء'
},
};

@ -14,22 +14,46 @@ class PharmaciesListModel {
int editedBy;
int projectID;
int clinicID;
double price;
String imageLocation;
String desLocation;
String itemDes;
String phoneNumber;
String longitude;
String latitude;
PharmaciesListModel({
this.itemID,
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,
this.sessionID = 'e29zoooEJ4',
this.isLoginForDoctorApp = true,
this.channel = 9,
//this.patientOutSA = true,
});
PharmaciesListModel(
{this.itemID,
this.patientTypeID,
this.languageID,
this.stamp,
this.iPAdress,
this.versionID,
this.tokenID,
this.sessionID,
this.isLoginForDoctorApp,
this.channel,
this.editedBy,
this.doctorID,
this.patientOutSA,
this.clinicID,
this.projectID,
this.price,
this.imageLocation,
this.desLocation,
this.itemDes,
this.phoneNumber,
this.longitude,
this.latitude});
PharmaciesListModel.fromJson(Map<String, dynamic> json) {
longitude = json['Longitude'];
latitude = json['Latitude'];
phoneNumber = json['PhoneNumber'];
itemDes = json['ItemDescription'];
desLocation = json['LocationDescription'];
imageLocation = json['ProjectImageURL'];
price = json['SellingPrice'];
itemID = json['ItemID'];
patientTypeID = json['PatientTypeID'];
languageID = json['LanguageID'];

@ -20,6 +20,7 @@ class PharmaciesModel {
bool isLoginForDoctorApp;
String itemDes;
String productImage;
int itemID;
PharmaciesModel(
{this.pHRItemName,
@ -42,9 +43,12 @@ class PharmaciesModel {
this.stamp,
this.itemDes,
this.productImage,
this.isLoginForDoctorApp});
this.isLoginForDoctorApp,
this.itemID});
PharmaciesModel.fromJson(Map<String, dynamic> json) {
itemID = json['ItemID'];
productImage = json['ProductImageBase64'];
itemDes = json['ItemDescription'];
pHRItemName = json['PHR_itemName'];

@ -2,17 +2,23 @@ import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/pharmacies_list_model.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/pharmacies_model.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/pharmacies_list_model.dart';
class PharmacyService extends BaseService {
List<PharmaciesModel> _pharmaciesList = List();
List<PharmaciesModel> _medicineItem = List();
List<PharmaciesListModel> _pharmaciesList = List();
List<PharmaciesModel> get medicineItem => _medicineItem;
List<PharmaciesListModel> get pharmaciesList => _pharmaciesList;
List<PharmaciesModel> get pharmaciesList => _pharmaciesList;
bool isFinished = true;
bool hasError = false;
String errorMsg = '';
void clearPharmaciesLis() {
void clearMedicineList() {
_medicineItem.clear();
}
void clearPharmaciesList() {
_pharmaciesList.clear();
}
@ -35,17 +41,33 @@ class PharmacyService extends BaseService {
sessionID: "BlUSkYymTt",
stamp: "2020-04-27T12:17:17.721Z",
tokenID: "6EfeKCLRu0GPdFutIt3m7Q==",
versionID: 5.3);
versionID: 8.3);
Future getMedicine({String drugName}) async {
PharmaciesListModel _pharmaciesListModel = PharmaciesListModel(
patientTypeID: 1,
languageID: 2,
stamp: '2020-04-23T21:01:21.492Z',
iPAdress: '11.11.11.11',
versionID: 8.3,
sessionID: 'e29zoooEJ4',
isLoginForDoctorApp: true,
channel: 9,
editedBy: 1485,
doctorID: 1485,
patientOutSA: 0,
clinicID: 1,
projectID: 15,
);
Future getMedicineList({String drugName}) async {
hasError = false;
_requestGetPharmaciesModel.pHRItemName = drugName ?? 'panadol';
_requestGetPharmaciesModel.pHRItemName = drugName;
try {
await baseAppClient.post(GET_PHARMCY_ITEMS,
onSuccess: (dynamic response, int statusCode) {
_pharmaciesList.clear();
_medicineItem.clear();
response['ListPharmcy_Region'].forEach((item) {
_pharmaciesList.add(PharmaciesModel.fromJson(item));
_medicineItem.add(PharmaciesModel.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
@ -56,17 +78,22 @@ class PharmacyService extends BaseService {
}
}
Future getMedicineList({String name}) async {
_requestGetPharmaciesModel.pHRItemName = name ?? 'panadol';
await baseAppClient.post(GET_PHARMACY_LIST,
onSuccess: (dynamic response, int statusCode) {
_pharmaciesList.clear();
response['PharmList'].forEach((item) {
_pharmaciesList.add(PharmaciesModel.fromJson(item));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: _requestGetPharmaciesModel.toJson());
Future getPharmaciesList({int itemID}) async {
_pharmaciesListModel.itemID = itemID;
try {
await baseAppClient.post(GET_PHARMACY_LIST,
onSuccess: (dynamic response, int statusCode) {
_pharmaciesList.clear();
response['PharmList'].forEach((item) {
_pharmaciesList.add(PharmaciesListModel.fromJson(item));
hasError = false;
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: _pharmaciesListModel.toJson());
} catch (error) {
throw error;
}
}
}

@ -1,3 +1,4 @@
import 'package:diplomaticquarterapp/core/model/pharmacies/pharmacies_list_model.dart';
import '../../locator.dart';
import 'base_view_model.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
@ -10,23 +11,26 @@ class PharmacyViewModel extends BaseViewModel {
String errorMsg = '';
PharmacyService _pharmacyService = locator<PharmacyService>();
List<PharmaciesModel> get pharmacy => _pharmacyService.pharmaciesList;
List<PharmaciesModel> get pharmacy => _pharmacyService.medicineItem;
List<PharmaciesListModel> get pharmacyList => _pharmacyService.pharmaciesList;
Future getMedicine() async {
Future getPharmacies({int id}) async {
setState(ViewState.Busy);
await _pharmacyService.getMedicine();
await _pharmacyService.getPharmaciesList(itemID: id);
if (_pharmacyService.hasError) {
error = _pharmacyService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
//_pharmacyService.clearPharmaciesList();
}
Future getMedicine2({String name}) async {
Future getMedicine({String name}) async {
hasError = false;
_pharmacyService.clearPharmaciesLis();
_pharmacyService.clearMedicineList();
setState(ViewState.BusyLocal);
await _pharmacyService.getMedicine(drugName: name);
await _pharmacyService.getMedicineList(drugName: name);
if (_pharmacyService.hasError) {
error = _pharmacyService.error;
setState(ViewState.ErrorLocal);

@ -4,14 +4,13 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:rating_bar/rating_bar.dart';
import 'Components/AppointmentActions.dart';
class AppointmentDetails extends StatefulWidget {
@override
_AppointmentDetailsState createState() => _AppointmentDetailsState();
}
class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTickerProviderStateMixin {
class _AppointmentDetailsState extends State<AppointmentDetails>
with SingleTickerProviderStateMixin {
TabController _tabController;
bool showFooterButton = false;

@ -6,6 +6,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/pharmacies_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacies_view_model.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/pharmacies_list_model.dart';
import '../base/base_view.dart';
@ -18,7 +19,7 @@ class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return BaseView<PharmacyViewModel>(
// onModelReady: (model) => model.getMedicine(),
onModelReady: (model) => model.getMedicine(),
builder: (BuildContext context, PharmacyViewModel model, Widget child) =>
AppScaffold(
baseViewModel: model,

@ -11,18 +11,11 @@ import '../base/base_view.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/input/text_field.dart';
import 'package:diplomaticquarterapp/widgets/buttons/BottomButton.dart';
import 'package:diplomaticquarterapp/widgets/pharmacy/drug_item.dart';
import '../../locator.dart';
import 'package:diplomaticquarterapp/core/service/pharmacies_service.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/pharmacies_list_screen.dart';
class MedicineSearch extends StatefulWidget {
@override
_MedicineSearchState createState() => _MedicineSearchState();
}
class _MedicineSearchState extends State<MedicineSearch> {
class MedicineSearch extends StatelessWidget {
final textController = TextEditingController();
final _formKey = GlobalKey<FormState>();
@override
@ -31,115 +24,121 @@ class _MedicineSearchState extends State<MedicineSearch> {
builder: (BuildContext context, PharmacyViewModel model, Widget child) =>
AppScaffold(
baseViewModel: model,
appBarTitle: 'Search Medicine',
body: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.only(
bottom: SizeConfig.heightMultiplier * 1,
right: SizeConfig.heightMultiplier * 2.5,
top: SizeConfig.heightMultiplier * 4,
left: SizeConfig.heightMultiplier * 2.5,
),
child: Form(
key: _formKey,
child: TextFields(
hintText: 'Search Medicine here ',
inputAction: TextInputAction.search,
onSaved: (value) {},
onSubmit: (value) {
searchMedicine(model);
},
controller: textController,
validator: (value) {
if (value.isEmpty) {
return 'please enter medicine name';
}
return null;
},
appBarTitle: TranslationBase.of(context).searchMedicine,
body: Container(
height: SizeConfig.screenHeight,
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.only(
bottom: SizeConfig.heightMultiplier * 1,
right: SizeConfig.heightMultiplier * 2.5,
top: SizeConfig.heightMultiplier * 4,
left: SizeConfig.heightMultiplier * 2.5,
),
),
),
Container(
margin: EdgeInsets.only(
bottom: SizeConfig.heightMultiplier * 0.0,
right: SizeConfig.heightMultiplier * 5,
top: SizeConfig.heightMultiplier * 1,
left: SizeConfig.heightMultiplier * 5,
),
child: Wrap(
children: <Widget>[
Container(
child: Button(
loading: model.state == ViewState.BusyLocal,
label: 'Search',
onTap: () {
searchMedicine(model);
}),
width: 350.0,
child: Form(
key: _formKey,
child: TextFields(
hintText:
TranslationBase.of(context).searchMedicineHere,
inputAction: TextInputAction.search,
onSaved: (value) {},
onSubmit: (value) {
searchMedicine(model, context);
},
controller: textController,
validator: (value) {
if (value.isEmpty) {
return TranslationBase.of(context)
.pleaseEnterMedicineName;
}
return null;
},
),
],
),
),
),
Container(
margin:
EdgeInsets.only(left: SizeConfig.heightMultiplier * 2),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Texts(
'You Can Find ' +
'${model.pharmacy == null ? '0' : model.pharmacy.length.toString()}'
' Item In Search ',
),
],
Container(
margin: EdgeInsets.only(
bottom: SizeConfig.heightMultiplier * 0.0,
right: SizeConfig.heightMultiplier * 5,
top: SizeConfig.heightMultiplier * 1,
left: SizeConfig.heightMultiplier * 5,
),
child: Wrap(
children: <Widget>[
Container(
child: Button(
loading: model.state == ViewState.BusyLocal,
label: TranslationBase.of(context).search,
onTap: () {
searchMedicine(model, context);
}),
width: 350.0,
),
],
),
),
),
if (model.state == ViewState.ErrorLocal)
Container(
child: Texts(model.error),
margin: EdgeInsets.only(
left: SizeConfig.heightMultiplier * 2),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Texts(
'You Can Find ' +
'${model.pharmacy == null ? '0' : model.pharmacy.length.toString()}'
' Item In Search ',
),
],
),
),
Expanded(
child: Container(
width: SizeConfig.screenWidth * 0.85,
//child: _getHospitals(model.pharmacy),
child: ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: model.pharmacy == null
? 0
: model.pharmacy.length,
itemBuilder: (BuildContext context, int index) {
return InkWell(
child: MedicineItemWidget(
label: model.pharmacy[index].itemDes,
url: model.pharmacy[index].productImage),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PharmaciesList()),
);
},
);
}),
if (model.state == ViewState.ErrorLocal)
Container(
child: Texts(model.error),
),
Expanded(
child: Container(
width: SizeConfig.screenWidth * 0.85,
//child: _getHospitals(model.pharmacy),
child: ListView.builder(
//physics: NeverScrollableScrollPhysics(),
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: model.pharmacy == null
? 0
: model.pharmacy.length,
itemBuilder: (BuildContext context, int index) {
return InkWell(
child: MedicineItemWidget(
label: model.pharmacy[index].itemDes,
url: model.pharmacy[index].productImage),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PharmaciesList(
medicineID:
model.pharmacy[index].itemID,
imageURL: model
.pharmacy[index].productImage,
medicineDescription:
model.pharmacy[index].itemDes),
),
);
},
);
}),
),
),
)
],
],
),
)),
);
}
searchMedicine(PharmacyViewModel model) {
searchMedicine(PharmacyViewModel model, BuildContext context) {
Utils.hideKeyboard(context);
if (_formKey.currentState.validate())
model.getMedicine2(name: textController.text);
model.getMedicine(name: textController.text);
}
Widget _getHospitals(List<PharmaciesModel> hospitals) => ListView.builder(
itemCount: hospitals.length,
itemBuilder: (BuildContext context, int index) => Container(
child: Texts(hospitals[index].itemDes),
),
);
}

@ -1,99 +1,191 @@
import 'package:diplomaticquarterapp/core/model/pharmacies/pharmacies_model.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/material.dart';
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:flutter/cupertino.dart';
import 'package:maps_launcher/maps_launcher.dart';
import '../base/base_view.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart';
import 'package:diplomaticquarterapp/widgets/others/rounded_container.dart';
import 'dart:typed_data';
import 'dart:convert';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacies_view_model.dart';
import 'package:map_launcher/map_launcher.dart';
import 'package:url_launcher/url_launcher.dart';
class PharmaciesList extends StatefulWidget {
String medicineID;
int url;
PharmaciesList({this.url, this.medicineID});
@override
_PharmaciesListState createState() => _PharmaciesListState();
class PharmaciesList extends StatelessWidget {
final int medicineID;
final String imageURL;
final String medicineDescription;
//
}
PharmaciesList({this.medicineID, this.imageURL, this.medicineDescription});
class _PharmaciesListState extends State<PharmaciesList> {
@override
Widget build(BuildContext context) {
return BaseView<PharmacyViewModel>(
//onModelReady: (model) => model.getMedicine(),
onModelReady: (model) => model.getPharmacies(id: medicineID),
builder: (BuildContext context, PharmacyViewModel model, Widget child) =>
AppScaffold(
appBarTitle: 'Pharmacies List',
body: !model.isFinished
? AppCircularProgressIndicator()
: model.hasError
? Center(
child: Text(
model.errorMsg,
style: TextStyle(color: Colors.red),
appBarTitle: TranslationBase.of(context).pharmaciesList,
baseViewModel: model,
body: Container(
height: SizeConfig.screenHeight,
child: ListView(
shrinkWrap: true,
scrollDirection: Axis.vertical,
physics: AlwaysScrollableScrollPhysics(),
children: <Widget>[
RoundedContainer(
child: Row(
children: <Widget>[
Expanded(
flex: 1,
child: ClipRRect(
borderRadius: BorderRadius.all(
Radius.circular(7),
),
child: Image.memory(
dataFromBase64String(imageURL),
height: SizeConfig.imageSizeMultiplier * 19,
width: SizeConfig.imageSizeMultiplier * 18,
fit: BoxFit.cover,
),
),
),
Expanded(
flex: 3,
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 6.8, vertical: 3.5),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Texts(
TranslationBase.of(context).description,
),
Texts(
medicineDescription,
),
Texts(
TranslationBase.of(context).price,
marginRight: 10,
marginLeft: 10,
marginBottom: 2.0,
),
if (model.pharmacyList.length > 0)
Texts(
model.pharmacyList[0].price.toString(),
),
],
),
),
),
],
),
),
Container(
margin: EdgeInsets.only(
top: SizeConfig.widthMultiplier * 2.0,
bottom: SizeConfig.widthMultiplier * 3.0,
right: SizeConfig.widthMultiplier * 4.0,
left: SizeConfig.widthMultiplier * 2.5,
),
child: Align(
alignment: Alignment.center,
child: Texts(
TranslationBase.of(context).youCanFindItIn,
),
),
alignment: Alignment.topRight,
),
Container(
width: SizeConfig.screenWidth * 1.0,
child: ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: model.pharmacyList == null
? 0
: model.pharmacyList.length,
itemBuilder: (BuildContext context, int index) {
return RoundedContainer(
child: Row(
children: <Widget>[
Expanded(
child: ClipRRect(
borderRadius:
BorderRadius.all(Radius.circular(7)),
child: Image.network(
model.pharmacyList[index].imageLocation,
height: SizeConfig.imageSizeMultiplier * 13.0,
width: SizeConfig.imageSizeMultiplier * 11.0,
fit: BoxFit.cover,
),
),
),
Expanded(
flex: 4,
child: Padding(
padding: EdgeInsets.all(9.0),
child: Texts(
model.pharmacyList[index].desLocation,
),
),
),
)
: Container(
height: SizeConfig.screenHeight,
child: ListView(
shrinkWrap: true,
scrollDirection: Axis.vertical,
physics: AlwaysScrollableScrollPhysics(),
children: <Widget>[
RoundedContainer(
child: Row(
children: <Widget>[
Expanded(
flex: 1,
child: ClipRRect(
borderRadius: BorderRadius.all(
Radius.circular(7),
),
child: Image.memory(
dataFromBase64String(
widget.url.toString()),
height:
SizeConfig.imageSizeMultiplier * 19,
width:
SizeConfig.imageSizeMultiplier * 18,
fit: BoxFit.cover,
),
Expanded(
flex: 2,
child: Wrap(
direction: Axis.horizontal,
alignment: WrapAlignment.end,
crossAxisAlignment: WrapCrossAlignment.end,
children: <Widget>[
Padding(
padding: EdgeInsets.all(6.0),
child: InkWell(
child: Icon(
Icons.phone,
color: Colors.red,
),
onTap: () => launch("tel://" +
model.pharmacyList[index].phoneNumber),
),
Expanded(
flex: 3,
child: Column(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.stretch,
children: <Widget>[],
),
Padding(
padding: EdgeInsets.all(6.0),
child: InkWell(
child: Icon(
Icons.local_pharmacy,
color: Colors.red,
),
)
],
))
],
),
)),
onTap: () {
MapsLauncher.launchCoordinates(
double.parse(
model.pharmacyList[index].latitude),
double.parse(model
.pharmacyList[index].longitude),
);
},
),
),
],
),
)
],
),
);
},
),
),
],
),
),
),
);
}
Image imageFromBase64String(String base64String) {
return Image.memory(base64Decode(base64String));
}
Uint8List dataFromBase64String(String base64String) {
return base64Decode(base64String);
}
String base64String(Uint8List data) {
return base64Encode(data);
}
}

@ -54,9 +54,11 @@ class TranslationBase {
String get nearestAppo => localizedValues['nearestAppo'][locale.languageCode];
String get searchByDocText => localizedValues['searchByDocText'][locale.languageCode];
String get searchByDocText =>
localizedValues['searchByDocText'][locale.languageCode];
String get enterDocName => localizedValues['enterDocName'][locale.languageCode];
String get enterDocName =>
localizedValues['enterDocName'][locale.languageCode];
String get search => localizedValues['search'][locale.languageCode];
@ -66,29 +68,35 @@ class TranslationBase {
String get appoInfo => localizedValues['appoInfo'][locale.languageCode];
String get availableAppo => localizedValues['availableAppo'][locale.languageCode];
String get availableAppo =>
localizedValues['availableAppo'][locale.languageCode];
String get gender => localizedValues['gender'][locale.languageCode];
String get nationality => localizedValues['nationality'][locale.languageCode];
String get docQualifications => localizedValues['docQualifications'][locale.languageCode];
String get docQualifications =>
localizedValues['docQualifications'][locale.languageCode];
String get confirmAppoHeading => localizedValues['confirmAppoHeading'][locale.languageCode];
String get confirmAppoHeading =>
localizedValues['confirmAppoHeading'][locale.languageCode];
String get patientInfo => localizedValues['patientInfo'][locale.languageCode];
String get bookSuccess => localizedValues['bookSuccess'][locale.languageCode];
String get patientShare => localizedValues['patientShare'][locale.languageCode];
String get patientShare =>
localizedValues['patientShare'][locale.languageCode];
String get patientShareWithTax => localizedValues['patientShareWithTax'][locale.languageCode];
String get patientShareWithTax =>
localizedValues['patientShareWithTax'][locale.languageCode];
String get confirmAppo => localizedValues['confirmAppo'][locale.languageCode];
String get confirm => localizedValues['confirm'][locale.languageCode];
String get confirmLater => localizedValues['confirmLater'][locale.languageCode];
String get confirmLater =>
localizedValues['confirmLater'][locale.languageCode];
String get todoList => localizedValues['todoList'][locale.languageCode];
@ -126,6 +134,14 @@ class TranslationBase {
localizedValues['searchMedicine'][locale.languageCode];
String get searchMedicineHere =>
localizedValues['searchMedicineHere'][locale.languageCode];
String get pharmaciesList =>
localizedValues['pharmaciesList'][locale.languageCode];
String get description => localizedValues['description'][locale.languageCode];
String get price => localizedValues['price'][locale.languageCode];
String get youCanFindItIn =>
localizedValues['youCanFindItIn'][locale.languageCode];
String get pleaseEnterMedicineName =>
localizedValues['pleaseEnterMedicineName'][locale.languageCode];
}
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -16,6 +16,11 @@ class Texts extends StatefulWidget {
final bool allowExpand;
final double fontSize;
final String fontWeight;
final double margin;
final double marginTop;
final double marginRight;
final double marginBottom;
final double marginLeft;
Texts(this.text,
{Key key,
@ -32,7 +37,12 @@ class Texts extends StatefulWidget {
this.readMore = false,
this.style,
this.fontSize,
this.fontWeight})
this.fontWeight,
this.margin,
this.marginBottom,
this.marginLeft,
this.marginRight,
this.marginTop})
: super(key: key);
@override
@ -228,7 +238,7 @@ class _TextsState extends State<Texts> {
Theme.of(context).backgroundColor.withOpacity(0),
], begin: Alignment.bottomCenter, end: Alignment.topCenter),
),
height: 30,
height: 30.0,
),
)
],

@ -29,7 +29,7 @@ class _MedicineItemWidgetState extends State<MedicineItemWidget> {
@override
Widget build(BuildContext context) {
return new RoundedContainer(
height: SizeConfig.heightMultiplier * 10.5,
height: SizeConfig.heightMultiplier * 12.9,
child: Padding(
padding: const EdgeInsets.all(2.0),
child: Row(
@ -38,8 +38,8 @@ class _MedicineItemWidgetState extends State<MedicineItemWidget> {
children: <Widget>[
if (widget.url != null)
Container(
height: 39,
width: 39,
height: 39.0,
width: 39.0,
child: ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(7)),
child: Image.memory(
@ -51,11 +51,15 @@ class _MedicineItemWidgetState extends State<MedicineItemWidget> {
),
),
Expanded(
child: Padding(
padding: EdgeInsets.all(3),
child: Align(
alignment: Alignment.centerLeft,
child: Texts(widget.label),
child: Center(
child: Padding(
padding: EdgeInsets.all(2.5),
child: Align(
alignment: Alignment.centerLeft,
child: Texts(
widget.label,
),
),
),
),
)
@ -70,15 +74,7 @@ class _MedicineItemWidgetState extends State<MedicineItemWidget> {
);
}
Image imageFromBase64String(String base64String) {
return Image.memory(base64Decode(base64String));
}
Uint8List dataFromBase64String(String base64String) {
return base64Decode(base64String);
}
String base64String(Uint8List data) {
return base64Encode(data);
}
}

@ -86,6 +86,7 @@ dependencies:
dev_dependencies:
flutter_test:
sdk: flutter

Loading…
Cancel
Save