class
CashFreePayment extends StatefulWidget {
const
CashFreePayment({super.key});
@override
State<CashFreePayment> createState() => _CashFreePaymentState();
}
class
_CashFreePaymentState extends State<CashFreePayment> {
CFPaymentGatewayService cfPaymentGatewayService =
CFPaymentGatewayService();
bool
? isSuccess;
@override
void
initState() {
super.initState();
cfPaymentGatewayService.setCallback(verifyPayment, onError);
}
@override
Widget build(BuildContext context) {
return
Scaffold(
appBar: AppBar(
title:
const
Text(
'Cashfree Payment Flutter Template'
),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(onPressed: pay, child:
const
Text(
"Pay"
)),
Text(
"Payment Status $isSuccess"
,
style:
const
TextStyle(fontSize: 20),
)
],
),
),
);
}
void
verifyPayment(String orderId) {
isSuccess =
true
;
setState(() {});
print(
"Verify Payment $orderId"
);
}
void
onError(CFErrorResponse errorResponse, String orderId) {
isSuccess =
false
;
setState(() {});
print(errorResponse.getMessage());
print(
"Error while making payment"
);
}
String orderId =
"my_order_id1"
;
Future<CFSession?> createSession() async {
try
{
final mySessionIDData = await createSessionID(
orderId);
var session = CFSessionBuilder()
.setEnvironment(CFEnvironment.SANDBOX)
.setOrderId(mySessionIDData[
"order_id"
])
.setPaymentSessionId(mySessionIDData[
"payment_session_id"
])
.build();
return
session;
} on CFException
catch
(e) {
print(e.message);
}
return
null;
}
pay() async {
try
{
var session = await createSession();
List<CFPaymentModes> components = <CFPaymentModes>[];
var paymentComponent =
CFPaymentComponentBuilder().setComponents(components).build();
var theme = CFThemeBuilder()
.setNavigationBarBackgroundColorColor(
"#FF0000"
)
.setPrimaryFont(
"Menlo"
)
.setSecondaryFont(
"Futura"
)
.build();
var cfDropCheckoutPayment = CFDropCheckoutPaymentBuilder()
.setSession(session!)
.setPaymentComponent(paymentComponent)
.setTheme(theme)
.build();
cfPaymentGatewayService.doPayment(cfDropCheckoutPayment);
} on CFException
catch
(e) {
print(e.message);
}
}
}
createSessionID(String orderID) async {
var headers = {
'Content-Type'
:
'application/json'
,
'x-client-id'
: dotenv.env[
"API_CLIENT"
] ??
""
,
'x-client-secret'
: dotenv.env[
"API_SECRET"
] ??
""
,
'x-api-version'
:
'2022-09-01'
,
'x-request-id'
:
'fluterwings'
};
print(headers);
var request =
request.body = json.encode({
"order_amount"
: 1,
"order_id"
: orderID,
"order_currency"
:
"INR"
,
"customer_details"
: {
"customer_id"
:
"customer_id"
,
"customer_name"
:
"customer_name"
,
"customer_email"
:
"flutterwings304@gmail.com"
,
"customer_phone"
:
"+917737366393"
},
"order_note"
:
"some order note here"
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if
(response.statusCode == 200) {
return
jsonDecode(await response.stream.bytesToString());
}
else
{
print(await response.stream.bytesToString());
print(response.reasonPhrase);
}
}