fixed ui and categories
This commit is contained in:
@@ -41,10 +41,10 @@ class ProductProvider extends ChangeNotifier {
|
||||
|
||||
Future<void> gettAllProduct(BuildContext context, String id, bool status,
|
||||
String search, bool first) async {
|
||||
if (isLoadingg || !hasMore) return;
|
||||
print("kdjfhgkfkjdghkjkdfg");
|
||||
// if (isLoadingg || !hasMore) return;
|
||||
|
||||
if (first) {
|
||||
print("kdjfhgkfkjdghkjkdfg");
|
||||
products.clear();
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:grocery_app/src/common_widget/network_image.dart';
|
||||
import 'package:grocery_app/src/core/routes/routes.dart';
|
||||
import 'package:grocery_app/src/data/all_cart_items.dart';
|
||||
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
|
||||
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
||||
import 'package:grocery_app/src/ui/data_notfound.dart';
|
||||
@@ -17,9 +15,9 @@ import 'package:material_design_icons_flutter/material_design_icons_flutter.dart
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:shimmer/shimmer.dart';
|
||||
|
||||
class BestDealScreen extends StatefulWidget {
|
||||
class BestDealScreen extends StatefulWidget
|
||||
{
|
||||
const BestDealScreen({super.key});
|
||||
|
||||
@override
|
||||
State<BestDealScreen> createState() => _BestDealScreenState();
|
||||
}
|
||||
@@ -28,18 +26,15 @@ class _BestDealScreenState extends State<BestDealScreen> {
|
||||
bool _isSearching = false;
|
||||
TextEditingController _searchController = TextEditingController();
|
||||
@override
|
||||
void initState() {
|
||||
void initState()
|
||||
{
|
||||
Provider.of<ProductProvider>(context, listen: false)
|
||||
.getBestDealProduct(context, '');
|
||||
super.initState();
|
||||
}
|
||||
|
||||
int calculateDiscountPercentage(double basePrice, double discountPrice) {
|
||||
print(
|
||||
"Base Price (Before Discount): $basePrice, Discount Price (After Discount): $discountPrice");
|
||||
|
||||
if (basePrice <= 0 || discountPrice <= 0 || discountPrice > basePrice) {
|
||||
print("Error: Invalid price values.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,31 +1,20 @@
|
||||
import 'package:carousel_slider/carousel_slider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_animate/flutter_animate.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:gap/gap.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:grocery_app/src/common_widget/network_image.dart';
|
||||
import 'package:grocery_app/src/common_widget/textfield_widget.dart';
|
||||
import 'package:grocery_app/src/core/routes/routes.dart';
|
||||
import 'package:grocery_app/src/logic/provider/addTocart_provider.dart';
|
||||
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
|
||||
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
||||
import 'package:grocery_app/src/ui/bestdeal/bestdeal_screen.dart';
|
||||
import 'package:grocery_app/src/ui/card_checkout/card_checkout_screen.dart';
|
||||
import 'package:grocery_app/src/ui/data_notfound.dart';
|
||||
|
||||
import 'package:grocery_app/src/ui/widgets/custom_icon_button.dart';
|
||||
import 'package:grocery_app/src/ui/widgets/elevated_button.dart';
|
||||
import 'package:grocery_app/utils/constants/assets_constant.dart';
|
||||
import 'package:grocery_app/utils/constants/color_constant.dart';
|
||||
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
||||
import 'package:grocery_app/utils/constants/string_constant.dart';
|
||||
import 'package:grocery_app/utils/extensions/extensions.dart';
|
||||
import 'package:grocery_app/utils/extensions/uicontext.dart';
|
||||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:skeletonizer/skeletonizer.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
@@ -58,8 +47,8 @@ class _MycartState extends State<Mycart> {
|
||||
appBar: AppBar(
|
||||
backgroundColor: Colors.transparent,
|
||||
centerTitle: true,
|
||||
title: Center(
|
||||
child: const Text(
|
||||
title: const Center(
|
||||
child: Text(
|
||||
'My Cart 🛒',
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
@@ -99,9 +88,9 @@ class _MycartState extends State<Mycart> {
|
||||
Widget relatedProduct() {
|
||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||
if (provider.isBestdealingloading) {
|
||||
return Center(child: CircularProgressIndicator());
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
} else if (provider.bestdeal.isEmpty) {
|
||||
return Center(child: Text(''));
|
||||
return const Center(child: Text(''));
|
||||
} else {
|
||||
return SizedBox(
|
||||
height: MediaQuery.of(context).size.height * 0.28,
|
||||
@@ -110,8 +99,7 @@ class _MycartState extends State<Mycart> {
|
||||
itemCount: provider.bestdeal.length,
|
||||
itemBuilder: (context, index) {
|
||||
var bestdealproduct = provider.bestdeal[index];
|
||||
double cardWidth =
|
||||
MediaQuery.of(context).size.width * 0.4; // Dynamic width
|
||||
double cardWidth = MediaQuery.of(context).size.width * 0.4;
|
||||
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
@@ -156,7 +144,6 @@ class _MycartState extends State<Mycart> {
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
AppNetworkImage(
|
||||
|
||||
imageUrl: bestdealproduct
|
||||
.productImages?.first?.url ??
|
||||
"",
|
||||
@@ -439,10 +426,9 @@ class _MycartState extends State<Mycart> {
|
||||
} else {
|
||||
return ListView.separated(
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
separatorBuilder: (_, index) => Padding(
|
||||
padding: EdgeInsets.only(top: 8.h, bottom: 8.h),
|
||||
// child: const Divider(thickness: 1),
|
||||
),
|
||||
itemCount: provider.allitem.items!.length,
|
||||
itemBuilder: (context, index) {
|
||||
@@ -465,12 +451,13 @@ class _MycartState extends State<Mycart> {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
height: 60.h,
|
||||
width: 100,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.greenAccent.withOpacity(0.1),
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
child: AppNetworkImage(
|
||||
|
||||
imageUrl:
|
||||
items.product!.productImages!.first.url ?? " ",
|
||||
backGroundColor: APPCOLOR.bgGrey,
|
||||
@@ -1075,7 +1062,7 @@ class _MycartState extends State<Mycart> {
|
||||
top: 15,
|
||||
left: 15,
|
||||
child: SizedBox(
|
||||
width: 200,
|
||||
width: 170,
|
||||
child: Text(
|
||||
banner.altText ?? "Special Event",
|
||||
style: context.customExtraBold(
|
||||
@@ -1108,15 +1095,19 @@ class _MycartState extends State<Mycart> {
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
right: 15,
|
||||
bottom: 15,
|
||||
child: AppNetworkImage(
|
||||
|
||||
imageUrl: banner.imageUrl ??
|
||||
'https://e7.pngegg.com/pngimages/742/816/png-clipart-coca-cola-can-illustration-coca-cola-soft-drink-surge-pepsi-coke-sweetness-cola-thumbnail.png',
|
||||
backGroundColor: Colors.transparent,
|
||||
),
|
||||
),
|
||||
right: 15,
|
||||
bottom: 15,
|
||||
child: SizedBox(
|
||||
height: 150,
|
||||
width: 200,
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
child: AppNetworkImage(
|
||||
imageUrl: banner.imageUrl ??
|
||||
'https://e7.pngegg.com/pngimages/742/816/png-clipart-coca-cola-can-illustration-coca-cola-soft-drink-surge-pepsi-coke-sweetness-cola-thumbnail.png',
|
||||
backGroundColor: Colors.transparent,
|
||||
),
|
||||
))),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
@@ -28,10 +28,10 @@ class DataNotFound extends StatelessWidget {
|
||||
fit: BoxFit.contain,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
const SizedBox(height: 5),
|
||||
Text(
|
||||
message,
|
||||
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.w500),
|
||||
style: const TextStyle(fontSize: 10, fontWeight: FontWeight.w500),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
],
|
||||
|
||||
@@ -28,17 +28,53 @@ class FruitVeggieDetail extends StatefulWidget {
|
||||
|
||||
class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
final ScrollController _scrollController = ScrollController();
|
||||
// @override
|
||||
// void initState() {
|
||||
// final productProvider = Provider.of<ProductProvider>(context, listen: false)
|
||||
// .gettAllProduct(context, "", true, '', true);
|
||||
// WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
// final productProvider =
|
||||
// Provider.of<ProductProvider>(context, listen: false);
|
||||
|
||||
// productProvider.getAllcategory(context);
|
||||
// productProvider.getCategoryByLevel();
|
||||
|
||||
// productProvider.setActiveIndex(0);
|
||||
// });
|
||||
|
||||
// _scrollController.addListener(() {
|
||||
// if (_scrollController.position.pixels ==
|
||||
// _scrollController.position.maxScrollExtent) {
|
||||
// final productProvider =
|
||||
// Provider.of<ProductProvider>(context, listen: false);
|
||||
// productProvider.gettAllProduct(context, "", false, '', false);
|
||||
// }
|
||||
// });
|
||||
|
||||
// super.initState();
|
||||
// }
|
||||
|
||||
// @override
|
||||
// void dispose() {
|
||||
// _scrollController.dispose();
|
||||
// super.dispose();
|
||||
// }
|
||||
@override
|
||||
void initState() {
|
||||
final productProvider = Provider.of<ProductProvider>(context, listen: false)
|
||||
.gettAllProduct(context, "", true, '', true);
|
||||
super.initState();
|
||||
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
final productProvider =
|
||||
Provider.of<ProductProvider>(context, listen: false);
|
||||
// productProvider.gettAllProduct(context, "", true, '', true);
|
||||
|
||||
// Initial product fetch
|
||||
productProvider.gettAllProduct(context, "", true, '', true);
|
||||
|
||||
// Fetch categories
|
||||
productProvider.getAllcategory(context);
|
||||
productProvider.getCategoryByLevel();
|
||||
|
||||
// Set initial tab/index
|
||||
productProvider.setActiveIndex(0);
|
||||
});
|
||||
|
||||
@@ -47,11 +83,11 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
_scrollController.position.maxScrollExtent) {
|
||||
final productProvider =
|
||||
Provider.of<ProductProvider>(context, listen: false);
|
||||
|
||||
// Load more products on scroll
|
||||
productProvider.gettAllProduct(context, "", false, '', false);
|
||||
}
|
||||
});
|
||||
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -143,8 +179,6 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
|
||||
return GridView.builder(
|
||||
controller: _scrollController,
|
||||
// itemCount: provider.products.length,
|
||||
|
||||
itemCount:
|
||||
provider.products.length + (provider.hasMore ? 1 : 0),
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
@@ -162,8 +196,6 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
onTap: () {
|
||||
context.push(
|
||||
MyRoutes.PRODUCTDETAILS,
|
||||
// extra: product.id
|
||||
|
||||
extra: {
|
||||
"id": product.id,
|
||||
"quantity": 1,
|
||||
@@ -420,23 +452,16 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
}
|
||||
|
||||
int calculateDiscountPercentage(double basePrice, double discountPrice) {
|
||||
print(
|
||||
"Base Price (Before Discount): $basePrice, Discount Price (After Discount): $discountPrice");
|
||||
|
||||
if (basePrice <= 0 || discountPrice <= 0 || discountPrice > basePrice) {
|
||||
print("Error: Invalid price values.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
double discountAmount = basePrice - discountPrice;
|
||||
double discountPercentage = (discountAmount / basePrice) * 100;
|
||||
|
||||
return discountPercentage.round();
|
||||
}
|
||||
|
||||
Widget filterCategory() {
|
||||
final activeIndexProvider = Provider.of<ProductProvider>(context);
|
||||
|
||||
return Consumer<ProductProvider>(builder: (context, provider, child) {
|
||||
if (provider.iscategroyloading) {
|
||||
return Center(
|
||||
@@ -483,7 +508,6 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
if (category.id == "all") {
|
||||
provider.gettAllProduct(context, "", true, '', false);
|
||||
} else {
|
||||
// Load filtered products
|
||||
provider.gettAllProduct(
|
||||
context, "/category/${category.id}", true, '', false);
|
||||
}
|
||||
@@ -501,11 +525,8 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 0, bottom: 0),
|
||||
child: SizedBox(
|
||||
//height: 80,
|
||||
width: 70,
|
||||
child: Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||
// mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
if (category.name == "ALL") ...{
|
||||
if (provider.categoriesss.isNotEmpty)
|
||||
@@ -543,7 +564,7 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
child: Center(
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
const Row(
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.center,
|
||||
mainAxisAlignment:
|
||||
@@ -554,14 +575,10 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
],
|
||||
),
|
||||
CachedNetworkImage(
|
||||
|
||||
/// height: height,
|
||||
///width: width,
|
||||
errorWidget:
|
||||
(context, url, error) {
|
||||
return Container(
|
||||
height: 40,
|
||||
// width: 50,
|
||||
decoration: BoxDecoration(
|
||||
color: APPCOLOR.bgGrey,
|
||||
borderRadius:
|
||||
@@ -622,29 +639,11 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
'https://i.pinimg.com/originals/a5/f3/5f/a5f35fb23e942809da3df91b23718e8d.png'),
|
||||
],
|
||||
),
|
||||
)
|
||||
|
||||
// Container(
|
||||
// child: AppNetworkImage(
|
||||
// height: 50,
|
||||
// width: 60,
|
||||
// imageUrl: provider
|
||||
// .selectedCategory?.image ??
|
||||
// 'https://i.pinimg.com/originals/a5/f3/5f/a5f35fb23e942809da3df91b23718e8d.png',
|
||||
// backGroundColor: APPCOLOR.bgGrey,
|
||||
// radius: 10,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
|
||||
),
|
||||
)),
|
||||
} else ...{
|
||||
Column(
|
||||
children: [
|
||||
CachedNetworkImage(
|
||||
|
||||
/// height: height,
|
||||
///width: width,
|
||||
errorWidget: (context, url, error) {
|
||||
return Container(
|
||||
height: 50,
|
||||
@@ -685,7 +684,6 @@ class _FruitVeggieDetailState extends State<FruitVeggieDetail> {
|
||||
},
|
||||
imageBuilder: (context, cIMage) {
|
||||
return Container(
|
||||
// width: 60,
|
||||
height: 60,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.all(
|
||||
|
||||
@@ -1,19 +1,16 @@
|
||||
import 'package:carousel_slider/carousel_slider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:grocery_app/src/common_widget/network_image.dart';
|
||||
import 'package:grocery_app/src/core/routes/routes.dart';
|
||||
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
||||
import 'package:grocery_app/src/ui/bestdeal/bestdeal_screen.dart';
|
||||
import 'package:grocery_app/src/ui/data_notfound.dart';
|
||||
import 'package:grocery_app/src/ui/fruitvegidetail/fruit_veggie_detail.dart';
|
||||
import 'package:grocery_app/src/ui/header.dart';
|
||||
import 'package:grocery_app/utils/constants/color_constant.dart';
|
||||
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
||||
import 'package:grocery_app/utils/constants/string_constant.dart';
|
||||
import 'package:grocery_app/utils/extensions/extensions.dart';
|
||||
import 'package:grocery_app/utils/extensions/uicontext.dart';
|
||||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
@@ -92,10 +89,14 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
return ListTile(
|
||||
title: Row(
|
||||
children: [
|
||||
AppNetworkImage(
|
||||
imageUrl: suggestion.productImages!.first.url,
|
||||
backGroundColor: APPCOLOR.bgGrey,
|
||||
radius: 10,
|
||||
SizedBox(
|
||||
width: 30,
|
||||
height: 30,
|
||||
child: AppNetworkImage(
|
||||
imageUrl: suggestion.productImages!.first.url,
|
||||
backGroundColor: APPCOLOR.bgGrey,
|
||||
radius: 10,
|
||||
),
|
||||
),
|
||||
Text(suggestion.name),
|
||||
],
|
||||
@@ -129,17 +130,16 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
top: 0,
|
||||
),
|
||||
child: SingleChildScrollView(
|
||||
physics: BouncingScrollPhysics(),
|
||||
child: Column(
|
||||
children: [
|
||||
Header(),
|
||||
const SizedBox(
|
||||
height: 15,
|
||||
),
|
||||
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
// ✅ Move Expanded Here
|
||||
child: Consumer<ProductProvider>(
|
||||
builder: (context, provider, child) {
|
||||
return CompositedTransformTarget(
|
||||
@@ -166,9 +166,6 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
fillColor: Colors.transparent,
|
||||
suffixIcon: InkWell(
|
||||
onTap: () {
|
||||
print(
|
||||
"klfklhjklfklhg ${_searchController.text}");
|
||||
|
||||
provider.getHomeProduct(context, "",
|
||||
_searchController.text, '', '', '');
|
||||
},
|
||||
@@ -210,83 +207,6 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
// Row(
|
||||
// children: [
|
||||
// Consumer<ProductProvider>(
|
||||
// builder: (context, provider, child)
|
||||
// {
|
||||
// return
|
||||
// CompositedTransformTarget(
|
||||
// link: _layerLink,
|
||||
// child: Expanded(
|
||||
// child: Container(
|
||||
// height: 50,
|
||||
// decoration: BoxDecoration(
|
||||
// color: APPCOLOR.bgGrey,
|
||||
// borderRadius: BorderRadius.circular(5),
|
||||
// ),
|
||||
// child: TextFormField(
|
||||
// controller: _searchController,
|
||||
// onChanged: (value) {
|
||||
|
||||
// provider.searchProducts(value);
|
||||
// if (value.isNotEmpty) {
|
||||
// _showOverlay(context);
|
||||
// } else {
|
||||
// _clearOverlay();
|
||||
// }
|
||||
|
||||
// // provider.searchValue = value;
|
||||
|
||||
// },
|
||||
// decoration: InputDecoration(
|
||||
// border: InputBorder.none,
|
||||
// fillColor: Colors.transparent,
|
||||
// suffixIcon: InkWell(
|
||||
// onTap: () {
|
||||
// provider.getHomeProduct(context, "",
|
||||
// provider.searchValue, '', '', '');
|
||||
// },
|
||||
// child: Icon(MdiIcons.magnify)),
|
||||
// hintText: 'Search',
|
||||
// hintStyle: context.customRegular(
|
||||
// APPCOLOR.grey666666, 18),
|
||||
// isCollapsed: true,
|
||||
// contentPadding: const EdgeInsets.symmetric(
|
||||
// vertical: 10, horizontal: 10),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// }),
|
||||
|
||||
// const SizedBox(
|
||||
// width: 10,
|
||||
// ),
|
||||
// InkWell(
|
||||
// onTap: () {
|
||||
// showSortBottomSheet(context);
|
||||
// },
|
||||
// child: Container(
|
||||
// height: 50,
|
||||
// width: 50,
|
||||
// decoration: BoxDecoration(
|
||||
// color: APPCOLOR.lightGreen,
|
||||
// borderRadius: BorderRadius.circular(5),
|
||||
// ),
|
||||
// child: Center(
|
||||
// child: Icon(
|
||||
// MdiIcons.tuneVariant,
|
||||
// color: Colors.white,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
|
||||
const SizedBox(
|
||||
height: 15,
|
||||
),
|
||||
@@ -301,13 +221,6 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
// Navigator.of(context).push(MaterialPageRoute(
|
||||
// builder: (context) {
|
||||
// return const FruitVeggieDetail();
|
||||
// },
|
||||
// ));
|
||||
|
||||
|
||||
context.push(MyRoutes.FRUITVEGGIEDETAIL);
|
||||
},
|
||||
child: Text(
|
||||
@@ -403,19 +316,19 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
const SizedBox(height: 10),
|
||||
Container(
|
||||
height: 15,
|
||||
width: cardWidth * 0.8,
|
||||
color: Colors.grey[300],
|
||||
),
|
||||
SizedBox(height: 5),
|
||||
const SizedBox(height: 5),
|
||||
Container(
|
||||
height: 12,
|
||||
width: cardWidth * 0.5,
|
||||
color: Colors.grey[300],
|
||||
),
|
||||
SizedBox(height: 5),
|
||||
const SizedBox(height: 5),
|
||||
const Spacer(),
|
||||
Row(
|
||||
children: [
|
||||
@@ -466,8 +379,6 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
onTap: () {
|
||||
context.push(
|
||||
MyRoutes.PRODUCTDETAILS,
|
||||
// extra: bestdealproduct.id
|
||||
|
||||
extra: {
|
||||
"id": bestdealproduct.id,
|
||||
"quantity": 1,
|
||||
@@ -482,13 +393,6 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(15),
|
||||
boxShadow: [
|
||||
// BoxShadow(
|
||||
// color: Colors.grey.withOpacity(0.1),
|
||||
// blurRadius: 1,
|
||||
// offset: const Offset(5, 5),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
@@ -497,22 +401,11 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
child: Container(
|
||||
height: MediaQuery.of(context).size.height *
|
||||
0.12,
|
||||
// width: cardWidth * 0.9,
|
||||
|
||||
decoration: BoxDecoration(
|
||||
color: APPCOLOR.bgGrey,
|
||||
borderRadius: BorderRadius.circular(15),
|
||||
boxShadow: [
|
||||
// BoxShadow(
|
||||
// color: Colors.grey.withOpacity(0.1),
|
||||
// blurRadius: 1,
|
||||
// offset: const Offset(5, 5),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
|
||||
child: Stack(
|
||||
//alignment: Alignment.center,
|
||||
children: [
|
||||
AppNetworkImage(
|
||||
imageUrl: bestdealproduct
|
||||
@@ -536,7 +429,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
child: Text(
|
||||
"${calculateDiscountPercentage(double.parse(bestdealproduct.basePrice), double.parse(bestdealproduct.discountPrice))}% \nOFF",
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontWeight:
|
||||
FontWeight.bold,
|
||||
@@ -551,7 +444,6 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
SizedBox(
|
||||
height: MediaQuery.of(context).size.height *
|
||||
0.01),
|
||||
|
||||
Text(
|
||||
bestdealproduct.name ?? "",
|
||||
textAlign: TextAlign.left,
|
||||
@@ -571,10 +463,6 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
style: context.customMedium(
|
||||
Colors.grey.withOpacity(0.8), 12),
|
||||
),
|
||||
// SizedBox(
|
||||
// height:
|
||||
// MediaQuery.of(context).size.height *
|
||||
// 0.005),
|
||||
const Spacer(),
|
||||
Row(
|
||||
children: [
|
||||
@@ -635,7 +523,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
child: provider.isLoading[
|
||||
bestdealproduct.id] ??
|
||||
false
|
||||
? Padding(
|
||||
? const Padding(
|
||||
padding:
|
||||
const EdgeInsets.all(
|
||||
8.0),
|
||||
@@ -673,14 +561,9 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
}
|
||||
|
||||
int calculateDiscountPercentage(double basePrice, double discountPrice) {
|
||||
print(
|
||||
"Base Price (Before Discount): $basePrice, Discount Price (After Discount): $discountPrice");
|
||||
|
||||
if (basePrice <= 0 || discountPrice <= 0 || discountPrice > basePrice) {
|
||||
print("Error: Invalid price values.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
double discountAmount = basePrice - discountPrice;
|
||||
double discountPercentage = (discountAmount / basePrice) * 100;
|
||||
|
||||
@@ -702,7 +585,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
),
|
||||
)
|
||||
: provider.banner.isEmpty
|
||||
? SizedBox.shrink()
|
||||
? const SizedBox.shrink()
|
||||
: CarouselSlider(
|
||||
options: CarouselOptions(
|
||||
height: 180,
|
||||
@@ -719,6 +602,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
enlargeFactor: 0.3,
|
||||
),
|
||||
items: provider.banner.map((banner) {
|
||||
|
||||
return Builder(
|
||||
builder: (BuildContext context) {
|
||||
return Container(
|
||||
@@ -733,7 +617,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
top: 15,
|
||||
left: 15,
|
||||
child: SizedBox(
|
||||
width: 200,
|
||||
width: 170,
|
||||
child: Text(
|
||||
banner.altText ?? "Special Event",
|
||||
style: context.customExtraBold(
|
||||
@@ -766,12 +650,19 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
right: 15,
|
||||
bottom: 15,
|
||||
child: AppNetworkImage(
|
||||
imageUrl: banner.imageUrl ??
|
||||
'https://e7.pngegg.com/pngimages/742/816/png-clipart-coca-cola-can-illustration-coca-cola-soft-drink-surge-pepsi-coke-sweetness-cola-thumbnail.png',
|
||||
backGroundColor: Colors.transparent,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
child: Container(
|
||||
height: 150,
|
||||
width: 200,
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
child: AppNetworkImage(
|
||||
imageUrl: banner.imageUrl ??
|
||||
'https://e7.pngegg.com/pngimages/742/816/png-clipart-coca-cola-can-illustration-coca-cola-soft-drink-surge-pepsi-coke-sweetness-cola-thumbnail.png',
|
||||
backGroundColor: Colors.transparent,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -785,7 +676,6 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
}
|
||||
|
||||
Future<void> _launchUrl(url) async {
|
||||
print("jdhfjkgh ${url}");
|
||||
final Uri uri = Uri.parse(url);
|
||||
if (!await launchUrl(uri, mode: LaunchMode.externalApplication)) {
|
||||
throw 'Could not launch $url';
|
||||
@@ -832,7 +722,7 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
},
|
||||
)
|
||||
: provider.homeproducts.isEmpty
|
||||
? Center(child: Text(''))
|
||||
? const Center(child: Text(''))
|
||||
: GridView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: provider.homeproducts.length,
|
||||
@@ -863,7 +753,6 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
children: [
|
||||
Container(
|
||||
height: 95,
|
||||
// width: 80,
|
||||
decoration: BoxDecoration(
|
||||
color: APPCOLOR.bgGrey,
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:grocery_app/src/common_widget/network_image.dart';
|
||||
@@ -25,8 +24,7 @@ class _MyOrderScreenState extends State<MyOrderScreen> {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
String convertUtcToIst(String utcTime)
|
||||
{
|
||||
String convertUtcToIst(String utcTime) {
|
||||
DateTime utcDateTime = DateTime.parse(utcTime).toUtc();
|
||||
|
||||
DateTime istDateTime =
|
||||
@@ -79,16 +77,14 @@ class _MyOrderScreenState extends State<MyOrderScreen> {
|
||||
child:
|
||||
Consumer<OrderProvider>(builder: (context, orderProvider, child) {
|
||||
if (orderProvider.isloading) {
|
||||
return Center(child: CircularProgressIndicator());
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
}
|
||||
|
||||
if (orderProvider.orderList.isEmpty) {
|
||||
return Center(
|
||||
return const Center(
|
||||
child: DataNotFound(
|
||||
imagePath: 'assets/images/wishlist.jpg',
|
||||
message: "No Order Available! ",
|
||||
// width: 200.w,
|
||||
// height: 200.h,
|
||||
message: "No Order!",
|
||||
));
|
||||
}
|
||||
|
||||
@@ -129,7 +125,6 @@ class _MyOrderScreenState extends State<MyOrderScreen> {
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
AppNetworkImage(
|
||||
|
||||
imageUrl: order.orderItems!.first
|
||||
.productImage,
|
||||
backGroundColor:
|
||||
|
||||
@@ -5,17 +5,9 @@ import 'package:gap/gap.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:grocery_app/src/common_widget/network_image.dart';
|
||||
import 'package:grocery_app/src/core/routes/routes.dart';
|
||||
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
|
||||
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
||||
import 'package:grocery_app/src/logic/provider/profile_provider.dart';
|
||||
import 'package:grocery_app/src/ui/card_checkout/card_checkout_screen.dart';
|
||||
import 'package:grocery_app/src/ui/edit_profile/edit_profile_screen.dart';
|
||||
|
||||
import 'package:grocery_app/src/ui/mapscreen/map_screen.dart';
|
||||
import 'package:grocery_app/src/ui/message/message_screen.dart';
|
||||
import 'package:grocery_app/src/ui/notification/notification_screen.dart';
|
||||
import 'package:grocery_app/src/ui/rating_review/rating_review_screen.dart';
|
||||
import 'package:grocery_app/src/ui/static_page/tersandconditions.dart';
|
||||
import 'package:grocery_app/src/ui/widgets/custom_text_field.dart';
|
||||
import 'package:grocery_app/src/ui/widgets/elevated_button.dart';
|
||||
import 'package:grocery_app/utils/constants/color_constant.dart';
|
||||
@@ -25,7 +17,6 @@ import 'package:grocery_app/utils/extensions/extensions.dart';
|
||||
import 'package:grocery_app/utils/extensions/uicontext.dart';
|
||||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class ProfileScreen extends StatefulWidget {
|
||||
const ProfileScreen({super.key});
|
||||
@@ -68,7 +59,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
print("jdfgkjhgjh ${APPSTRING.userProfile}");
|
||||
|
||||
return Scaffold(
|
||||
body: NestedScrollView(
|
||||
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
|
||||
@@ -101,7 +92,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
||||
const SizedBox(
|
||||
height: 30,
|
||||
),
|
||||
//Spacer(),
|
||||
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
@@ -203,14 +194,14 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
||||
title: const Text('Edit Profile'),
|
||||
trailing: Icon(MdiIcons.chevronRight),
|
||||
),
|
||||
ListTile(
|
||||
onTap: () {
|
||||
_showBottomSheet(context);
|
||||
},
|
||||
leading: Icon(MdiIcons.lockOutline),
|
||||
title: const Text('Change Password'),
|
||||
trailing: Icon(MdiIcons.chevronRight),
|
||||
),
|
||||
// ListTile(
|
||||
// onTap: () {
|
||||
// _showBottomSheet(context);
|
||||
// },
|
||||
// leading: Icon(MdiIcons.lockOutline),
|
||||
// title: const Text('Change Password'),
|
||||
// trailing: Icon(MdiIcons.chevronRight),
|
||||
// ),
|
||||
// ListTile(
|
||||
// onTap: () {
|
||||
// // Navigator.of(context).push(MaterialPageRoute(
|
||||
@@ -284,12 +275,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
||||
title: const Text('Term & Conditions'),
|
||||
trailing: Icon(MdiIcons.chevronRight),
|
||||
),
|
||||
// ListTile(
|
||||
// onTap: () {},
|
||||
// leading: Icon(MdiIcons.basketOutline),
|
||||
// title: const Text('Grocery List'),
|
||||
// trailing: Icon(MdiIcons.chevronRight),
|
||||
// ),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user