Merge branch 'pharmacy_fix_bugs' into 'development'

fix bugs pharmacy home and increase performance

See merge request Cloud_Solution/diplomatic-quarter!416
merge-requests/415/merge
Mohammad Aljammal 3 years ago
commit e578b1e759

@ -113,6 +113,7 @@ class PharmacyModuleService extends BaseService {
} }
Future getTopManufacturerList() async { Future getTopManufacturerList() async {
if (manufacturerList.isNotEmpty) return;
Map<String, String> queryParams = {'page': '1', 'limit': '8'}; Map<String, String> queryParams = {'page': '1', 'limit': '8'};
try { try {
await baseAppClient.getPharmacy(GET_PHARMACY_TOP_MANUFACTURER, await baseAppClient.getPharmacy(GET_PHARMACY_TOP_MANUFACTURER,
@ -121,7 +122,7 @@ class PharmacyModuleService extends BaseService {
response['manufacturer'].forEach((item) { response['manufacturer'].forEach((item) {
Manufacturer manufacturer = Manufacturer.fromJson(item); Manufacturer manufacturer = Manufacturer.fromJson(item);
// if (manufacturer.image != null) { // if (manufacturer.image != null) {
manufacturerList.add(Manufacturer.fromJson(item)); manufacturerList.add(Manufacturer.fromJson(item));
// } // }
}); });
hasError = false; hasError = false;
@ -135,6 +136,8 @@ class PharmacyModuleService extends BaseService {
} }
Future getBestSellerProducts() async { Future getBestSellerProducts() async {
if (bestSellerProducts.isNotEmpty) return;
Map<String, String> queryParams = { Map<String, String> queryParams = {
'fields': 'fields':
'id,discount_ids,name,namen,localized_names,display_order,short_description,full_description,full_descriptionn,sku,order_minimum_quantity,order_maximum_quantity,price,old_price,images,is_rx,rx_message,rx_messagen,discount_name,discount_namen,approved_rating_sum,approved_total_reviews,allow_back_in_stock_subscriptions,stock_quantity,stock_availability,stock_availabilityn,discount_percentage,reviews', 'id,discount_ids,name,namen,localized_names,display_order,short_description,full_description,full_descriptionn,sku,order_minimum_quantity,order_maximum_quantity,price,old_price,images,is_rx,rx_message,rx_messagen,discount_name,discount_namen,approved_rating_sum,approved_total_reviews,allow_back_in_stock_subscriptions,stock_quantity,stock_availability,stock_availabilityn,discount_percentage,reviews',
@ -173,7 +176,8 @@ class PharmacyModuleService extends BaseService {
}); });
hasError = false; hasError = false;
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; // sharedPref.setString(PHARMACY_LAST_VISITED_PRODUCTS, ""); hasError =
true; // sharedPref.setString(PHARMACY_LAST_VISITED_PRODUCTS, "");
super.error = error; super.error = error;
}); });
} catch (error) { } catch (error) {

@ -2,6 +2,7 @@ import 'package:barcode_scan_fix/barcode_scan.dart';
import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart';
import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart'; import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart';
import 'package:diplomaticquarterapp/core/service/parmacyModule/parmacy_module_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart';
@ -18,6 +19,8 @@ import 'package:diplomaticquarterapp/widgets/pharmacy/bottom_nav_pharmacy_bar.da
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../locator.dart';
class LandingPagePharmacy extends StatefulWidget { class LandingPagePharmacy extends StatefulWidget {
@override @override
_LandingPagePharmacyState createState() => _LandingPagePharmacyState(); _LandingPagePharmacyState createState() => _LandingPagePharmacyState();
@ -37,6 +40,10 @@ class _LandingPagePharmacyState extends State<LandingPagePharmacy> {
void initState() { void initState() {
super.initState(); super.initState();
locator<PharmacyModuleService>().manufacturerList = [];
locator<PharmacyModuleService>().bestSellerProducts = [];
locator<PharmacyModuleService>().lastVisitedProducts = [];
pageController = PageController(keepPage: true); pageController = PageController(keepPage: true);
} }

@ -13,8 +13,9 @@ import 'package:provider/provider.dart';
class ProductTileItem extends StatelessWidget { class ProductTileItem extends StatelessWidget {
final AppSharedPreferences sharedPref = AppSharedPreferences(); final AppSharedPreferences sharedPref = AppSharedPreferences();
final PharmacyProduct item; final PharmacyProduct item;
final double itemHeight;
ProductTileItem(this.item); ProductTileItem(this.item, this.itemHeight);
void productOnClick(BuildContext ctx) { void productOnClick(BuildContext ctx) {
_saveLastVisitProducts(); _saveLastVisitProducts();
@ -92,12 +93,12 @@ class ProductTileItem extends StatelessWidget {
? Image.network( ? Image.network(
item.images[0].src, item.images[0].src,
fit: BoxFit.cover, fit: BoxFit.cover,
height: 80, height: itemHeight / 2,
) )
: Image.asset( : Image.asset(
"assets/images/no_image.png", "assets/images/no_image.png",
fit: BoxFit.cover, fit: BoxFit.cover,
height: 80, height: itemHeight / 2,
), ),
), ),
Container( Container(
@ -125,42 +126,48 @@ class ProductTileItem extends StatelessWidget {
], ],
), ),
SizedBox(height: 8,), SizedBox(height: 8,),
Container( Padding(
margin: EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(horizontal: 6.0),
horizontal: 6, child: Texts(
vertical: 0, projectProvider.isArabic ? item.namen : item.name,
regular: true,
fontSize: 12,
fontWeight: FontWeight.w400,
), ),
child: Column( ),
crossAxisAlignment: CrossAxisAlignment.start, Expanded(
children: [ child: Container(
Texts( margin: EdgeInsets.symmetric(
projectProvider.isArabic ? item.namen : item.name, horizontal: 6,
regular: true, vertical: 0,
fontSize: 12, ),
fontWeight: FontWeight.w400, child: Column(
), crossAxisAlignment: CrossAxisAlignment.start,
Padding( mainAxisAlignment: MainAxisAlignment.end,
padding: const EdgeInsets.only(top: 4, bottom: 4), children: [
child: Texts( Padding(
"SAR ${item.price}", padding: const EdgeInsets.only(top: 4, bottom: 4),
fontWeight: FontWeight.w600, child: Texts(
fontSize: 14, "SAR ${item.price}",
), fontWeight: FontWeight.w600,
), fontSize: 14,
Row(
children: [
Expanded(
child: StarRating(
totalAverage: item.approvedTotalReviews > 0
? (item.approvedRatingSum.toDouble() /
item.approvedTotalReviews.toDouble())
.toDouble()
: 0,
forceStars: true),
), ),
], ),
), Row(
], children: [
Expanded(
child: StarRating(
totalAverage: item.approvedTotalReviews > 0
? (item.approvedRatingSum.toDouble() /
item.approvedTotalReviews.toDouble())
.toDouble()
: 0,
forceStars: true),
),
],
),
],
),
), ),
), ),
SizedBox(height: 5,), SizedBox(height: 5,),

@ -29,10 +29,10 @@ class BestSellerWidget extends StatelessWidget {
)), )),
if (model.state != ViewState.BusyLocal) if (model.state != ViewState.BusyLocal)
Container( Container(
height: MediaQuery.of(context).size.height / 4 + 20, height: MediaQuery.of(context).size.height / 3 + 20,
child: ListView.builder( child: ListView.builder(
itemBuilder: (ctx, i) => itemBuilder: (ctx, i) =>
ProductTileItem(model.bestSellerProduct[i]), ProductTileItem(model.bestSellerProduct[i], MediaQuery.of(context).size.height / 4 + 20),
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
itemCount: model.bestSellerProduct.length, itemCount: model.bestSellerProduct.length,
), ),

@ -47,6 +47,7 @@ class GridViewCard extends StatelessWidget {
TranslationBase.of(context).viewAll, TranslationBase.of(context).viewAll,
handler: handler, handler: handler,
tPadding: 0, tPadding: 0,
textColor: Color(0xFF5ab145),
bPadding: 0, bPadding: 0,
), ),
Expanded(child: Container()), Expanded(child: Container()),

@ -30,11 +30,11 @@ class RecentlyViewedWidget extends StatelessWidget {
if (model.state != ViewState.BusyLocal) if (model.state != ViewState.BusyLocal)
Container( Container(
height: model.lastVisitedProducts.length > 0 height: model.lastVisitedProducts.length > 0
? MediaQuery.of(context).size.height / 4 + 20 ? MediaQuery.of(context).size.height / 3 + 20
: 0, : 0,
child: ListView.builder( child: ListView.builder(
itemBuilder: (ctx, i) => itemBuilder: (ctx, i) =>
ProductTileItem(model.lastVisitedProducts[i]), ProductTileItem(model.lastVisitedProducts[i], MediaQuery.of(context).size.height / 4 + 20),
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
itemCount: model.lastVisitedProducts.length, itemCount: model.lastVisitedProducts.length,
), ),

@ -25,7 +25,7 @@ class ShopByBrandWidget extends StatelessWidget {
ProductBrandsPage()), ProductBrandsPage()),
if (model.state != ViewState.BusyLocal) if (model.state != ViewState.BusyLocal)
Container( Container(
height: 100, height: 150,
child: ListView.builder( child: ListView.builder(
itemBuilder: (ctx, i) => itemBuilder: (ctx, i) =>
ManufacturerItem(model.manufacturerList[i]), ManufacturerItem(model.manufacturerList[i]),

@ -25,6 +25,7 @@ class ManufacturerItem extends StatelessWidget {
); );
}, },
child: Container( child: Container(
width: 100,
margin: EdgeInsets.symmetric( margin: EdgeInsets.symmetric(
horizontal: 12, horizontal: 12,
vertical: 4, vertical: 4,
@ -38,8 +39,9 @@ class ManufacturerItem extends StatelessWidget {
top: BorderSide(color: Colors.grey.shade300, width: 1)), top: BorderSide(color: Colors.grey.shade300, width: 1)),
), ),
child: item.image == null child: item.image == null
? Padding( ? Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 10), padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 10),
alignment: Alignment.topCenter,
child: AppText(item.name, fontWeight: FontWeight.w500,fontSize: 14,), child: AppText(item.name, fontWeight: FontWeight.w500,fontSize: 14,),
) )
: Padding( : Padding(

Loading…
Cancel
Save