flutter_applepay_sdk 0.0.3
flutter_applepay_sdk: ^0.0.3 copied to clipboard
This is Wallet SDK for Apple Pay. It is a Flutter plugin that provides functionality to integrate Apple Pay into Flutter applications. Powered by Bonum.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:flutter_applepay_sdk/flutter_applepay_sdk.dart';
import 'package:dio/dio.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _walletInfo = 'Unknown';
String _secureCheckResult = 'Not checked';
@override
void initState() {
super.initState();
//Initialize the Swift→Flutter listener
FlutterApplepaySdk.initializeListener(
onNonceGenerated: _onNonceGenerated,
);
_retrieveWalletInformation();
}
/// Called when Swift sends {cert, nonce, nonceSignature}
Future<Map<String, String>> _onNonceGenerated(Map<String, dynamic> args) async {
print('📥 Received from iOS: $args');
final dio = Dio();
// Your access token (Bearar token)
const token = 'Bearer <token>';
final url = '';
// Your card data formatted like this
const cardData =
'02DD64925A31B7DC2A11483FE5E2AF5589F39D18B5AC682C08C47B846A5D260F27C5FF1F0A2DEA35E253B48880D9A9FC1A1BDD1960964830AAFD8488FFA0B1D6EDF9C49D3E0BACA14F3EC74E2B8A1D0B1DF2748C846DF9827E5C81E081E5F8EC';
final body = {
'data': cardData,
'cert': args['cert'],
'nonce': args['nonce'],
'nonceSignature': args['nonceSignature'],
'holderName': 'Micheal Micheal', // holder name
'phoneNumber': '12345678', // phone number
};
try {
final response = await dio.post(
url,
data: body,
options: Options(
headers: {
'Authorization': token,
'Content-Type': 'application/json',
},
),
);
final activationData = response.data['activationData'] as String;
final encryptedPassData = response.data['encryptedPassData'] as String;
final ephemeralPublicKey = response.data['ephemeralPublicKey'] as String;
return {
'activationData': activationData,
'encryptedPassData': encryptedPassData,
'ephemeralPublicKey': ephemeralPublicKey,
};
} catch (e) {
print(' Tokenization error: $e');
rethrow;
}
}
Future<void> _retrieveWalletInformation() async {
String walletInfo;
try {
walletInfo = await FlutterApplepaySdk.retrieveWalletInformation();
} catch (e) {
walletInfo = 'Failed to retrieve wallet information';
}
if (!mounted) return;
setState(() {
_walletInfo = walletInfo;
});
}
Future<void> _addPaymentPass() async {
final cardDetails = {
'cardholderName': 'TUVSHINSAIKHAN',
'primaryAccountSuffix': '8015',
'primaryAccountIdentifier': '',
'paymentNetwork': 'masterCard',
};
final success = await FlutterApplepaySdk.presentAddPaymentPassViewController(cardDetails);
setState(() {
_walletInfo = success ? '✅ Payment Pass added successfully!' : '❌ Failed to add Payment Pass.';
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Flutter Apple Pay SDK Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Wion:', style: Theme.of(context).textTheme.titleLarge),
Text('Wallet Information:', style: Theme.of(context).textTheme.titleLarge),
const SizedBox(height: 8),
Text(_walletInfo),
const SizedBox(height: 20),
ElevatedButton(
onPressed: _addPaymentPass,
child: const Text('Add Payment Pass'),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
try {
final exists = await FlutterApplepaySdk.secureElementPassExists("8015");
setState(() {
_secureCheckResult = exists ? 'Pass already exists in Wallet.' : 'Pass not found in Wallet.';
});
} catch (e) {
setState(() {
_secureCheckResult = 'Error: ${e.toString()}';
});
}
},
child: const Text('Check Secure'),
),
const SizedBox(height: 10),
Text('Secure Check Result: $_secureCheckResult'),
],
),
),
),
);
}
}