productdetails
This commit is contained in:
@@ -97,12 +97,43 @@ class AddtocartProvider extends ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Map<String, bool> isRemoveItem = {};
|
||||
|
||||
Future<void> deleteItem(BuildContext context, id) async {
|
||||
isRemoveItem[id] = true;
|
||||
notifyListeners();
|
||||
var data = {};
|
||||
try {
|
||||
var result = await _homeRepo.deleteItem(data, id);
|
||||
return result.fold(
|
||||
(error) {
|
||||
|
||||
isRemoveItem[id] = false;
|
||||
notifyListeners();
|
||||
},
|
||||
(response) {
|
||||
getItemCards(context);
|
||||
isRemoveItem[id] = false;
|
||||
notifyListeners();
|
||||
},
|
||||
);
|
||||
} catch (e) {
|
||||
isRemoveItem[id] = false;
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
final _homeRepo = getIt<ProductRepo>();
|
||||
|
||||
AllCartItems allitem = AllCartItems();
|
||||
|
||||
bool isLoaddcartItem = true;
|
||||
Future<void> getItemCards(BuildContext context) async {
|
||||
isLoaddcartItem = true;
|
||||
notifyListeners();
|
||||
var data = {};
|
||||
try {
|
||||
var result = await _homeRepo.getItemCards(data);
|
||||
@@ -120,8 +151,7 @@ class AddtocartProvider extends ChangeNotifier {
|
||||
notifyListeners();
|
||||
},
|
||||
);
|
||||
} catch (e)
|
||||
{
|
||||
} catch (e) {
|
||||
print("sfddsfdfff");
|
||||
isLoaddcartItem = false;
|
||||
notifyListeners();
|
||||
|
||||
@@ -109,7 +109,7 @@ class AuthProvider extends ChangeNotifier {
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text("Something went wrong. Please try again."),
|
||||
content: Text("Already have account Please login !"),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
@@ -117,9 +117,52 @@ class AuthProvider extends ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
// //login
|
||||
Future<bool> loginOtp(String otp, BuildContext context) async {
|
||||
context.showLoader(show: true);
|
||||
var data = {
|
||||
"phone": numberwithCode,
|
||||
"otp": otp,
|
||||
};
|
||||
|
||||
// //vendorRegister
|
||||
try {
|
||||
var result = await _authRepo.loginOtp(data);
|
||||
|
||||
return result.fold(
|
||||
(error) {
|
||||
// Show error Snackbar
|
||||
context.showLoader(show: false);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(error.message),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
return false; // Login failed
|
||||
},
|
||||
(response) {
|
||||
// Login success
|
||||
context.showLoader(show: false);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text("OTP Verify successful!"),
|
||||
backgroundColor: Colors.green,
|
||||
),
|
||||
);
|
||||
return true;
|
||||
},
|
||||
);
|
||||
} catch (e) {
|
||||
context.showLoader(show: false);
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text("Don't have a account ,please create now!"),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> customerRegister(BuildContext context) async {
|
||||
context.showLoader(show: true);
|
||||
@@ -143,8 +186,7 @@ class AuthProvider extends ChangeNotifier {
|
||||
);
|
||||
return false; // Login failed
|
||||
},
|
||||
(response)
|
||||
{
|
||||
(response) {
|
||||
// Login success
|
||||
context.showLoader(show: false);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
|
||||
16
lib/src/logic/provider/bottom_navbar_provider.dart
Normal file
16
lib/src/logic/provider/bottom_navbar_provider.dart
Normal file
@@ -0,0 +1,16 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class BottomNavProvider with ChangeNotifier {
|
||||
int _currentIndex = 0;
|
||||
PageController _pageController = PageController();
|
||||
|
||||
int get currentIndex => _currentIndex;
|
||||
PageController get pageController => _pageController;
|
||||
|
||||
void setIndex(int index)
|
||||
{
|
||||
_currentIndex = index;
|
||||
_pageController.jumpToPage(index);
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import 'package:grocery_app/src/data/all_cart_items.dart';
|
||||
import 'package:grocery_app/src/data/banners.dart';
|
||||
import 'package:grocery_app/src/data/best_dealProduct.dart';
|
||||
import 'package:grocery_app/src/data/product_category.dart';
|
||||
import 'package:grocery_app/src/data/product_details.dart';
|
||||
import 'package:grocery_app/src/data/wish_list_model.dart';
|
||||
import 'package:grocery_app/src/logic/repo/product_repo.dart';
|
||||
import 'package:grocery_app/utils/constants/shared_pref_utils.dart';
|
||||
@@ -38,6 +39,29 @@ class ProductProvider extends ChangeNotifier {
|
||||
);
|
||||
}
|
||||
|
||||
ProductDetailsData productDetails = ProductDetailsData();
|
||||
bool isProductLoading = true;
|
||||
|
||||
Future<void> getProduuctDetails(BuildContext context, String id) async {
|
||||
var data = {};
|
||||
productDetails = ProductDetailsData();
|
||||
isProductLoading = true;
|
||||
notifyListeners();
|
||||
|
||||
var result = await _homeRepo.getProductDetails(data, context, id);
|
||||
return result.fold(
|
||||
(error) {
|
||||
isProductLoading = false;
|
||||
notifyListeners();
|
||||
},
|
||||
(response) {
|
||||
productDetails = response!;
|
||||
isProductLoading = false;
|
||||
notifyListeners();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
List<BestDeal> bestdeal = [];
|
||||
|
||||
bool isBestdealingloading = true;
|
||||
@@ -132,7 +156,7 @@ class ProductProvider extends ChangeNotifier {
|
||||
),
|
||||
);
|
||||
await SharedPrefUtils.clear();
|
||||
context.clearAndPush(routePath: MyRoutes.LOGIN);
|
||||
context.clearAndPush(routePath: MyRoutes.SIGNUP);
|
||||
|
||||
return true;
|
||||
},
|
||||
@@ -319,6 +343,56 @@ class ProductProvider extends ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
List<BestDeal> countList = [];
|
||||
|
||||
Future<void> addToWithCart(
|
||||
BuildContext context, String productId, BestDeal bestdealproduct) async {
|
||||
//if (cartItems.contains(productId)) return; // Prevent duplicate additions
|
||||
|
||||
isLoading[productId] = true;
|
||||
notifyListeners(); // Notify UI to show loading indicator
|
||||
|
||||
var data = {"productId": productId, "quantity": 1};
|
||||
|
||||
try {
|
||||
var result = await _homeRepo.addToCart(data);
|
||||
|
||||
result.fold(
|
||||
(error) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(error.message),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
},
|
||||
(response) {
|
||||
countList.add(bestdealproduct);
|
||||
cartItems.add(productId); // Add product to cart
|
||||
Fluttertoast.showToast(
|
||||
msg: "Added to cart successfully!",
|
||||
toastLength: Toast.LENGTH_SHORT,
|
||||
gravity: ToastGravity.BOTTOM,
|
||||
backgroundColor: Colors.green,
|
||||
textColor: Colors.white,
|
||||
fontSize: 14.0,
|
||||
);
|
||||
notifyListeners(); // Update UI after adding to cart
|
||||
},
|
||||
);
|
||||
} catch (e) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text("Something went wrong"),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
} finally {
|
||||
isLoading[productId] = false;
|
||||
notifyListeners(); // Ensure UI updates after operation
|
||||
}
|
||||
}
|
||||
|
||||
bool isWishListItemLoadingg = true;
|
||||
|
||||
List<WishListItem> wishListItem = [];
|
||||
@@ -360,8 +434,7 @@ class ProductProvider extends ChangeNotifier {
|
||||
int get quantity => _quantity;
|
||||
double get totalPrice => _totalPrice;
|
||||
|
||||
void setProductPrice(double price)
|
||||
{
|
||||
void setProductPrice(double price) {
|
||||
_unitPrice = price;
|
||||
_totalPrice = _unitPrice * _quantity;
|
||||
notifyListeners();
|
||||
@@ -406,6 +479,4 @@ class ProductProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////// all carts////////////////////////
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import 'package:fpdart/fpdart.dart';
|
||||
import 'package:grocery_app/src/core/utils/custom_dio_exception.dart';
|
||||
import 'package:grocery_app/src/core/utils/response_type_def.dart';
|
||||
import 'package:grocery_app/src/data/OTPResponseModel.dart';
|
||||
import 'package:grocery_app/src/data/login_response.dart';
|
||||
import 'package:grocery_app/src/data/registration_response.dart';
|
||||
import 'package:grocery_app/src/data/vendor_otpModel.dart';
|
||||
import 'package:grocery_app/src/logic/services/auth_service_locator.dart';
|
||||
@@ -19,8 +20,7 @@ class AuthRepo {
|
||||
try {
|
||||
var response = await _authServices.sendOtp(data);
|
||||
final String model = response.toString();
|
||||
// OtpResponseModel otpResponseModel =
|
||||
// otpResponseModelFromJson(response.toString());
|
||||
|
||||
|
||||
return right(model);
|
||||
} on DioException catch (e) {
|
||||
@@ -42,7 +42,7 @@ class AuthRepo {
|
||||
authToken: vendorOtpModel.data!.accessToken ?? "");
|
||||
}
|
||||
|
||||
// final String model = response.toString();
|
||||
|
||||
|
||||
return right(vendorOtpModel);
|
||||
} on DioException catch (e) {
|
||||
@@ -51,6 +51,27 @@ class AuthRepo {
|
||||
}
|
||||
}
|
||||
|
||||
FutureResult<LoginResponse> loginOtp(data) async {
|
||||
try {
|
||||
var response = await _authServices.loginOtp(data);
|
||||
|
||||
LoginResponse loginResponse = loginResponseFromJson(response.toString());
|
||||
|
||||
if (loginResponse.accessToken != null)
|
||||
{
|
||||
await SharedPrefUtils.setToken(
|
||||
authToken: loginResponse.accessToken ?? "");
|
||||
}
|
||||
|
||||
// final String model = response.toString();
|
||||
|
||||
return right(loginResponse);
|
||||
} on DioException catch (e) {
|
||||
var error = CustomDioExceptions.handleError(e);
|
||||
return left(error);
|
||||
}
|
||||
}
|
||||
|
||||
// FutureResult<LoginResponse> login(data) async {
|
||||
// try {
|
||||
// var response = await _authServices.login(data);
|
||||
|
||||
@@ -9,8 +9,10 @@ import 'package:grocery_app/src/data/banners.dart';
|
||||
import 'package:grocery_app/src/data/best_dealProduct.dart';
|
||||
import 'package:grocery_app/src/data/check_pin_response.dart';
|
||||
import 'package:grocery_app/src/data/product_category.dart';
|
||||
import 'package:grocery_app/src/data/product_details.dart';
|
||||
import 'package:grocery_app/src/data/wish_list_model.dart';
|
||||
import 'package:grocery_app/src/logic/services/home_locator.dart';
|
||||
import 'package:grocery_app/src/ui/productdetails/product_details.dart';
|
||||
|
||||
class ProductRepo {
|
||||
final ProductService _productService;
|
||||
@@ -34,6 +36,24 @@ class ProductRepo {
|
||||
}
|
||||
}
|
||||
|
||||
FutureResult<ProductDetailsData> getProductDetails(
|
||||
data, BuildContext context, id) async {
|
||||
try {
|
||||
var response = await _productService.getProductDetails(data, id);
|
||||
|
||||
ProductDetailsData loginResponse = productDetailsdataFromJson(response.toString());
|
||||
|
||||
final String model = response.toString();
|
||||
|
||||
return right(loginResponse);
|
||||
} on DioException catch (e) {
|
||||
var error = CustomDioExceptions.handleError(e);
|
||||
return left(error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
FutureResult<BestDealProduct> getBestDealProduct(
|
||||
data, BuildContext context) async {
|
||||
try {
|
||||
@@ -103,14 +123,26 @@ class ProductRepo {
|
||||
}
|
||||
}
|
||||
|
||||
FutureResult<CheckPinResponse> checkPin(data,pin) async {
|
||||
FutureResult<CheckPinResponse> checkPin(data, pin) async {
|
||||
try {
|
||||
var response = await _productService.checkPin(data,pin);
|
||||
CheckPinResponse allCartItems = checkPinResponseFromJson(response.toString());
|
||||
var response = await _productService.checkPin(data, pin);
|
||||
CheckPinResponse allCartItems =
|
||||
checkPinResponseFromJson(response.toString());
|
||||
|
||||
return right(allCartItems);
|
||||
} on DioException catch (e) {
|
||||
|
||||
var error = CustomDioExceptions.handleError(e);
|
||||
return left(error);
|
||||
}
|
||||
}
|
||||
|
||||
FutureResult<String> deleteItem(data, id) async {
|
||||
try {
|
||||
var response = await _productService.deleteItem(data, id);
|
||||
final String model = response.toString();
|
||||
|
||||
return right(model);
|
||||
} on DioException catch (e) {
|
||||
var error = CustomDioExceptions.handleError(e);
|
||||
return left(error);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,12 @@ class AuthServices extends ApiService {
|
||||
var response = await api.post(APIURL.verifyOtp, data: jsonEncode(data));
|
||||
return response;
|
||||
}
|
||||
Future loginOtp(data) async {
|
||||
var response = await api.post(APIURL.loginOtp, data: jsonEncode(data));
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
Future login(data) async
|
||||
{
|
||||
var response = await api.post(APIURL.login, data: jsonEncode(data));
|
||||
|
||||
@@ -21,16 +21,24 @@ class ProductService extends ApiService {
|
||||
var response;
|
||||
|
||||
if (id.isEmpty) {
|
||||
response =
|
||||
await api.get(APIURL.getAllProduct, data: jsonEncode(data));
|
||||
}
|
||||
else{
|
||||
response = await api.get(APIURL.getAllProduct+ id, data: jsonEncode(data));
|
||||
response = await api.get(APIURL.getAllProduct, data: jsonEncode(data));
|
||||
} else {
|
||||
response =
|
||||
await api.get(APIURL.getAllProduct + id, data: jsonEncode(data));
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
Future getProductDetails(data, id) async {
|
||||
var response =
|
||||
await api.get(APIURL.getProductDetails + id, data: jsonEncode(data));
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Future getBestDealProduct(data) async {
|
||||
var response =
|
||||
await api.get(APIURL.getBestDealProduct, data: jsonEncode(data));
|
||||
@@ -44,55 +52,50 @@ class ProductService extends ApiService {
|
||||
return response;
|
||||
}
|
||||
|
||||
Future similarProduct(data,id) async {
|
||||
var response = await api.get(APIURL.similarProduct+id+"/similar", data: jsonEncode(data));
|
||||
Future similarProduct(data, id) async {
|
||||
var response = await api.get(APIURL.similarProduct + id + "/similar",
|
||||
data: jsonEncode(data));
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
Future getItemCards(data) async {
|
||||
Future getItemCards(data) async {
|
||||
var response = await api.get(APIURL.getItemCards, data: jsonEncode(data));
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
Future checkPin(data,pin) async {
|
||||
var response = await api.get(APIURL.checkPin+pin, data: jsonEncode(data));
|
||||
Future checkPin(data, pin) async {
|
||||
var response = await api.get(APIURL.checkPin + pin, data: jsonEncode(data));
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
Future deleteItem(data, id) async {
|
||||
var response =
|
||||
await api.delete(APIURL.deleteItem + id, data: jsonEncode(data));
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Future addToWish(data) async {
|
||||
Future addToWish(data) async {
|
||||
var response = await api.post(APIURL.addToWish, data: jsonEncode(data));
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
Future addToCart(data) async {
|
||||
Future addToCart(data) async {
|
||||
var response = await api.post(APIURL.addToCart, data: jsonEncode(data));
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
Future gettAllWishList(data) async {
|
||||
var response = await api.get(APIURL.gettAllWishList, data: jsonEncode(data));
|
||||
Future gettAllWishList(data) async {
|
||||
var response =
|
||||
await api.get(APIURL.gettAllWishList, data: jsonEncode(data));
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Future getBanners(data) async {
|
||||
var response = await api.get(APIURL.getBanners, data: jsonEncode(data));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user