如何解决我想将totalCartPrice传递给flutter应用程序中的openCheckout
我是新手,所以请帮助我。我想将这个值传递给用户provider.userModel.total购物车价格/ 100来作为未结帐checkout()中的金额
当用户单击结帐时,它将重定向到Razorpay付款网关。
代码:
import 'package:flutter_ecommerce/helpers/style.dart';
import 'package:flutter_ecommerce/models/cart_item.dart';
import 'package:flutter_ecommerce/provider/app_provider.dart';
import 'package:flutter_ecommerce/provider/user_provider.dart';
import 'package:flutter_ecommerce/services/order.dart';
import 'package:flutter_ecommerce/widgets/custom_text.dart';
import 'package:flutter_ecommerce/widgets/loading.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:uuid/uuid.dart';
import 'package:razorpay_flutter/razorpay_flutter.dart';
class CartScreen extends StatefulWidget {
@override
_CartScreenState createState() => _CartScreenState();
}
class _CartScreenState extends State<CartScreen> {
final _key = GlobalKey<ScaffoldState>();
OrderServices _orderServices = OrderServices();
Razorpay razorpay;
@override
void initState() {
// TODO: implement initState
super.initState();
razorpay = new Razorpay();
razorpay.on(Razorpay.EVENT_PAYMENT_SUCCESS,handlePaymentSuccess);
razorpay.on(Razorpay.EVENT_PAYMENT_ERROR,handleErrorFailure);
razorpay.on(Razorpay.EVENT_EXTERNAL_WALLET,handleExternalWallet);
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
razorpay.clear();
}
UserProvider userProvider;
void openCheckout() {
var options = {
"key": "rzp_test_UhHkdZJX3q5bRq","amount": userProvider.userModel.totalCartPrice,"name": "Payment","description": "Payment for the product","prefill": {
"contact": "","email": "",},"external": {
"wallets": ["paytm"]
}
};
try {
razorpay.open(options);
} catch (e) {
print(e.toString());
}
}
void handlePaymentSuccess(PaymentSuccessResponse response) {
Fluttertoast.showToast(msg: "SUCCESS: " + response.paymentId);
}
void handleErrorFailure(PaymentFailureResponse response) {
Fluttertoast.showToast(
msg: "ERROR: " + response.code.toString() + " - " + response.message);
}
void handleExternalWallet(ExternalWalletResponse response) {
Fluttertoast.showToast(msg: "EXTERNAL_WALLET: " + response.walletName);
}
@override
Widget build(BuildContext context) {
final userProvider = Provider.of<UserProvider>(context);
final appProvider = Provider.of<AppProvider>(context);
return Scaffold(
key: _key,appBar: AppBar(
iconTheme: IconThemeData(color: black),backgroundColor: white,elevation: 0.0,title: CustomText(text: "Shopping Cart"),leading: IconButton(
icon: Icon(Icons.close),onPressed: () {
Navigator.pop(context);
}),),body: appProvider.isLoading
? Loading()
: ListView.builder(
itemCount: userProvider.userModel.cart.length,itemBuilder: (_,index) {
return Padding(
padding: const EdgeInsets.all(16),child: Container(
height: 120,decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),color: white,boxShadow: [
BoxShadow(
color: red.withOpacity(0.2),offset: Offset(3,2),blurRadius: 30)
]),child: Row(
children: <Widget>[
ClipRRect(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20),topLeft: Radius.circular(20),child: Image.network(
userProvider.userModel.cart[index].image,height: 120,width: 140,fit: BoxFit.fill,SizedBox(
width: 10,Expanded(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
RichText(
text: TextSpan(children: [
TextSpan(
text: userProvider
.userModel.cart[index].name +
"\n",style: TextStyle(
color: black,fontSize: 20,fontWeight: FontWeight.bold)),TextSpan(
text:
"\$${userProvider.userModel.cart[index].price / 100} \n\n",fontSize: 18,fontWeight: FontWeight.w300)),TextSpan(
text: "Quantity: ",style: TextStyle(
color: grey,fontSize: 16,fontWeight: FontWeight.w400)),TextSpan(
text: userProvider
.userModel.cart[index].quantity
.toString(),style: TextStyle(
color: primary,]),IconButton(
icon: Icon(
Icons.delete,color: red,onPressed: () async {
appProvider.changeIsLoading();
bool success =
await userProvider.removeFromCart(
cartItem: userProvider
.userModel.cart[index]);
if (success) {
userProvider.reloadUserModel();
print("Item removed from cart");
_key.currentState.showSnackBar(SnackBar(
content: Text("Removed from Cart!")));
appProvider.changeIsLoading();
return;
} else {
appProvider.changeIsLoading();
}
})
],)
],);
}),bottomNavigationBar: Container(
height: 70,child: Padding(
padding: const EdgeInsets.all(8.0),child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
RichText(
text: TextSpan(children: [
TextSpan(
text: "Total: ",style: TextStyle(
color: grey,fontSize: 22,TextSpan(
text: " \$${userProvider.userModel.totalCartPrice / 100}",style: TextStyle(
color: black,fontWeight: FontWeight.normal)),Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),color: black),child: FlatButton(
onPressed: () {
if (userProvider.userModel.totalCartPrice == 0) {
showDialog(
context: context,builder: (BuildContext context) {
return Dialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0)),//this right here
child: Container(
height: 200,child: Padding(
padding: const EdgeInsets.all(12.0),child: Column(
mainAxisAlignment:
MainAxisAlignment.center,crossAxisAlignment:
CrossAxisAlignment.start,children: [
Row(
mainAxisAlignment:
MainAxisAlignment.center,children: <Widget>[
Text(
'Your cart is empty',textAlign: TextAlign.center,],);
});
return;
}
showDialog(
context: context,builder: (BuildContext context) {
return Dialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0)),//this right here
child: Container(
height: 200,child: Padding(
padding: const EdgeInsets.all(12.0),child: Column(
mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment:
CrossAxisAlignment.start,children: [
Text(
'You will be charged \$${userProvider.userModel.totalCartPrice / 100} upon delivery!',SizedBox(
width: 320.0,child: RaisedButton(
onPressed: () {
openCheckout();
// var uuid = Uuid();
// String id = uuid.v4();
// _orderServices.createOrder(
// userId: userProvider.user.uid,// id: id,// description:
// "Some random description",// status: "complete",// totalPrice: userProvider
// .userModel.totalCartPrice,// cart: userProvider
// .userModel.cart);
// for (CartItemModel cartItem
// in userProvider
// .userModel.cart) {
// bool value = await userProvider
// .removeFromCart(
// cartItem: cartItem);
// if (value) {
// userProvider.reloadUserModel();
// print("Item added to cart");
// _key.currentState.showSnackBar(
// SnackBar(
// content: Text(
// "Removed from Cart!")));
// } else {
// print("ITEM WAS NOT REMOVED");
// }
// }
// _key.currentState.showSnackBar(
// SnackBar(
// content: Text(
// "Order created!")));
// Navigator.pop(context);
},child: Text(
"Accept",style:
TextStyle(color: Colors.white),color: const Color(0xFF1BC0C5),child: RaisedButton(
onPressed: () {
Navigator.pop(context);
},child: Text(
"Reject",style: TextStyle(
color: Colors.white),color: red),)
],);
});
},child: CustomText(
text: "Check out",size: 20,weight: FontWeight.normal,)),)
],);
}
}
但是,当我尝试这样做时,它将null值传递给amount。请帮我解决这些问题。
解决方法
剃须刀支付的金额为卢比,因此,如果您有100卢比,则在结帐时必须通过amount *100
。
因此,以下结帐方法是:
void openCheckout() {
var options = {
"key": "rzp_test_UhHkdZJX3q5bRq","amount": userProvider.userModel.totalCartPrice * 100,"name": "Payment","description": "Payment for the product","prefill": {
"contact": "","email": "",},"external": {
"wallets": ["paytm"]
}
};
try {
razorpay.open(options);
} catch (e) {
print(e.toString());
}
}
检查以下链接:
https://razorpay.com/docs/payment-gateway/web-integration/standard/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。