diff --git a/example/lib/screens/customer_sheet/customer_sheet_screen.dart b/example/lib/screens/customer_sheet/customer_sheet_screen.dart index 4410a98d6..d49262e23 100644 --- a/example/lib/screens/customer_sheet/customer_sheet_screen.dart +++ b/example/lib/screens/customer_sheet/customer_sheet_screen.dart @@ -87,8 +87,9 @@ class _CustomerSheetScreenState extends State { await Stripe.instance.initCustomerSheet( customerSheetInitParams: CustomerSheetInitParams( // Main params - setupIntentClientSecret: data['setupIntent'], + // setupIntentClientSecret: data['setupIntent'], merchantDisplayName: 'Flutter Stripe Store Demo', + allowsRemovalOfLastSavedPaymentMethod: true, // Customer params customerId: data['customer'], customerEphemeralKeySecret: data['ephemeralKeySecret'], diff --git a/example/lib/screens/others/can_add_to_wallet_screen.dart b/example/lib/screens/others/can_add_to_wallet_screen.dart new file mode 100644 index 000000000..96814f67b --- /dev/null +++ b/example/lib/screens/others/can_add_to_wallet_screen.dart @@ -0,0 +1,106 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_stripe/flutter_stripe.dart'; +import 'package:stripe_example/utils.dart'; +import 'package:stripe_example/widgets/example_scaffold.dart'; +import 'package:stripe_example/widgets/loading_button.dart'; +import 'package:stripe_example/widgets/response_card.dart'; + +class CanAddToWalletScreen extends StatefulWidget { + @override + _CanAddToWalletScreenState createState() => _CanAddToWalletScreenState(); +} + +class _CanAddToWalletScreenState extends State { + late TextEditingController _controller; + CanAddCardToWalletResult? canAddCardToWallet; + IsCardInWalletResult? isCardInWallet; + + @override + void initState() { + _controller = TextEditingController(); + super.initState(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return ExampleScaffold( + title: 'Can add card to wallet', + tags: ['Provisioning'], + padding: EdgeInsets.all(16), + children: [ + TextField( + controller: _controller, + decoration: InputDecoration( + border: OutlineInputBorder(), + labelText: 'Last4', + ), + ), + SizedBox(height: 20), + LoadingButton( + onPressed: () async { + final tmp = await _handleCanAddToWallet(_controller.text); + setState(() { + canAddCardToWallet = tmp; + }); + }, + text: 'Can add card to Wallet', + ), + SizedBox(height: 20), + LoadingButton( + onPressed: () async { + final tmp = await _isCardInToWallet(_controller.text); + setState(() { + isCardInWallet = tmp; + }); + }, + text: 'Is card in Wallet', + ), + SizedBox(height: 20), + if (canAddCardToWallet != null || isCardInWallet != null) + ResponseCard( + response: canAddCardToWallet?.toJson().toPrettyString() ?? + isCardInWallet?.toJson().toPrettyString() ?? + '', + ) + ], + ); + } + + Future _handleCanAddToWallet(String last4) async { + try { + final result = await Stripe.instance.canAddCardToWallet( + CanAddCardToWalletParams( + cardLastFour: last4, + ), + ); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Can add card to wallet: ${result}')), + ); + return result; + } catch (e) { + ScaffoldMessenger.of(context) + .showSnackBar(SnackBar(content: Text('Error: $e'))); + rethrow; + } + } + + Future _isCardInToWallet(String last4) async { + try { + final result = await Stripe.instance.isCardInWallet(last4); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Can add card to wallet: ${result}')), + ); + return result; + } catch (e) { + ScaffoldMessenger.of(context) + .showSnackBar(SnackBar(content: Text('Error: $e'))); + rethrow; + } + } +} diff --git a/example/lib/screens/screens.dart b/example/lib/screens/screens.dart index 6fdf97ece..6743974db 100644 --- a/example/lib/screens/screens.dart +++ b/example/lib/screens/screens.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:stripe_example/screens/customer_sheet/customer_sheet_screen.dart'; +import 'package:stripe_example/screens/others/can_add_to_wallet_screen.dart'; import 'package:stripe_example/screens/payment_sheet/payment_element/payment_element.dart'; import 'package:stripe_example/screens/payment_sheet/payment_sheet_deffered_screen.dart'; import 'package:stripe_example/screens/payment_sheet/payment_sheet_screen.dart'; @@ -368,6 +369,14 @@ class Example extends StatelessWidget { DevicePlatform.web, ], ), + Example( + title: 'Can add card to wallet', + builder: (context) => CanAddToWalletScreen(), + platformsSupported: [ + DevicePlatform.android, + DevicePlatform.ios, + ], + ), ]), ]; } diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj index 71c9c0fe7..bbce8f0ed 100644 --- a/example/macos/Runner.xcodeproj/project.pbxproj +++ b/example/macos/Runner.xcodeproj/project.pbxproj @@ -202,7 +202,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { 33CC10EC2044A3C60003C045 = { diff --git a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 7fd7126b0..ec9aa6bb9 100644 --- a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ canAddCardToWallet( CanAddCardToWalletParams params) async { - final result = await _methodChannel.invokeMethod('canAddCardToWallet', { + final result = await _methodChannel + .invokeMapMethod('canAddCardToWallet', { 'params': params.toJson(), }); + if (result!['error'] != null) { + throw StripeException.fromJson(result); + } - return ResultParser( - parseJson: (json) => CanAddCardToWalletResult.fromJson(json)) - .parse(result: result!, successResultKey: 'canAddCardToWalletResult'); + return CanAddCardToWalletResult.fromJson(result); } @override Future isCardInWallet(String cardLastFour) async { - final result = await _methodChannel.invokeMethod('canAddCardToWallet', { + final result = await _methodChannel + .invokeMapMethod('isCardInWallet', { 'params': {'cardLastFour': cardLastFour}, }); + if (result!['error'] != null) { + throw StripeException.fromJson(result); + } - return ResultParser( - parseJson: (json) => IsCardInWalletResult.fromJson(json)) - .parse(result: result!, successResultKey: 'canAddCardToWalletResult'); + return IsCardInWalletResult.fromJson(result); } }