diff --git a/example/lib/screens/payment_sheet/payment_element/platforms/payment_element_web.dart b/example/lib/screens/payment_sheet/payment_element/platforms/payment_element_web.dart index 48621bc77..183871b37 100644 --- a/example/lib/screens/payment_sheet/payment_element/platforms/payment_element_web.dart +++ b/example/lib/screens/payment_sheet/payment_element/platforms/payment_element_web.dart @@ -21,7 +21,7 @@ class PlatformPaymentElement extends StatelessWidget { @override Widget build(BuildContext context) { - return PaymentElement( + return PaymentElement.withIntent( autofocus: true, enablePostalCode: true, onCardChanged: (_) {}, diff --git a/example/lib/screens/setup_future_payments/add_payment_method_screen_loader_web.dart b/example/lib/screens/setup_future_payments/add_payment_method_screen_loader_web.dart index a666c7aed..b8e226125 100644 --- a/example/lib/screens/setup_future_payments/add_payment_method_screen_loader_web.dart +++ b/example/lib/screens/setup_future_payments/add_payment_method_screen_loader_web.dart @@ -72,7 +72,7 @@ class _AddPaymentMethodScreenPlatformState SizedBox(height: 12), Padding( padding: const EdgeInsets.all(24), - child: PaymentElement( + child: PaymentElement.withIntent( clientSecret: widget.setupKeys.clientSecret, onCardChanged: (c) { setState(() => isComplete = c?.complete ?? false); diff --git a/packages/stripe/lib/src/stripe.dart b/packages/stripe/lib/src/stripe.dart index c6ca777cc..764101813 100644 --- a/packages/stripe/lib/src/stripe.dart +++ b/packages/stripe/lib/src/stripe.dart @@ -141,6 +141,18 @@ class Stripe { return isSupported; } + Future availableMobilePayOptions({ + IsGooglePaySupportedParams? googlePay, + PlatformPayWebPaymentRequestCreateOptions? webPaymentRequestCreateOptions, + }) async { + await _awaitForSettings(); + + return await _platform.availableMobilePayOptions( + params: googlePay, + paymentRequestOptions: webPaymentRequestCreateOptions, + ); + } + /// Launches the relevant native wallsheet (Apple Pay on iOS and Google Pay on Android) /// in order to create a payment intent /// @@ -284,6 +296,13 @@ class Stripe { } } + Future elementsSubmit() => _platform.elementsSubmit(); + + Future handleCardAction( + final String paymentIntentClientSecret, + ) => + _platform.handleCardAction(paymentIntentClientSecret); + /// Creates a single-use token that represents a credit card’s details. /// /// Tokens are considered legacy, use [PaymentMethod] and [PaymentIntent] @@ -704,6 +723,7 @@ class Stripe { } bool _needsSettings = true; + void markNeedsSettings() { _needsSettings = true; if (!_platform.updateSettingsLazily) { diff --git a/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.dart b/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.dart index 3373877f6..81df69f84 100644 --- a/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.dart +++ b/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.dart @@ -1,8 +1,7 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:stripe_js/src/api/converters/js_converter.dart'; import 'package:stripe_js/stripe_api.dart'; -import 'package:freezed_annotation/freezed_annotation.dart'; - part 'confirm_payment_options.freezed.dart'; part 'confirm_payment_options.g.dart'; @@ -12,6 +11,9 @@ abstract class ConfirmPaymentOptions with _$ConfirmPaymentOptions { /// The Elements instance that was used to create the Payment Element. @ElementsConverter() required Elements elements, + /// The PaymentIntent's client secret. + String? clientSecret, + /// Parameters that will be passed on to the Stripe API. /// Refer to the Payment Intents API for a full list of parameters. required ConfirmPaymentParams confirmParams, diff --git a/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.freezed.dart b/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.freezed.dart index a84762864..a95ee9e65 100644 --- a/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.freezed.dart +++ b/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.freezed.dart @@ -16,7 +16,8 @@ T _$identity(T value) => value; mixin _$ConfirmPaymentOptions { /// The Elements instance that was used to create the Payment Element. -@ElementsConverter() Elements get elements;/// Parameters that will be passed on to the Stripe API. +@ElementsConverter() Elements get elements;/// The PaymentIntent's client secret. + String? get clientSecret;/// Parameters that will be passed on to the Stripe API. /// Refer to the Payment Intents API for a full list of parameters. ConfirmPaymentParams get confirmParams;/// By default, stripe.confirmPayment will always redirect to your /// return_url after a successful confirmation. @@ -41,16 +42,16 @@ $ConfirmPaymentOptionsCopyWith get copyWith => _$ConfirmP @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is ConfirmPaymentOptions&&(identical(other.elements, elements) || other.elements == elements)&&(identical(other.confirmParams, confirmParams) || other.confirmParams == confirmParams)&&(identical(other.redirect, redirect) || other.redirect == redirect)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is ConfirmPaymentOptions&&(identical(other.elements, elements) || other.elements == elements)&&(identical(other.clientSecret, clientSecret) || other.clientSecret == clientSecret)&&(identical(other.confirmParams, confirmParams) || other.confirmParams == confirmParams)&&(identical(other.redirect, redirect) || other.redirect == redirect)); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,elements,confirmParams,redirect); +int get hashCode => Object.hash(runtimeType,elements,clientSecret,confirmParams,redirect); @override String toString() { - return 'ConfirmPaymentOptions(elements: $elements, confirmParams: $confirmParams, redirect: $redirect)'; + return 'ConfirmPaymentOptions(elements: $elements, clientSecret: $clientSecret, confirmParams: $confirmParams, redirect: $redirect)'; } @@ -61,7 +62,7 @@ abstract mixin class $ConfirmPaymentOptionsCopyWith<$Res> { factory $ConfirmPaymentOptionsCopyWith(ConfirmPaymentOptions value, $Res Function(ConfirmPaymentOptions) _then) = _$ConfirmPaymentOptionsCopyWithImpl; @useResult $Res call({ -@ElementsConverter() Elements elements, ConfirmPaymentParams confirmParams, PaymentConfirmationRedirect? redirect +@ElementsConverter() Elements elements, String? clientSecret, ConfirmPaymentParams confirmParams, PaymentConfirmationRedirect? redirect }); @@ -78,10 +79,11 @@ class _$ConfirmPaymentOptionsCopyWithImpl<$Res> /// Create a copy of ConfirmPaymentOptions /// with the given fields replaced by the non-null parameter values. -@pragma('vm:prefer-inline') @override $Res call({Object? elements = null,Object? confirmParams = null,Object? redirect = freezed,}) { +@pragma('vm:prefer-inline') @override $Res call({Object? elements = null,Object? clientSecret = freezed,Object? confirmParams = null,Object? redirect = freezed,}) { return _then(_self.copyWith( elements: null == elements ? _self.elements : elements // ignore: cast_nullable_to_non_nullable -as Elements,confirmParams: null == confirmParams ? _self.confirmParams : confirmParams // ignore: cast_nullable_to_non_nullable +as Elements,clientSecret: freezed == clientSecret ? _self.clientSecret : clientSecret // ignore: cast_nullable_to_non_nullable +as String?,confirmParams: null == confirmParams ? _self.confirmParams : confirmParams // ignore: cast_nullable_to_non_nullable as ConfirmPaymentParams,redirect: freezed == redirect ? _self.redirect : redirect // ignore: cast_nullable_to_non_nullable as PaymentConfirmationRedirect?, )); @@ -177,10 +179,10 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen(TResult Function(@ElementsConverter() Elements elements, ConfirmPaymentParams confirmParams, PaymentConfirmationRedirect? redirect)? $default,{required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen(TResult Function(@ElementsConverter() Elements elements, String? clientSecret, ConfirmPaymentParams confirmParams, PaymentConfirmationRedirect? redirect)? $default,{required TResult orElse(),}) {final _that = this; switch (_that) { case _ConfirmPaymentOptions() when $default != null: -return $default(_that.elements,_that.confirmParams,_that.redirect);case _: +return $default(_that.elements,_that.clientSecret,_that.confirmParams,_that.redirect);case _: return orElse(); } @@ -198,10 +200,10 @@ return $default(_that.elements,_that.confirmParams,_that.redirect);case _: /// } /// ``` -@optionalTypeArgs TResult when(TResult Function(@ElementsConverter() Elements elements, ConfirmPaymentParams confirmParams, PaymentConfirmationRedirect? redirect) $default,) {final _that = this; +@optionalTypeArgs TResult when(TResult Function(@ElementsConverter() Elements elements, String? clientSecret, ConfirmPaymentParams confirmParams, PaymentConfirmationRedirect? redirect) $default,) {final _that = this; switch (_that) { case _ConfirmPaymentOptions(): -return $default(_that.elements,_that.confirmParams,_that.redirect);case _: +return $default(_that.elements,_that.clientSecret,_that.confirmParams,_that.redirect);case _: throw StateError('Unexpected subclass'); } @@ -218,10 +220,10 @@ return $default(_that.elements,_that.confirmParams,_that.redirect);case _: /// } /// ``` -@optionalTypeArgs TResult? whenOrNull(TResult? Function(@ElementsConverter() Elements elements, ConfirmPaymentParams confirmParams, PaymentConfirmationRedirect? redirect)? $default,) {final _that = this; +@optionalTypeArgs TResult? whenOrNull(TResult? Function(@ElementsConverter() Elements elements, String? clientSecret, ConfirmPaymentParams confirmParams, PaymentConfirmationRedirect? redirect)? $default,) {final _that = this; switch (_that) { case _ConfirmPaymentOptions() when $default != null: -return $default(_that.elements,_that.confirmParams,_that.redirect);case _: +return $default(_that.elements,_that.clientSecret,_that.confirmParams,_that.redirect);case _: return null; } @@ -233,11 +235,13 @@ return $default(_that.elements,_that.confirmParams,_that.redirect);case _: @JsonSerializable() class _ConfirmPaymentOptions implements ConfirmPaymentOptions { - const _ConfirmPaymentOptions({@ElementsConverter() required this.elements, required this.confirmParams, this.redirect}); + const _ConfirmPaymentOptions({@ElementsConverter() required this.elements, this.clientSecret, required this.confirmParams, this.redirect}); factory _ConfirmPaymentOptions.fromJson(Map json) => _$ConfirmPaymentOptionsFromJson(json); /// The Elements instance that was used to create the Payment Element. @override@ElementsConverter() final Elements elements; +/// The PaymentIntent's client secret. +@override final String? clientSecret; /// Parameters that will be passed on to the Stripe API. /// Refer to the Payment Intents API for a full list of parameters. @override final ConfirmPaymentParams confirmParams; @@ -266,16 +270,16 @@ Map toJson() { @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is _ConfirmPaymentOptions&&(identical(other.elements, elements) || other.elements == elements)&&(identical(other.confirmParams, confirmParams) || other.confirmParams == confirmParams)&&(identical(other.redirect, redirect) || other.redirect == redirect)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is _ConfirmPaymentOptions&&(identical(other.elements, elements) || other.elements == elements)&&(identical(other.clientSecret, clientSecret) || other.clientSecret == clientSecret)&&(identical(other.confirmParams, confirmParams) || other.confirmParams == confirmParams)&&(identical(other.redirect, redirect) || other.redirect == redirect)); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,elements,confirmParams,redirect); +int get hashCode => Object.hash(runtimeType,elements,clientSecret,confirmParams,redirect); @override String toString() { - return 'ConfirmPaymentOptions(elements: $elements, confirmParams: $confirmParams, redirect: $redirect)'; + return 'ConfirmPaymentOptions(elements: $elements, clientSecret: $clientSecret, confirmParams: $confirmParams, redirect: $redirect)'; } @@ -286,7 +290,7 @@ abstract mixin class _$ConfirmPaymentOptionsCopyWith<$Res> implements $ConfirmPa factory _$ConfirmPaymentOptionsCopyWith(_ConfirmPaymentOptions value, $Res Function(_ConfirmPaymentOptions) _then) = __$ConfirmPaymentOptionsCopyWithImpl; @override @useResult $Res call({ -@ElementsConverter() Elements elements, ConfirmPaymentParams confirmParams, PaymentConfirmationRedirect? redirect +@ElementsConverter() Elements elements, String? clientSecret, ConfirmPaymentParams confirmParams, PaymentConfirmationRedirect? redirect }); @@ -303,10 +307,11 @@ class __$ConfirmPaymentOptionsCopyWithImpl<$Res> /// Create a copy of ConfirmPaymentOptions /// with the given fields replaced by the non-null parameter values. -@override @pragma('vm:prefer-inline') $Res call({Object? elements = null,Object? confirmParams = null,Object? redirect = freezed,}) { +@override @pragma('vm:prefer-inline') $Res call({Object? elements = null,Object? clientSecret = freezed,Object? confirmParams = null,Object? redirect = freezed,}) { return _then(_ConfirmPaymentOptions( elements: null == elements ? _self.elements : elements // ignore: cast_nullable_to_non_nullable -as Elements,confirmParams: null == confirmParams ? _self.confirmParams : confirmParams // ignore: cast_nullable_to_non_nullable +as Elements,clientSecret: freezed == clientSecret ? _self.clientSecret : clientSecret // ignore: cast_nullable_to_non_nullable +as String?,confirmParams: null == confirmParams ? _self.confirmParams : confirmParams // ignore: cast_nullable_to_non_nullable as ConfirmPaymentParams,redirect: freezed == redirect ? _self.redirect : redirect // ignore: cast_nullable_to_non_nullable as PaymentConfirmationRedirect?, )); diff --git a/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.g.dart b/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.g.dart index 7c4a1a2da..a700f985b 100644 --- a/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.g.dart +++ b/packages/stripe_js/lib/src/api/payment_intents/confirm_payment_options.g.dart @@ -9,6 +9,7 @@ part of 'confirm_payment_options.dart'; _ConfirmPaymentOptions _$ConfirmPaymentOptionsFromJson(Map json) => _ConfirmPaymentOptions( elements: const ElementsConverter().fromJson(json['elements']), + clientSecret: json['clientSecret'] as String?, confirmParams: ConfirmPaymentParams.fromJson( Map.from(json['confirmParams'] as Map), ), @@ -22,6 +23,7 @@ Map _$ConfirmPaymentOptionsToJson( _ConfirmPaymentOptions instance, ) => { 'elements': ?const ElementsConverter().toJson(instance.elements), + 'clientSecret': ?instance.clientSecret, 'confirmParams': instance.confirmParams.toJson(), 'redirect': ?_$PaymentConfirmationRedirectEnumMap[instance.redirect], }; diff --git a/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.dart b/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.dart index 404f5897b..2c729af73 100644 --- a/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.dart +++ b/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.dart @@ -7,7 +7,7 @@ part 'create_payment_method_data.g.dart'; @freezed abstract class CreatePaymentMethodData with _$CreatePaymentMethodData { - const factory CreatePaymentMethodData({ + const factory CreatePaymentMethodData.card({ /// Unique identifier for the object. required String type, @@ -43,7 +43,11 @@ abstract class CreatePaymentMethodData with _$CreatePaymentMethodData { /// Billing information associated with the PaymentMethod that may be used or required by particular types of payment methods. @JsonKey(name: "billing_details") BillingDetails? billingDetails, - }) = _CreatePaymentMethodData; + }) = _CreatePaymentMethodDataCard; + + const factory CreatePaymentMethodData.elements({ + @ElementsConverter() required Elements elements, + }) = _CreatePaymentMethodDataElements; factory CreatePaymentMethodData.fromJson(Map json) => _$CreatePaymentMethodDataFromJson(json); diff --git a/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.freezed.dart b/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.freezed.dart index d07bcf991..3410c1b90 100644 --- a/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.freezed.dart +++ b/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.freezed.dart @@ -11,28 +11,34 @@ part of 'create_payment_method_data.dart'; // dart format off T _$identity(T value) => value; +CreatePaymentMethodData _$CreatePaymentMethodDataFromJson( + Map json +) { + switch (json['runtimeType']) { + case 'card': + return _CreatePaymentMethodDataCard.fromJson( + json + ); + case 'elements': + return _CreatePaymentMethodDataElements.fromJson( + json + ); + + default: + throw CheckedFromJsonException( + json, + 'runtimeType', + 'CreatePaymentMethodData', + 'Invalid union type "${json['runtimeType']}"!' +); + } + +} /// @nodoc mixin _$CreatePaymentMethodData { -/// Unique identifier for the object. - String get type;/// A card or cardNumber Element. -@ElementConverter() Element? get card;/// An auBankAccount Element. -@JsonKey(name: "au_becs_debit")@ElementConverter() Element? get auBecsDebit;/// An fpx Element. -@ElementConverter() Element? get fpx;/// The customer's bank. -@JsonKey(name: "fpx[bank]") String? get fpxBank;/// The customer's bank. -@JsonKey(name: "netbanking[bank]") String? get netbankingBank;/// An idealBank Element. -@ElementConverter() Element? get ideal;/// The customer's bank. -@JsonKey(name: "ideal[bank]") String? get idealBank;/// An iban Element. -@JsonKey(name: "sepa_debit")@ElementConverter() Element? get sepaDebit;/// An IBAN account number. -@JsonKey(name: "sepa_debit[iban]") String? get sepaDebitIban;/// The customer's VPA. -@JsonKey(name: "upi[vpa]") String? get upiVpa;/// Billing information associated with the PaymentMethod that may be used or required by particular types of payment methods. -@JsonKey(name: "billing_details") BillingDetails? get billingDetails; -/// Create a copy of CreatePaymentMethodData -/// with the given fields replaced by the non-null parameter values. -@JsonKey(includeFromJson: false, includeToJson: false) -@pragma('vm:prefer-inline') -$CreatePaymentMethodDataCopyWith get copyWith => _$CreatePaymentMethodDataCopyWithImpl(this as CreatePaymentMethodData, _$identity); + /// Serializes this CreatePaymentMethodData to a JSON map. Map toJson(); @@ -40,73 +46,24 @@ $CreatePaymentMethodDataCopyWith get copyWith => _$Crea @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is CreatePaymentMethodData&&(identical(other.type, type) || other.type == type)&&(identical(other.card, card) || other.card == card)&&(identical(other.auBecsDebit, auBecsDebit) || other.auBecsDebit == auBecsDebit)&&(identical(other.fpx, fpx) || other.fpx == fpx)&&(identical(other.fpxBank, fpxBank) || other.fpxBank == fpxBank)&&(identical(other.netbankingBank, netbankingBank) || other.netbankingBank == netbankingBank)&&(identical(other.ideal, ideal) || other.ideal == ideal)&&(identical(other.idealBank, idealBank) || other.idealBank == idealBank)&&(identical(other.sepaDebit, sepaDebit) || other.sepaDebit == sepaDebit)&&(identical(other.sepaDebitIban, sepaDebitIban) || other.sepaDebitIban == sepaDebitIban)&&(identical(other.upiVpa, upiVpa) || other.upiVpa == upiVpa)&&(identical(other.billingDetails, billingDetails) || other.billingDetails == billingDetails)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is CreatePaymentMethodData); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,type,card,auBecsDebit,fpx,fpxBank,netbankingBank,ideal,idealBank,sepaDebit,sepaDebitIban,upiVpa,billingDetails); +int get hashCode => runtimeType.hashCode; @override String toString() { - return 'CreatePaymentMethodData(type: $type, card: $card, auBecsDebit: $auBecsDebit, fpx: $fpx, fpxBank: $fpxBank, netbankingBank: $netbankingBank, ideal: $ideal, idealBank: $idealBank, sepaDebit: $sepaDebit, sepaDebitIban: $sepaDebitIban, upiVpa: $upiVpa, billingDetails: $billingDetails)'; + return 'CreatePaymentMethodData()'; } } /// @nodoc -abstract mixin class $CreatePaymentMethodDataCopyWith<$Res> { - factory $CreatePaymentMethodDataCopyWith(CreatePaymentMethodData value, $Res Function(CreatePaymentMethodData) _then) = _$CreatePaymentMethodDataCopyWithImpl; -@useResult -$Res call({ - String type,@ElementConverter() Element? card,@JsonKey(name: "au_becs_debit")@ElementConverter() Element? auBecsDebit,@ElementConverter() Element? fpx,@JsonKey(name: "fpx[bank]") String? fpxBank,@JsonKey(name: "netbanking[bank]") String? netbankingBank,@ElementConverter() Element? ideal,@JsonKey(name: "ideal[bank]") String? idealBank,@JsonKey(name: "sepa_debit")@ElementConverter() Element? sepaDebit,@JsonKey(name: "sepa_debit[iban]") String? sepaDebitIban,@JsonKey(name: "upi[vpa]") String? upiVpa,@JsonKey(name: "billing_details") BillingDetails? billingDetails -}); - - -$BillingDetailsCopyWith<$Res>? get billingDetails; - -} -/// @nodoc -class _$CreatePaymentMethodDataCopyWithImpl<$Res> - implements $CreatePaymentMethodDataCopyWith<$Res> { - _$CreatePaymentMethodDataCopyWithImpl(this._self, this._then); - - final CreatePaymentMethodData _self; - final $Res Function(CreatePaymentMethodData) _then; - -/// Create a copy of CreatePaymentMethodData -/// with the given fields replaced by the non-null parameter values. -@pragma('vm:prefer-inline') @override $Res call({Object? type = null,Object? card = freezed,Object? auBecsDebit = freezed,Object? fpx = freezed,Object? fpxBank = freezed,Object? netbankingBank = freezed,Object? ideal = freezed,Object? idealBank = freezed,Object? sepaDebit = freezed,Object? sepaDebitIban = freezed,Object? upiVpa = freezed,Object? billingDetails = freezed,}) { - return _then(_self.copyWith( -type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable -as String,card: freezed == card ? _self.card : card // ignore: cast_nullable_to_non_nullable -as Element?,auBecsDebit: freezed == auBecsDebit ? _self.auBecsDebit : auBecsDebit // ignore: cast_nullable_to_non_nullable -as Element?,fpx: freezed == fpx ? _self.fpx : fpx // ignore: cast_nullable_to_non_nullable -as Element?,fpxBank: freezed == fpxBank ? _self.fpxBank : fpxBank // ignore: cast_nullable_to_non_nullable -as String?,netbankingBank: freezed == netbankingBank ? _self.netbankingBank : netbankingBank // ignore: cast_nullable_to_non_nullable -as String?,ideal: freezed == ideal ? _self.ideal : ideal // ignore: cast_nullable_to_non_nullable -as Element?,idealBank: freezed == idealBank ? _self.idealBank : idealBank // ignore: cast_nullable_to_non_nullable -as String?,sepaDebit: freezed == sepaDebit ? _self.sepaDebit : sepaDebit // ignore: cast_nullable_to_non_nullable -as Element?,sepaDebitIban: freezed == sepaDebitIban ? _self.sepaDebitIban : sepaDebitIban // ignore: cast_nullable_to_non_nullable -as String?,upiVpa: freezed == upiVpa ? _self.upiVpa : upiVpa // ignore: cast_nullable_to_non_nullable -as String?,billingDetails: freezed == billingDetails ? _self.billingDetails : billingDetails // ignore: cast_nullable_to_non_nullable -as BillingDetails?, - )); -} -/// Create a copy of CreatePaymentMethodData -/// with the given fields replaced by the non-null parameter values. -@override -@pragma('vm:prefer-inline') -$BillingDetailsCopyWith<$Res>? get billingDetails { - if (_self.billingDetails == null) { - return null; - } - - return $BillingDetailsCopyWith<$Res>(_self.billingDetails!, (value) { - return _then(_self.copyWith(billingDetails: value)); - }); -} +class $CreatePaymentMethodDataCopyWith<$Res> { +$CreatePaymentMethodDataCopyWith(CreatePaymentMethodData _, $Res Function(CreatePaymentMethodData) __); } @@ -124,11 +81,12 @@ extension CreatePaymentMethodDataPatterns on CreatePaymentMethodData { /// } /// ``` -@optionalTypeArgs TResult maybeMap(TResult Function( _CreatePaymentMethodData value)? $default,{required TResult orElse(),}){ +@optionalTypeArgs TResult maybeMap({TResult Function( _CreatePaymentMethodDataCard value)? card,TResult Function( _CreatePaymentMethodDataElements value)? elements,required TResult orElse(),}){ final _that = this; switch (_that) { -case _CreatePaymentMethodData() when $default != null: -return $default(_that);case _: +case _CreatePaymentMethodDataCard() when card != null: +return card(_that);case _CreatePaymentMethodDataElements() when elements != null: +return elements(_that);case _: return orElse(); } @@ -146,11 +104,12 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult map(TResult Function( _CreatePaymentMethodData value) $default,){ +@optionalTypeArgs TResult map({required TResult Function( _CreatePaymentMethodDataCard value) card,required TResult Function( _CreatePaymentMethodDataElements value) elements,}){ final _that = this; switch (_that) { -case _CreatePaymentMethodData(): -return $default(_that);case _: +case _CreatePaymentMethodDataCard(): +return card(_that);case _CreatePaymentMethodDataElements(): +return elements(_that);case _: throw StateError('Unexpected subclass'); } @@ -167,11 +126,12 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult? mapOrNull(TResult? Function( _CreatePaymentMethodData value)? $default,){ +@optionalTypeArgs TResult? mapOrNull({TResult? Function( _CreatePaymentMethodDataCard value)? card,TResult? Function( _CreatePaymentMethodDataElements value)? elements,}){ final _that = this; switch (_that) { -case _CreatePaymentMethodData() when $default != null: -return $default(_that);case _: +case _CreatePaymentMethodDataCard() when card != null: +return card(_that);case _CreatePaymentMethodDataElements() when elements != null: +return elements(_that);case _: return null; } @@ -188,10 +148,11 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen(TResult Function( String type, @ElementConverter() Element? card, @JsonKey(name: "au_becs_debit")@ElementConverter() Element? auBecsDebit, @ElementConverter() Element? fpx, @JsonKey(name: "fpx[bank]") String? fpxBank, @JsonKey(name: "netbanking[bank]") String? netbankingBank, @ElementConverter() Element? ideal, @JsonKey(name: "ideal[bank]") String? idealBank, @JsonKey(name: "sepa_debit")@ElementConverter() Element? sepaDebit, @JsonKey(name: "sepa_debit[iban]") String? sepaDebitIban, @JsonKey(name: "upi[vpa]") String? upiVpa, @JsonKey(name: "billing_details") BillingDetails? billingDetails)? $default,{required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen({TResult Function( String type, @ElementConverter() Element? card, @JsonKey(name: "au_becs_debit")@ElementConverter() Element? auBecsDebit, @ElementConverter() Element? fpx, @JsonKey(name: "fpx[bank]") String? fpxBank, @JsonKey(name: "netbanking[bank]") String? netbankingBank, @ElementConverter() Element? ideal, @JsonKey(name: "ideal[bank]") String? idealBank, @JsonKey(name: "sepa_debit")@ElementConverter() Element? sepaDebit, @JsonKey(name: "sepa_debit[iban]") String? sepaDebitIban, @JsonKey(name: "upi[vpa]") String? upiVpa, @JsonKey(name: "billing_details") BillingDetails? billingDetails)? card,TResult Function(@ElementsConverter() Elements elements)? elements,required TResult orElse(),}) {final _that = this; switch (_that) { -case _CreatePaymentMethodData() when $default != null: -return $default(_that.type,_that.card,_that.auBecsDebit,_that.fpx,_that.fpxBank,_that.netbankingBank,_that.ideal,_that.idealBank,_that.sepaDebit,_that.sepaDebitIban,_that.upiVpa,_that.billingDetails);case _: +case _CreatePaymentMethodDataCard() when card != null: +return card(_that.type,_that.card,_that.auBecsDebit,_that.fpx,_that.fpxBank,_that.netbankingBank,_that.ideal,_that.idealBank,_that.sepaDebit,_that.sepaDebitIban,_that.upiVpa,_that.billingDetails);case _CreatePaymentMethodDataElements() when elements != null: +return elements(_that.elements);case _: return orElse(); } @@ -209,10 +170,11 @@ return $default(_that.type,_that.card,_that.auBecsDebit,_that.fpx,_that.fpxBank, /// } /// ``` -@optionalTypeArgs TResult when(TResult Function( String type, @ElementConverter() Element? card, @JsonKey(name: "au_becs_debit")@ElementConverter() Element? auBecsDebit, @ElementConverter() Element? fpx, @JsonKey(name: "fpx[bank]") String? fpxBank, @JsonKey(name: "netbanking[bank]") String? netbankingBank, @ElementConverter() Element? ideal, @JsonKey(name: "ideal[bank]") String? idealBank, @JsonKey(name: "sepa_debit")@ElementConverter() Element? sepaDebit, @JsonKey(name: "sepa_debit[iban]") String? sepaDebitIban, @JsonKey(name: "upi[vpa]") String? upiVpa, @JsonKey(name: "billing_details") BillingDetails? billingDetails) $default,) {final _that = this; +@optionalTypeArgs TResult when({required TResult Function( String type, @ElementConverter() Element? card, @JsonKey(name: "au_becs_debit")@ElementConverter() Element? auBecsDebit, @ElementConverter() Element? fpx, @JsonKey(name: "fpx[bank]") String? fpxBank, @JsonKey(name: "netbanking[bank]") String? netbankingBank, @ElementConverter() Element? ideal, @JsonKey(name: "ideal[bank]") String? idealBank, @JsonKey(name: "sepa_debit")@ElementConverter() Element? sepaDebit, @JsonKey(name: "sepa_debit[iban]") String? sepaDebitIban, @JsonKey(name: "upi[vpa]") String? upiVpa, @JsonKey(name: "billing_details") BillingDetails? billingDetails) card,required TResult Function(@ElementsConverter() Elements elements) elements,}) {final _that = this; switch (_that) { -case _CreatePaymentMethodData(): -return $default(_that.type,_that.card,_that.auBecsDebit,_that.fpx,_that.fpxBank,_that.netbankingBank,_that.ideal,_that.idealBank,_that.sepaDebit,_that.sepaDebitIban,_that.upiVpa,_that.billingDetails);case _: +case _CreatePaymentMethodDataCard(): +return card(_that.type,_that.card,_that.auBecsDebit,_that.fpx,_that.fpxBank,_that.netbankingBank,_that.ideal,_that.idealBank,_that.sepaDebit,_that.sepaDebitIban,_that.upiVpa,_that.billingDetails);case _CreatePaymentMethodDataElements(): +return elements(_that.elements);case _: throw StateError('Unexpected subclass'); } @@ -229,10 +191,11 @@ return $default(_that.type,_that.card,_that.auBecsDebit,_that.fpx,_that.fpxBank, /// } /// ``` -@optionalTypeArgs TResult? whenOrNull(TResult? Function( String type, @ElementConverter() Element? card, @JsonKey(name: "au_becs_debit")@ElementConverter() Element? auBecsDebit, @ElementConverter() Element? fpx, @JsonKey(name: "fpx[bank]") String? fpxBank, @JsonKey(name: "netbanking[bank]") String? netbankingBank, @ElementConverter() Element? ideal, @JsonKey(name: "ideal[bank]") String? idealBank, @JsonKey(name: "sepa_debit")@ElementConverter() Element? sepaDebit, @JsonKey(name: "sepa_debit[iban]") String? sepaDebitIban, @JsonKey(name: "upi[vpa]") String? upiVpa, @JsonKey(name: "billing_details") BillingDetails? billingDetails)? $default,) {final _that = this; +@optionalTypeArgs TResult? whenOrNull({TResult? Function( String type, @ElementConverter() Element? card, @JsonKey(name: "au_becs_debit")@ElementConverter() Element? auBecsDebit, @ElementConverter() Element? fpx, @JsonKey(name: "fpx[bank]") String? fpxBank, @JsonKey(name: "netbanking[bank]") String? netbankingBank, @ElementConverter() Element? ideal, @JsonKey(name: "ideal[bank]") String? idealBank, @JsonKey(name: "sepa_debit")@ElementConverter() Element? sepaDebit, @JsonKey(name: "sepa_debit[iban]") String? sepaDebitIban, @JsonKey(name: "upi[vpa]") String? upiVpa, @JsonKey(name: "billing_details") BillingDetails? billingDetails)? card,TResult? Function(@ElementsConverter() Elements elements)? elements,}) {final _that = this; switch (_that) { -case _CreatePaymentMethodData() when $default != null: -return $default(_that.type,_that.card,_that.auBecsDebit,_that.fpx,_that.fpxBank,_that.netbankingBank,_that.ideal,_that.idealBank,_that.sepaDebit,_that.sepaDebitIban,_that.upiVpa,_that.billingDetails);case _: +case _CreatePaymentMethodDataCard() when card != null: +return card(_that.type,_that.card,_that.auBecsDebit,_that.fpx,_that.fpxBank,_that.netbankingBank,_that.ideal,_that.idealBank,_that.sepaDebit,_that.sepaDebitIban,_that.upiVpa,_that.billingDetails);case _CreatePaymentMethodDataElements() when elements != null: +return elements(_that.elements);case _: return null; } @@ -243,49 +206,53 @@ return $default(_that.type,_that.card,_that.auBecsDebit,_that.fpx,_that.fpxBank, /// @nodoc @JsonSerializable() -class _CreatePaymentMethodData implements CreatePaymentMethodData { - const _CreatePaymentMethodData({required this.type, @ElementConverter() this.card, @JsonKey(name: "au_becs_debit")@ElementConverter() this.auBecsDebit, @ElementConverter() this.fpx, @JsonKey(name: "fpx[bank]") this.fpxBank, @JsonKey(name: "netbanking[bank]") this.netbankingBank, @ElementConverter() this.ideal, @JsonKey(name: "ideal[bank]") this.idealBank, @JsonKey(name: "sepa_debit")@ElementConverter() this.sepaDebit, @JsonKey(name: "sepa_debit[iban]") this.sepaDebitIban, @JsonKey(name: "upi[vpa]") this.upiVpa, @JsonKey(name: "billing_details") this.billingDetails}); - factory _CreatePaymentMethodData.fromJson(Map json) => _$CreatePaymentMethodDataFromJson(json); +class _CreatePaymentMethodDataCard implements CreatePaymentMethodData { + const _CreatePaymentMethodDataCard({required this.type, @ElementConverter() this.card, @JsonKey(name: "au_becs_debit")@ElementConverter() this.auBecsDebit, @ElementConverter() this.fpx, @JsonKey(name: "fpx[bank]") this.fpxBank, @JsonKey(name: "netbanking[bank]") this.netbankingBank, @ElementConverter() this.ideal, @JsonKey(name: "ideal[bank]") this.idealBank, @JsonKey(name: "sepa_debit")@ElementConverter() this.sepaDebit, @JsonKey(name: "sepa_debit[iban]") this.sepaDebitIban, @JsonKey(name: "upi[vpa]") this.upiVpa, @JsonKey(name: "billing_details") this.billingDetails, final String? $type}): $type = $type ?? 'card'; + factory _CreatePaymentMethodDataCard.fromJson(Map json) => _$CreatePaymentMethodDataCardFromJson(json); /// Unique identifier for the object. -@override final String type; + final String type; /// A card or cardNumber Element. -@override@ElementConverter() final Element? card; +@ElementConverter() final Element? card; /// An auBankAccount Element. -@override@JsonKey(name: "au_becs_debit")@ElementConverter() final Element? auBecsDebit; +@JsonKey(name: "au_becs_debit")@ElementConverter() final Element? auBecsDebit; /// An fpx Element. -@override@ElementConverter() final Element? fpx; +@ElementConverter() final Element? fpx; /// The customer's bank. -@override@JsonKey(name: "fpx[bank]") final String? fpxBank; +@JsonKey(name: "fpx[bank]") final String? fpxBank; /// The customer's bank. -@override@JsonKey(name: "netbanking[bank]") final String? netbankingBank; +@JsonKey(name: "netbanking[bank]") final String? netbankingBank; /// An idealBank Element. -@override@ElementConverter() final Element? ideal; +@ElementConverter() final Element? ideal; /// The customer's bank. -@override@JsonKey(name: "ideal[bank]") final String? idealBank; +@JsonKey(name: "ideal[bank]") final String? idealBank; /// An iban Element. -@override@JsonKey(name: "sepa_debit")@ElementConverter() final Element? sepaDebit; +@JsonKey(name: "sepa_debit")@ElementConverter() final Element? sepaDebit; /// An IBAN account number. -@override@JsonKey(name: "sepa_debit[iban]") final String? sepaDebitIban; +@JsonKey(name: "sepa_debit[iban]") final String? sepaDebitIban; /// The customer's VPA. -@override@JsonKey(name: "upi[vpa]") final String? upiVpa; +@JsonKey(name: "upi[vpa]") final String? upiVpa; /// Billing information associated with the PaymentMethod that may be used or required by particular types of payment methods. -@override@JsonKey(name: "billing_details") final BillingDetails? billingDetails; +@JsonKey(name: "billing_details") final BillingDetails? billingDetails; + +@JsonKey(name: 'runtimeType') +final String $type; + /// Create a copy of CreatePaymentMethodData /// with the given fields replaced by the non-null parameter values. -@override @JsonKey(includeFromJson: false, includeToJson: false) +@JsonKey(includeFromJson: false, includeToJson: false) @pragma('vm:prefer-inline') -_$CreatePaymentMethodDataCopyWith<_CreatePaymentMethodData> get copyWith => __$CreatePaymentMethodDataCopyWithImpl<_CreatePaymentMethodData>(this, _$identity); +_$CreatePaymentMethodDataCardCopyWith<_CreatePaymentMethodDataCard> get copyWith => __$CreatePaymentMethodDataCardCopyWithImpl<_CreatePaymentMethodDataCard>(this, _$identity); @override Map toJson() { - return _$CreatePaymentMethodDataToJson(this, ); + return _$CreatePaymentMethodDataCardToJson(this, ); } @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is _CreatePaymentMethodData&&(identical(other.type, type) || other.type == type)&&(identical(other.card, card) || other.card == card)&&(identical(other.auBecsDebit, auBecsDebit) || other.auBecsDebit == auBecsDebit)&&(identical(other.fpx, fpx) || other.fpx == fpx)&&(identical(other.fpxBank, fpxBank) || other.fpxBank == fpxBank)&&(identical(other.netbankingBank, netbankingBank) || other.netbankingBank == netbankingBank)&&(identical(other.ideal, ideal) || other.ideal == ideal)&&(identical(other.idealBank, idealBank) || other.idealBank == idealBank)&&(identical(other.sepaDebit, sepaDebit) || other.sepaDebit == sepaDebit)&&(identical(other.sepaDebitIban, sepaDebitIban) || other.sepaDebitIban == sepaDebitIban)&&(identical(other.upiVpa, upiVpa) || other.upiVpa == upiVpa)&&(identical(other.billingDetails, billingDetails) || other.billingDetails == billingDetails)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is _CreatePaymentMethodDataCard&&(identical(other.type, type) || other.type == type)&&(identical(other.card, card) || other.card == card)&&(identical(other.auBecsDebit, auBecsDebit) || other.auBecsDebit == auBecsDebit)&&(identical(other.fpx, fpx) || other.fpx == fpx)&&(identical(other.fpxBank, fpxBank) || other.fpxBank == fpxBank)&&(identical(other.netbankingBank, netbankingBank) || other.netbankingBank == netbankingBank)&&(identical(other.ideal, ideal) || other.ideal == ideal)&&(identical(other.idealBank, idealBank) || other.idealBank == idealBank)&&(identical(other.sepaDebit, sepaDebit) || other.sepaDebit == sepaDebit)&&(identical(other.sepaDebitIban, sepaDebitIban) || other.sepaDebitIban == sepaDebitIban)&&(identical(other.upiVpa, upiVpa) || other.upiVpa == upiVpa)&&(identical(other.billingDetails, billingDetails) || other.billingDetails == billingDetails)); } @JsonKey(includeFromJson: false, includeToJson: false) @@ -294,36 +261,36 @@ int get hashCode => Object.hash(runtimeType,type,card,auBecsDebit,fpx,fpxBank,ne @override String toString() { - return 'CreatePaymentMethodData(type: $type, card: $card, auBecsDebit: $auBecsDebit, fpx: $fpx, fpxBank: $fpxBank, netbankingBank: $netbankingBank, ideal: $ideal, idealBank: $idealBank, sepaDebit: $sepaDebit, sepaDebitIban: $sepaDebitIban, upiVpa: $upiVpa, billingDetails: $billingDetails)'; + return 'CreatePaymentMethodData.card(type: $type, card: $card, auBecsDebit: $auBecsDebit, fpx: $fpx, fpxBank: $fpxBank, netbankingBank: $netbankingBank, ideal: $ideal, idealBank: $idealBank, sepaDebit: $sepaDebit, sepaDebitIban: $sepaDebitIban, upiVpa: $upiVpa, billingDetails: $billingDetails)'; } } /// @nodoc -abstract mixin class _$CreatePaymentMethodDataCopyWith<$Res> implements $CreatePaymentMethodDataCopyWith<$Res> { - factory _$CreatePaymentMethodDataCopyWith(_CreatePaymentMethodData value, $Res Function(_CreatePaymentMethodData) _then) = __$CreatePaymentMethodDataCopyWithImpl; -@override @useResult +abstract mixin class _$CreatePaymentMethodDataCardCopyWith<$Res> implements $CreatePaymentMethodDataCopyWith<$Res> { + factory _$CreatePaymentMethodDataCardCopyWith(_CreatePaymentMethodDataCard value, $Res Function(_CreatePaymentMethodDataCard) _then) = __$CreatePaymentMethodDataCardCopyWithImpl; +@useResult $Res call({ String type,@ElementConverter() Element? card,@JsonKey(name: "au_becs_debit")@ElementConverter() Element? auBecsDebit,@ElementConverter() Element? fpx,@JsonKey(name: "fpx[bank]") String? fpxBank,@JsonKey(name: "netbanking[bank]") String? netbankingBank,@ElementConverter() Element? ideal,@JsonKey(name: "ideal[bank]") String? idealBank,@JsonKey(name: "sepa_debit")@ElementConverter() Element? sepaDebit,@JsonKey(name: "sepa_debit[iban]") String? sepaDebitIban,@JsonKey(name: "upi[vpa]") String? upiVpa,@JsonKey(name: "billing_details") BillingDetails? billingDetails }); -@override $BillingDetailsCopyWith<$Res>? get billingDetails; +$BillingDetailsCopyWith<$Res>? get billingDetails; } /// @nodoc -class __$CreatePaymentMethodDataCopyWithImpl<$Res> - implements _$CreatePaymentMethodDataCopyWith<$Res> { - __$CreatePaymentMethodDataCopyWithImpl(this._self, this._then); +class __$CreatePaymentMethodDataCardCopyWithImpl<$Res> + implements _$CreatePaymentMethodDataCardCopyWith<$Res> { + __$CreatePaymentMethodDataCardCopyWithImpl(this._self, this._then); - final _CreatePaymentMethodData _self; - final $Res Function(_CreatePaymentMethodData) _then; + final _CreatePaymentMethodDataCard _self; + final $Res Function(_CreatePaymentMethodDataCard) _then; /// Create a copy of CreatePaymentMethodData /// with the given fields replaced by the non-null parameter values. -@override @pragma('vm:prefer-inline') $Res call({Object? type = null,Object? card = freezed,Object? auBecsDebit = freezed,Object? fpx = freezed,Object? fpxBank = freezed,Object? netbankingBank = freezed,Object? ideal = freezed,Object? idealBank = freezed,Object? sepaDebit = freezed,Object? sepaDebitIban = freezed,Object? upiVpa = freezed,Object? billingDetails = freezed,}) { - return _then(_CreatePaymentMethodData( +@pragma('vm:prefer-inline') $Res call({Object? type = null,Object? card = freezed,Object? auBecsDebit = freezed,Object? fpx = freezed,Object? fpxBank = freezed,Object? netbankingBank = freezed,Object? ideal = freezed,Object? idealBank = freezed,Object? sepaDebit = freezed,Object? sepaDebitIban = freezed,Object? upiVpa = freezed,Object? billingDetails = freezed,}) { + return _then(_CreatePaymentMethodDataCard( type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable as String,card: freezed == card ? _self.card : card // ignore: cast_nullable_to_non_nullable as Element?,auBecsDebit: freezed == auBecsDebit ? _self.auBecsDebit : auBecsDebit // ignore: cast_nullable_to_non_nullable @@ -355,4 +322,77 @@ $BillingDetailsCopyWith<$Res>? get billingDetails { } } +/// @nodoc +@JsonSerializable() + +class _CreatePaymentMethodDataElements implements CreatePaymentMethodData { + const _CreatePaymentMethodDataElements({@ElementsConverter() required this.elements, final String? $type}): $type = $type ?? 'elements'; + factory _CreatePaymentMethodDataElements.fromJson(Map json) => _$CreatePaymentMethodDataElementsFromJson(json); + +@ElementsConverter() final Elements elements; + +@JsonKey(name: 'runtimeType') +final String $type; + + +/// Create a copy of CreatePaymentMethodData +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +_$CreatePaymentMethodDataElementsCopyWith<_CreatePaymentMethodDataElements> get copyWith => __$CreatePaymentMethodDataElementsCopyWithImpl<_CreatePaymentMethodDataElements>(this, _$identity); + +@override +Map toJson() { + return _$CreatePaymentMethodDataElementsToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _CreatePaymentMethodDataElements&&(identical(other.elements, elements) || other.elements == elements)); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => Object.hash(runtimeType,elements); + +@override +String toString() { + return 'CreatePaymentMethodData.elements(elements: $elements)'; +} + + +} + +/// @nodoc +abstract mixin class _$CreatePaymentMethodDataElementsCopyWith<$Res> implements $CreatePaymentMethodDataCopyWith<$Res> { + factory _$CreatePaymentMethodDataElementsCopyWith(_CreatePaymentMethodDataElements value, $Res Function(_CreatePaymentMethodDataElements) _then) = __$CreatePaymentMethodDataElementsCopyWithImpl; +@useResult +$Res call({ +@ElementsConverter() Elements elements +}); + + + + +} +/// @nodoc +class __$CreatePaymentMethodDataElementsCopyWithImpl<$Res> + implements _$CreatePaymentMethodDataElementsCopyWith<$Res> { + __$CreatePaymentMethodDataElementsCopyWithImpl(this._self, this._then); + + final _CreatePaymentMethodDataElements _self; + final $Res Function(_CreatePaymentMethodDataElements) _then; + +/// Create a copy of CreatePaymentMethodData +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') $Res call({Object? elements = null,}) { + return _then(_CreatePaymentMethodDataElements( +elements: null == elements ? _self.elements : elements // ignore: cast_nullable_to_non_nullable +as Elements, + )); +} + + +} + // dart format on diff --git a/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.g.dart b/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.g.dart index 496e21d89..286c8693b 100644 --- a/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.g.dart +++ b/packages/stripe_js/lib/src/api/payment_methods/create_payment_method_data.g.dart @@ -6,8 +6,8 @@ part of 'create_payment_method_data.dart'; // JsonSerializableGenerator // ************************************************************************** -_CreatePaymentMethodData _$CreatePaymentMethodDataFromJson(Map json) => - _CreatePaymentMethodData( +_CreatePaymentMethodDataCard _$CreatePaymentMethodDataCardFromJson(Map json) => + _CreatePaymentMethodDataCard( type: json['type'] as String, card: const ElementConverter().fromJson(json['card']), auBecsDebit: const ElementConverter().fromJson(json['au_becs_debit']), @@ -24,10 +24,11 @@ _CreatePaymentMethodData _$CreatePaymentMethodDataFromJson(Map json) => : BillingDetails.fromJson( Map.from(json['billing_details'] as Map), ), + $type: json['runtimeType'] as String?, ); -Map _$CreatePaymentMethodDataToJson( - _CreatePaymentMethodData instance, +Map _$CreatePaymentMethodDataCardToJson( + _CreatePaymentMethodDataCard instance, ) => { 'type': instance.type, 'card': ?_$JsonConverterToJson( @@ -56,9 +57,24 @@ Map _$CreatePaymentMethodDataToJson( 'sepa_debit[iban]': ?instance.sepaDebitIban, 'upi[vpa]': ?instance.upiVpa, 'billing_details': ?instance.billingDetails?.toJson(), + 'runtimeType': instance.$type, }; Json? _$JsonConverterToJson( Value? value, Json? Function(Value value) toJson, ) => value == null ? null : toJson(value); + +_CreatePaymentMethodDataElements _$CreatePaymentMethodDataElementsFromJson( + Map json, +) => _CreatePaymentMethodDataElements( + elements: const ElementsConverter().fromJson(json['elements']), + $type: json['runtimeType'] as String?, +); + +Map _$CreatePaymentMethodDataElementsToJson( + _CreatePaymentMethodDataElements instance, +) => { + 'elements': ?const ElementsConverter().toJson(instance.elements), + 'runtimeType': instance.$type, +}; diff --git a/packages/stripe_js/lib/src/api/payment_methods/payment_method.dart b/packages/stripe_js/lib/src/api/payment_methods/payment_method.dart index 55af2849a..c9b29088b 100644 --- a/packages/stripe_js/lib/src/api/payment_methods/payment_method.dart +++ b/packages/stripe_js/lib/src/api/payment_methods/payment_method.dart @@ -70,6 +70,7 @@ abstract class PaymentMethod with _$PaymentMethod { /// An additional hash is included on the PaymentMethod with a name /// matching this value. /// It contains additional information specific to the PaymentMethod type. + @JsonKey(unknownEnumValue: PaymentMethodType.unknown) required PaymentMethodType type, }) = _PaymentMethod; diff --git a/packages/stripe_js/lib/src/api/payment_methods/payment_method.freezed.dart b/packages/stripe_js/lib/src/api/payment_methods/payment_method.freezed.dart index fc617dece..258c941fa 100644 --- a/packages/stripe_js/lib/src/api/payment_methods/payment_method.freezed.dart +++ b/packages/stripe_js/lib/src/api/payment_methods/payment_method.freezed.dart @@ -41,7 +41,7 @@ mixin _$PaymentMethod { /// An additional hash is included on the PaymentMethod with a name /// matching this value. /// It contains additional information specific to the PaymentMethod type. - PaymentMethodType get type; +@JsonKey(unknownEnumValue: PaymentMethodType.unknown) PaymentMethodType get type; /// Create a copy of PaymentMethod /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) @@ -74,7 +74,7 @@ abstract mixin class $PaymentMethodCopyWith<$Res> { factory $PaymentMethodCopyWith(PaymentMethod value, $Res Function(PaymentMethod) _then) = _$PaymentMethodCopyWithImpl; @useResult $Res call({ - String id, String object, BillingDetails? billingDetails, String? customer, Map metadata, bool livemode, int? created, CardPaymentMethod? card, SepaDebit? sepaDebit, BacsDebit? bacsDebit, AuBecsDebit? auBecsDebit, Ideal? ideal, Fpx? fpx, Upi? upi, UsBankAccount? usBankAccount, PaymentMethodType type + String id, String object, BillingDetails? billingDetails, String? customer, Map metadata, bool livemode, int? created, CardPaymentMethod? card, SepaDebit? sepaDebit, BacsDebit? bacsDebit, AuBecsDebit? auBecsDebit, Ideal? ideal, Fpx? fpx, Upi? upi, UsBankAccount? usBankAccount,@JsonKey(unknownEnumValue: PaymentMethodType.unknown) PaymentMethodType type }); @@ -302,7 +302,7 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen(TResult Function( String id, String object, BillingDetails? billingDetails, String? customer, Map metadata, bool livemode, int? created, CardPaymentMethod? card, SepaDebit? sepaDebit, BacsDebit? bacsDebit, AuBecsDebit? auBecsDebit, Ideal? ideal, Fpx? fpx, Upi? upi, UsBankAccount? usBankAccount, PaymentMethodType type)? $default,{required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen(TResult Function( String id, String object, BillingDetails? billingDetails, String? customer, Map metadata, bool livemode, int? created, CardPaymentMethod? card, SepaDebit? sepaDebit, BacsDebit? bacsDebit, AuBecsDebit? auBecsDebit, Ideal? ideal, Fpx? fpx, Upi? upi, UsBankAccount? usBankAccount, @JsonKey(unknownEnumValue: PaymentMethodType.unknown) PaymentMethodType type)? $default,{required TResult orElse(),}) {final _that = this; switch (_that) { case _PaymentMethod() when $default != null: return $default(_that.id,_that.object,_that.billingDetails,_that.customer,_that.metadata,_that.livemode,_that.created,_that.card,_that.sepaDebit,_that.bacsDebit,_that.auBecsDebit,_that.ideal,_that.fpx,_that.upi,_that.usBankAccount,_that.type);case _: @@ -323,7 +323,7 @@ return $default(_that.id,_that.object,_that.billingDetails,_that.customer,_that. /// } /// ``` -@optionalTypeArgs TResult when(TResult Function( String id, String object, BillingDetails? billingDetails, String? customer, Map metadata, bool livemode, int? created, CardPaymentMethod? card, SepaDebit? sepaDebit, BacsDebit? bacsDebit, AuBecsDebit? auBecsDebit, Ideal? ideal, Fpx? fpx, Upi? upi, UsBankAccount? usBankAccount, PaymentMethodType type) $default,) {final _that = this; +@optionalTypeArgs TResult when(TResult Function( String id, String object, BillingDetails? billingDetails, String? customer, Map metadata, bool livemode, int? created, CardPaymentMethod? card, SepaDebit? sepaDebit, BacsDebit? bacsDebit, AuBecsDebit? auBecsDebit, Ideal? ideal, Fpx? fpx, Upi? upi, UsBankAccount? usBankAccount, @JsonKey(unknownEnumValue: PaymentMethodType.unknown) PaymentMethodType type) $default,) {final _that = this; switch (_that) { case _PaymentMethod(): return $default(_that.id,_that.object,_that.billingDetails,_that.customer,_that.metadata,_that.livemode,_that.created,_that.card,_that.sepaDebit,_that.bacsDebit,_that.auBecsDebit,_that.ideal,_that.fpx,_that.upi,_that.usBankAccount,_that.type);case _: @@ -343,7 +343,7 @@ return $default(_that.id,_that.object,_that.billingDetails,_that.customer,_that. /// } /// ``` -@optionalTypeArgs TResult? whenOrNull(TResult? Function( String id, String object, BillingDetails? billingDetails, String? customer, Map metadata, bool livemode, int? created, CardPaymentMethod? card, SepaDebit? sepaDebit, BacsDebit? bacsDebit, AuBecsDebit? auBecsDebit, Ideal? ideal, Fpx? fpx, Upi? upi, UsBankAccount? usBankAccount, PaymentMethodType type)? $default,) {final _that = this; +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String id, String object, BillingDetails? billingDetails, String? customer, Map metadata, bool livemode, int? created, CardPaymentMethod? card, SepaDebit? sepaDebit, BacsDebit? bacsDebit, AuBecsDebit? auBecsDebit, Ideal? ideal, Fpx? fpx, Upi? upi, UsBankAccount? usBankAccount, @JsonKey(unknownEnumValue: PaymentMethodType.unknown) PaymentMethodType type)? $default,) {final _that = this; switch (_that) { case _PaymentMethod() when $default != null: return $default(_that.id,_that.object,_that.billingDetails,_that.customer,_that.metadata,_that.livemode,_that.created,_that.card,_that.sepaDebit,_that.bacsDebit,_that.auBecsDebit,_that.ideal,_that.fpx,_that.upi,_that.usBankAccount,_that.type);case _: @@ -358,7 +358,7 @@ return $default(_that.id,_that.object,_that.billingDetails,_that.customer,_that. @JsonSerializable(explicitToJson: true) class _PaymentMethod implements PaymentMethod { - const _PaymentMethod({required this.id, this.object = "payment_method", this.billingDetails, this.customer, final Map metadata = const {}, this.livemode = true, this.created, this.card, this.sepaDebit, this.bacsDebit, this.auBecsDebit, this.ideal, this.fpx, this.upi, this.usBankAccount, required this.type}): _metadata = metadata; + const _PaymentMethod({required this.id, this.object = "payment_method", this.billingDetails, this.customer, final Map metadata = const {}, this.livemode = true, this.created, this.card, this.sepaDebit, this.bacsDebit, this.auBecsDebit, this.ideal, this.fpx, this.upi, this.usBankAccount, @JsonKey(unknownEnumValue: PaymentMethodType.unknown) required this.type}): _metadata = metadata; factory _PaymentMethod.fromJson(Map json) => _$PaymentMethodFromJson(json); /// Unique identifier for the object. @@ -411,7 +411,7 @@ class _PaymentMethod implements PaymentMethod { /// An additional hash is included on the PaymentMethod with a name /// matching this value. /// It contains additional information specific to the PaymentMethod type. -@override final PaymentMethodType type; +@override@JsonKey(unknownEnumValue: PaymentMethodType.unknown) final PaymentMethodType type; /// Create a copy of PaymentMethod /// with the given fields replaced by the non-null parameter values. @@ -446,7 +446,7 @@ abstract mixin class _$PaymentMethodCopyWith<$Res> implements $PaymentMethodCopy factory _$PaymentMethodCopyWith(_PaymentMethod value, $Res Function(_PaymentMethod) _then) = __$PaymentMethodCopyWithImpl; @override @useResult $Res call({ - String id, String object, BillingDetails? billingDetails, String? customer, Map metadata, bool livemode, int? created, CardPaymentMethod? card, SepaDebit? sepaDebit, BacsDebit? bacsDebit, AuBecsDebit? auBecsDebit, Ideal? ideal, Fpx? fpx, Upi? upi, UsBankAccount? usBankAccount, PaymentMethodType type + String id, String object, BillingDetails? billingDetails, String? customer, Map metadata, bool livemode, int? created, CardPaymentMethod? card, SepaDebit? sepaDebit, BacsDebit? bacsDebit, AuBecsDebit? auBecsDebit, Ideal? ideal, Fpx? fpx, Upi? upi, UsBankAccount? usBankAccount,@JsonKey(unknownEnumValue: PaymentMethodType.unknown) PaymentMethodType type }); diff --git a/packages/stripe_js/lib/src/api/payment_methods/payment_method.g.dart b/packages/stripe_js/lib/src/api/payment_methods/payment_method.g.dart index 3b1b165d9..18c359fa9 100644 --- a/packages/stripe_js/lib/src/api/payment_methods/payment_method.g.dart +++ b/packages/stripe_js/lib/src/api/payment_methods/payment_method.g.dart @@ -50,7 +50,11 @@ _PaymentMethod _$PaymentMethodFromJson(Map json) => _PaymentMethod( : UsBankAccount.fromJson( Map.from(json['usBankAccount'] as Map), ), - type: $enumDecode(_$PaymentMethodTypeEnumMap, json['type']), + type: $enumDecode( + _$PaymentMethodTypeEnumMap, + json['type'], + unknownValue: PaymentMethodType.unknown, + ), ); Map _$PaymentMethodToJson(_PaymentMethod instance) => diff --git a/packages/stripe_js/lib/src/js/elements/element_creation_options.dart b/packages/stripe_js/lib/src/js/elements/element_creation_options.dart index ce1debc46..e30b2d5e8 100644 --- a/packages/stripe_js/lib/src/js/elements/element_creation_options.dart +++ b/packages/stripe_js/lib/src/js/elements/element_creation_options.dart @@ -8,6 +8,11 @@ extension type JsElementsCreateOptions._(JSObject o) { JSArray? fonts, String? locale, String? clientSecret, + int? amount, + String? mode, + String? currency, + JSArray? paymentMethodTypes, + String? paymentMethodCreation, JsElementAppearance? appearance, String? customerSessionClientSecret, String loader, @@ -17,6 +22,11 @@ extension type JsElementsCreateOptions._(JSObject o) { external String locale; external String clientSecret; external String customerSessionClientSecret; + external int amount; + external String mode; + external String currency; + external JSArray paymentMethodTypes; + external String paymentMethodCreation; external JsElementAppearance appearance; } diff --git a/packages/stripe_js/lib/src/js/elements/elements.dart b/packages/stripe_js/lib/src/js/elements/elements.dart index f88b0d5b5..28dff6a1d 100644 --- a/packages/stripe_js/lib/src/js/elements/elements.dart +++ b/packages/stripe_js/lib/src/js/elements/elements.dart @@ -5,4 +5,5 @@ export 'element_express_checkout/element_express_checkout.dart'; export 'element_payment.dart'; export 'element_payment_request_button.dart'; export 'elements_base.dart'; +export 'elements_submit.dart'; export 'styles.dart'; diff --git a/packages/stripe_js/lib/src/js/elements/elements_submit.dart b/packages/stripe_js/lib/src/js/elements/elements_submit.dart new file mode 100644 index 000000000..614b1d57b --- /dev/null +++ b/packages/stripe_js/lib/src/js/elements/elements_submit.dart @@ -0,0 +1,10 @@ +import 'dart:js_interop'; + +import 'package:stripe_js/stripe_js.dart'; + +extension ExtensionElementsSubmit on StripeElements { + Future submit() => _submit().toDart; + + @JS('submit') + external JSPromise _submit(); +} diff --git a/packages/stripe_js/lib/src/js/payment_intents/handle_next_action.dart b/packages/stripe_js/lib/src/js/payment_intents/handle_next_action.dart new file mode 100644 index 000000000..c80d2e128 --- /dev/null +++ b/packages/stripe_js/lib/src/js/payment_intents/handle_next_action.dart @@ -0,0 +1,24 @@ +import 'dart:js_interop'; + +import 'package:stripe_js/stripe_api.dart'; +import 'package:stripe_js/stripe_js.dart'; + +import '../utils/utils.dart'; + +extension ExtensionHandleNextAction on Stripe { + /// Use stripe.handleNextAction in the finalizing payments on the server flow + /// to finish confirmation of a PaymentIntent with the requires_action status. + /// It will throw an error if the PaymentIntent has a different status. + + /// Depending on the payment method and required action, the customer may be + /// temporarily redirected from your site and brought back to the return_url + /// parameter provided when the PaymentIntent is confirmed. + Future handleNextAction(String clientSecret) { + return _handleNextAction({'clientSecret': clientSecret}.jsify()) + .toDart + .then((response) => response.toDart); + } + + @JS('handleNextAction') + external JSPromise _handleNextAction(JSAny? clientSecret); +} diff --git a/packages/stripe_js/lib/src/js/payment_intents/payment_intents.dart b/packages/stripe_js/lib/src/js/payment_intents/payment_intents.dart index a27d654a6..23d5961dc 100644 --- a/packages/stripe_js/lib/src/js/payment_intents/payment_intents.dart +++ b/packages/stripe_js/lib/src/js/payment_intents/payment_intents.dart @@ -6,4 +6,5 @@ export 'confirm_p24_payment.dart'; export 'confirm_payment.dart'; export 'confirm_sepa_debit_payment.dart'; export 'handle_card_action.dart'; +export 'handle_next_action.dart'; export 'retrieve_payment_intent.dart'; diff --git a/packages/stripe_js/lib/src/js/payment_methods/create_payment_method.dart b/packages/stripe_js/lib/src/js/payment_methods/create_payment_method.dart index e2ad10bf5..ba9c78789 100644 --- a/packages/stripe_js/lib/src/js/payment_methods/create_payment_method.dart +++ b/packages/stripe_js/lib/src/js/payment_methods/create_payment_method.dart @@ -1,7 +1,9 @@ +import 'dart:js_interop'; + import 'package:stripe_js/stripe_api.dart'; import 'package:stripe_js/stripe_js.dart'; + import '../utils/utils.dart'; -import 'dart:js_interop'; extension ExtensionCreatePaymentMethod on Stripe { /// Use stripe.createPaymentMethod to convert payment information @@ -16,7 +18,9 @@ extension ExtensionCreatePaymentMethod on Stripe { Future createPaymentMethod( CreatePaymentMethodData data, ) { - final jsData = data.toJson().jsify(); + /// with multiple constructors freezed will add a `runtimeType` field to the + /// JSON which is not compatible with the Stripe API so we remove it manually + final jsData = (data.toJson()..remove('runtimeType')).jsify(); return _createPaymentMethod( jsData, ).toDart.then((response) => response.toDart); diff --git a/packages/stripe_js/test/src/js/payment_methods/create_payment_method_test.dart b/packages/stripe_js/test/src/js/payment_methods/create_payment_method_test.dart index 917919043..c72e23cef 100644 --- a/packages/stripe_js/test/src/js/payment_methods/create_payment_method_test.dart +++ b/packages/stripe_js/test/src/js/payment_methods/create_payment_method_test.dart @@ -26,7 +26,7 @@ void main() { await card.waitForReady(); expect( stripe.createPaymentMethod( - CreatePaymentMethodData(type: 'card', card: card), + CreatePaymentMethodData.card(type: 'card', card: card), ), completes, ); @@ -40,7 +40,7 @@ void main() { await card.waitForReady(); final response = await stripe.createPaymentMethod( - CreatePaymentMethodData(type: 'card', card: card), + CreatePaymentMethodData.card(type: 'card', card: card), ); expect( response.error?.toJson(), diff --git a/packages/stripe_platform_interface/lib/src/method_channel_stripe.dart b/packages/stripe_platform_interface/lib/src/method_channel_stripe.dart index 777506f3c..b4f84c7fc 100644 --- a/packages/stripe_platform_interface/lib/src/method_channel_stripe.dart +++ b/packages/stripe_platform_interface/lib/src/method_channel_stripe.dart @@ -13,6 +13,7 @@ import 'package:stripe_platform_interface/src/models/wallet.dart'; import 'package:stripe_platform_interface/src/result_parser.dart'; import 'models/app_info.dart'; +import 'models/available_mobile_pay_options.dart'; import 'models/card_details.dart'; import 'models/errors.dart'; import 'models/payment_intents.dart'; @@ -121,6 +122,15 @@ class MethodChannelStripe extends StripePlatform { ).parse(result: result!, successResultKey: 'paymentMethod'); } + @override + Future elementsSubmit() => throw UnimplementedError(); + + @override + Future handleCardAction( + final String paymentIntentClientSecret, + ) => + throw UnimplementedError(); + @override Future confirmPayment( String paymentIntentClientSecret, @@ -457,6 +467,28 @@ class MethodChannelStripe extends StripePlatform { return isSupported ?? false; } + @override + Future availableMobilePayOptions({ + IsGooglePaySupportedParams? params, + PlatformPayWebPaymentRequestCreateOptions? paymentRequestOptions, + }) async { + final bool isSupported; + if (params == null) { + isSupported = + await _methodChannel.invokeMethod('isPlatformPaySupported', { + 'params': {}, + }); + } else { + isSupported = await _methodChannel + .invokeMethod('isPlatformPaySupported', {'params': params.toJson()}); + } + + return AvailableMobilePayOptions( + googlePay: isSupported && _platformIsAndroid, + applePay: isSupported && _platformIsIos, + ); + } + @override Future isPlatformPaySupported({ IsGooglePaySupportedParams? params, diff --git a/packages/stripe_platform_interface/lib/src/models/available_mobile_pay_options.dart b/packages/stripe_platform_interface/lib/src/models/available_mobile_pay_options.dart new file mode 100644 index 000000000..48d209897 --- /dev/null +++ b/packages/stripe_platform_interface/lib/src/models/available_mobile_pay_options.dart @@ -0,0 +1,12 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'available_mobile_pay_options.freezed.dart'; + +@freezed +class AvailableMobilePayOptions with _$AvailableMobilePayOptions { + const factory AvailableMobilePayOptions({ + @Default(false) bool googlePay, + @Default(false) bool applePay, + @Default(false) bool link, + }) = _AvailableMobilePayOptions; +} diff --git a/packages/stripe_platform_interface/lib/src/models/available_mobile_pay_options.freezed.dart b/packages/stripe_platform_interface/lib/src/models/available_mobile_pay_options.freezed.dart new file mode 100644 index 000000000..7789e8d32 --- /dev/null +++ b/packages/stripe_platform_interface/lib/src/models/available_mobile_pay_options.freezed.dart @@ -0,0 +1,178 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'available_mobile_pay_options.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +/// @nodoc +mixin _$AvailableMobilePayOptions { + bool get googlePay => throw _privateConstructorUsedError; + bool get applePay => throw _privateConstructorUsedError; + bool get link => throw _privateConstructorUsedError; + + @JsonKey(ignore: true) + $AvailableMobilePayOptionsCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $AvailableMobilePayOptionsCopyWith<$Res> { + factory $AvailableMobilePayOptionsCopyWith(AvailableMobilePayOptions value, + $Res Function(AvailableMobilePayOptions) then) = + _$AvailableMobilePayOptionsCopyWithImpl<$Res, AvailableMobilePayOptions>; + @useResult + $Res call({bool googlePay, bool applePay, bool link}); +} + +/// @nodoc +class _$AvailableMobilePayOptionsCopyWithImpl<$Res, + $Val extends AvailableMobilePayOptions> + implements $AvailableMobilePayOptionsCopyWith<$Res> { + _$AvailableMobilePayOptionsCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? googlePay = null, + Object? applePay = null, + Object? link = null, + }) { + return _then(_value.copyWith( + googlePay: null == googlePay + ? _value.googlePay + : googlePay // ignore: cast_nullable_to_non_nullable + as bool, + applePay: null == applePay + ? _value.applePay + : applePay // ignore: cast_nullable_to_non_nullable + as bool, + link: null == link + ? _value.link + : link // ignore: cast_nullable_to_non_nullable + as bool, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$AvailableMobilePayOptionsImplCopyWith<$Res> + implements $AvailableMobilePayOptionsCopyWith<$Res> { + factory _$$AvailableMobilePayOptionsImplCopyWith( + _$AvailableMobilePayOptionsImpl value, + $Res Function(_$AvailableMobilePayOptionsImpl) then) = + __$$AvailableMobilePayOptionsImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({bool googlePay, bool applePay, bool link}); +} + +/// @nodoc +class __$$AvailableMobilePayOptionsImplCopyWithImpl<$Res> + extends _$AvailableMobilePayOptionsCopyWithImpl<$Res, + _$AvailableMobilePayOptionsImpl> + implements _$$AvailableMobilePayOptionsImplCopyWith<$Res> { + __$$AvailableMobilePayOptionsImplCopyWithImpl( + _$AvailableMobilePayOptionsImpl _value, + $Res Function(_$AvailableMobilePayOptionsImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? googlePay = null, + Object? applePay = null, + Object? link = null, + }) { + return _then(_$AvailableMobilePayOptionsImpl( + googlePay: null == googlePay + ? _value.googlePay + : googlePay // ignore: cast_nullable_to_non_nullable + as bool, + applePay: null == applePay + ? _value.applePay + : applePay // ignore: cast_nullable_to_non_nullable + as bool, + link: null == link + ? _value.link + : link // ignore: cast_nullable_to_non_nullable + as bool, + )); + } +} + +/// @nodoc + +class _$AvailableMobilePayOptionsImpl implements _AvailableMobilePayOptions { + const _$AvailableMobilePayOptionsImpl( + {this.googlePay = false, this.applePay = false, this.link = false}); + + @override + @JsonKey() + final bool googlePay; + @override + @JsonKey() + final bool applePay; + @override + @JsonKey() + final bool link; + + @override + String toString() { + return 'AvailableMobilePayOptions(googlePay: $googlePay, applePay: $applePay, link: $link)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$AvailableMobilePayOptionsImpl && + (identical(other.googlePay, googlePay) || + other.googlePay == googlePay) && + (identical(other.applePay, applePay) || + other.applePay == applePay) && + (identical(other.link, link) || other.link == link)); + } + + @override + int get hashCode => Object.hash(runtimeType, googlePay, applePay, link); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$AvailableMobilePayOptionsImplCopyWith<_$AvailableMobilePayOptionsImpl> + get copyWith => __$$AvailableMobilePayOptionsImplCopyWithImpl< + _$AvailableMobilePayOptionsImpl>(this, _$identity); +} + +abstract class _AvailableMobilePayOptions implements AvailableMobilePayOptions { + const factory _AvailableMobilePayOptions( + {final bool googlePay, + final bool applePay, + final bool link}) = _$AvailableMobilePayOptionsImpl; + + @override + bool get googlePay; + @override + bool get applePay; + @override + bool get link; + @override + @JsonKey(ignore: true) + _$$AvailableMobilePayOptionsImplCopyWith<_$AvailableMobilePayOptionsImpl> + get copyWith => throw _privateConstructorUsedError; +} diff --git a/packages/stripe_platform_interface/lib/src/models/payment_methods.dart b/packages/stripe_platform_interface/lib/src/models/payment_methods.dart index deb64a1f1..6f58d5824 100644 --- a/packages/stripe_platform_interface/lib/src/models/payment_methods.dart +++ b/packages/stripe_platform_interface/lib/src/models/payment_methods.dart @@ -449,6 +449,10 @@ abstract class PaymentMethodParams with _$PaymentMethodParams { required PaymentMethodDataUsBank paymentMethodData, }) = _PaymentMethodParamsUsBankAccount; + @JsonSerializable(explicitToJson: true) + @FreezedUnionValue('Elements') + const factory PaymentMethodParams.elements() = _PaymentMethodParamsElements; + // TODO uncomment and regenerate when we can re-enable wechat pay // @JsonSerializable(explicitToJson: true) // @FreezedUnionValue('WeChatPay') diff --git a/packages/stripe_platform_interface/lib/src/models/payment_methods.freezed.dart b/packages/stripe_platform_interface/lib/src/models/payment_methods.freezed.dart index 5396cdbb6..bfecdf409 100644 --- a/packages/stripe_platform_interface/lib/src/models/payment_methods.freezed.dart +++ b/packages/stripe_platform_interface/lib/src/models/payment_methods.freezed.dart @@ -3177,6 +3177,10 @@ PaymentMethodParams _$PaymentMethodParamsFromJson( return _PaymentMethodParamsUsBankAccount.fromJson( json ); + case 'Elements': + return _PaymentMethodParamsElements.fromJson( + json + ); default: throw CheckedFromJsonException( @@ -3192,8 +3196,7 @@ PaymentMethodParams _$PaymentMethodParamsFromJson( /// @nodoc mixin _$PaymentMethodParams { -/// Paymentmethod data for this paymentmethod. - Object get paymentMethodData; + /// Serializes this PaymentMethodParams to a JSON map. Map toJson(); @@ -3201,16 +3204,16 @@ mixin _$PaymentMethodParams { @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is PaymentMethodParams&&const DeepCollectionEquality().equals(other.paymentMethodData, paymentMethodData)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is PaymentMethodParams); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(paymentMethodData)); +int get hashCode => runtimeType.hashCode; @override String toString() { - return 'PaymentMethodParams(paymentMethodData: $paymentMethodData)'; + return 'PaymentMethodParams()'; } @@ -3236,7 +3239,7 @@ extension PaymentMethodParamsPatterns on PaymentMethodParams { /// } /// ``` -@optionalTypeArgs TResult maybeMap({TResult Function( _PaymentMethodParamsCard value)? card,TResult Function( _PaymentMethodParamsCardWithToken value)? cardFromToken,TResult Function( _PaymentMethodParamsCardWithMethodId value)? cardFromMethodId,TResult Function( _PaymentMethodParamsAlipay value)? alipay,TResult Function( _PaymentMethodParamsCashAppPay value)? cashAppPay,TResult Function( _PaymentMethodParamsIdeal value)? ideal,TResult Function( _PaymentMethodParamsAubecs value)? aubecs,TResult Function( _PaymentMethodParamsBankContact value)? bancontact,TResult Function( _PaymentMethodParamsGiroPay value)? giroPay,TResult Function( _PaymentMethodParamsEps value)? eps,TResult Function( _PaymentMethodParamsAffirm value)? affirm,TResult Function( _PaymentMethodParamsPay value)? grabPay,TResult Function( _PaymentMethodParamsP24 value)? p24,TResult Function( _PaymentMethodParamsFpx value)? fpx,TResult Function( _PaymentMethodParamsSepaDebit value)? sepaDebit,TResult Function( _PaymentMethodParamsAfterpayClearpay value)? afterpayClearpay,TResult Function( _PaymentMethodParamsOxxo value)? oxxo,TResult Function( _PaymentMethodParamsKlarna value)? klarna,TResult Function( _PaymentMethodParamsPayPal value)? payPal,TResult Function( _PaymentMethodParamsRevolutPay value)? revolutPay,TResult Function( _PaymentMethodParamsUsBankAccount value)? usBankAccount,required TResult orElse(),}){ +@optionalTypeArgs TResult maybeMap({TResult Function( _PaymentMethodParamsCard value)? card,TResult Function( _PaymentMethodParamsCardWithToken value)? cardFromToken,TResult Function( _PaymentMethodParamsCardWithMethodId value)? cardFromMethodId,TResult Function( _PaymentMethodParamsAlipay value)? alipay,TResult Function( _PaymentMethodParamsCashAppPay value)? cashAppPay,TResult Function( _PaymentMethodParamsIdeal value)? ideal,TResult Function( _PaymentMethodParamsAubecs value)? aubecs,TResult Function( _PaymentMethodParamsBankContact value)? bancontact,TResult Function( _PaymentMethodParamsGiroPay value)? giroPay,TResult Function( _PaymentMethodParamsEps value)? eps,TResult Function( _PaymentMethodParamsAffirm value)? affirm,TResult Function( _PaymentMethodParamsPay value)? grabPay,TResult Function( _PaymentMethodParamsP24 value)? p24,TResult Function( _PaymentMethodParamsFpx value)? fpx,TResult Function( _PaymentMethodParamsSepaDebit value)? sepaDebit,TResult Function( _PaymentMethodParamsAfterpayClearpay value)? afterpayClearpay,TResult Function( _PaymentMethodParamsOxxo value)? oxxo,TResult Function( _PaymentMethodParamsKlarna value)? klarna,TResult Function( _PaymentMethodParamsPayPal value)? payPal,TResult Function( _PaymentMethodParamsRevolutPay value)? revolutPay,TResult Function( _PaymentMethodParamsUsBankAccount value)? usBankAccount,TResult Function( _PaymentMethodParamsElements value)? elements,required TResult orElse(),}){ final _that = this; switch (_that) { case _PaymentMethodParamsCard() when card != null: @@ -3260,7 +3263,8 @@ return oxxo(_that);case _PaymentMethodParamsKlarna() when klarna != null: return klarna(_that);case _PaymentMethodParamsPayPal() when payPal != null: return payPal(_that);case _PaymentMethodParamsRevolutPay() when revolutPay != null: return revolutPay(_that);case _PaymentMethodParamsUsBankAccount() when usBankAccount != null: -return usBankAccount(_that);case _: +return usBankAccount(_that);case _PaymentMethodParamsElements() when elements != null: +return elements(_that);case _: return orElse(); } @@ -3278,7 +3282,7 @@ return usBankAccount(_that);case _: /// } /// ``` -@optionalTypeArgs TResult map({required TResult Function( _PaymentMethodParamsCard value) card,required TResult Function( _PaymentMethodParamsCardWithToken value) cardFromToken,required TResult Function( _PaymentMethodParamsCardWithMethodId value) cardFromMethodId,required TResult Function( _PaymentMethodParamsAlipay value) alipay,required TResult Function( _PaymentMethodParamsCashAppPay value) cashAppPay,required TResult Function( _PaymentMethodParamsIdeal value) ideal,required TResult Function( _PaymentMethodParamsAubecs value) aubecs,required TResult Function( _PaymentMethodParamsBankContact value) bancontact,required TResult Function( _PaymentMethodParamsGiroPay value) giroPay,required TResult Function( _PaymentMethodParamsEps value) eps,required TResult Function( _PaymentMethodParamsAffirm value) affirm,required TResult Function( _PaymentMethodParamsPay value) grabPay,required TResult Function( _PaymentMethodParamsP24 value) p24,required TResult Function( _PaymentMethodParamsFpx value) fpx,required TResult Function( _PaymentMethodParamsSepaDebit value) sepaDebit,required TResult Function( _PaymentMethodParamsAfterpayClearpay value) afterpayClearpay,required TResult Function( _PaymentMethodParamsOxxo value) oxxo,required TResult Function( _PaymentMethodParamsKlarna value) klarna,required TResult Function( _PaymentMethodParamsPayPal value) payPal,required TResult Function( _PaymentMethodParamsRevolutPay value) revolutPay,required TResult Function( _PaymentMethodParamsUsBankAccount value) usBankAccount,}){ +@optionalTypeArgs TResult map({required TResult Function( _PaymentMethodParamsCard value) card,required TResult Function( _PaymentMethodParamsCardWithToken value) cardFromToken,required TResult Function( _PaymentMethodParamsCardWithMethodId value) cardFromMethodId,required TResult Function( _PaymentMethodParamsAlipay value) alipay,required TResult Function( _PaymentMethodParamsCashAppPay value) cashAppPay,required TResult Function( _PaymentMethodParamsIdeal value) ideal,required TResult Function( _PaymentMethodParamsAubecs value) aubecs,required TResult Function( _PaymentMethodParamsBankContact value) bancontact,required TResult Function( _PaymentMethodParamsGiroPay value) giroPay,required TResult Function( _PaymentMethodParamsEps value) eps,required TResult Function( _PaymentMethodParamsAffirm value) affirm,required TResult Function( _PaymentMethodParamsPay value) grabPay,required TResult Function( _PaymentMethodParamsP24 value) p24,required TResult Function( _PaymentMethodParamsFpx value) fpx,required TResult Function( _PaymentMethodParamsSepaDebit value) sepaDebit,required TResult Function( _PaymentMethodParamsAfterpayClearpay value) afterpayClearpay,required TResult Function( _PaymentMethodParamsOxxo value) oxxo,required TResult Function( _PaymentMethodParamsKlarna value) klarna,required TResult Function( _PaymentMethodParamsPayPal value) payPal,required TResult Function( _PaymentMethodParamsRevolutPay value) revolutPay,required TResult Function( _PaymentMethodParamsUsBankAccount value) usBankAccount,required TResult Function( _PaymentMethodParamsElements value) elements,}){ final _that = this; switch (_that) { case _PaymentMethodParamsCard(): @@ -3302,7 +3306,8 @@ return oxxo(_that);case _PaymentMethodParamsKlarna(): return klarna(_that);case _PaymentMethodParamsPayPal(): return payPal(_that);case _PaymentMethodParamsRevolutPay(): return revolutPay(_that);case _PaymentMethodParamsUsBankAccount(): -return usBankAccount(_that);case _: +return usBankAccount(_that);case _PaymentMethodParamsElements(): +return elements(_that);case _: throw StateError('Unexpected subclass'); } @@ -3319,7 +3324,7 @@ return usBankAccount(_that);case _: /// } /// ``` -@optionalTypeArgs TResult? mapOrNull({TResult? Function( _PaymentMethodParamsCard value)? card,TResult? Function( _PaymentMethodParamsCardWithToken value)? cardFromToken,TResult? Function( _PaymentMethodParamsCardWithMethodId value)? cardFromMethodId,TResult? Function( _PaymentMethodParamsAlipay value)? alipay,TResult? Function( _PaymentMethodParamsCashAppPay value)? cashAppPay,TResult? Function( _PaymentMethodParamsIdeal value)? ideal,TResult? Function( _PaymentMethodParamsAubecs value)? aubecs,TResult? Function( _PaymentMethodParamsBankContact value)? bancontact,TResult? Function( _PaymentMethodParamsGiroPay value)? giroPay,TResult? Function( _PaymentMethodParamsEps value)? eps,TResult? Function( _PaymentMethodParamsAffirm value)? affirm,TResult? Function( _PaymentMethodParamsPay value)? grabPay,TResult? Function( _PaymentMethodParamsP24 value)? p24,TResult? Function( _PaymentMethodParamsFpx value)? fpx,TResult? Function( _PaymentMethodParamsSepaDebit value)? sepaDebit,TResult? Function( _PaymentMethodParamsAfterpayClearpay value)? afterpayClearpay,TResult? Function( _PaymentMethodParamsOxxo value)? oxxo,TResult? Function( _PaymentMethodParamsKlarna value)? klarna,TResult? Function( _PaymentMethodParamsPayPal value)? payPal,TResult? Function( _PaymentMethodParamsRevolutPay value)? revolutPay,TResult? Function( _PaymentMethodParamsUsBankAccount value)? usBankAccount,}){ +@optionalTypeArgs TResult? mapOrNull({TResult? Function( _PaymentMethodParamsCard value)? card,TResult? Function( _PaymentMethodParamsCardWithToken value)? cardFromToken,TResult? Function( _PaymentMethodParamsCardWithMethodId value)? cardFromMethodId,TResult? Function( _PaymentMethodParamsAlipay value)? alipay,TResult? Function( _PaymentMethodParamsCashAppPay value)? cashAppPay,TResult? Function( _PaymentMethodParamsIdeal value)? ideal,TResult? Function( _PaymentMethodParamsAubecs value)? aubecs,TResult? Function( _PaymentMethodParamsBankContact value)? bancontact,TResult? Function( _PaymentMethodParamsGiroPay value)? giroPay,TResult? Function( _PaymentMethodParamsEps value)? eps,TResult? Function( _PaymentMethodParamsAffirm value)? affirm,TResult? Function( _PaymentMethodParamsPay value)? grabPay,TResult? Function( _PaymentMethodParamsP24 value)? p24,TResult? Function( _PaymentMethodParamsFpx value)? fpx,TResult? Function( _PaymentMethodParamsSepaDebit value)? sepaDebit,TResult? Function( _PaymentMethodParamsAfterpayClearpay value)? afterpayClearpay,TResult? Function( _PaymentMethodParamsOxxo value)? oxxo,TResult? Function( _PaymentMethodParamsKlarna value)? klarna,TResult? Function( _PaymentMethodParamsPayPal value)? payPal,TResult? Function( _PaymentMethodParamsRevolutPay value)? revolutPay,TResult? Function( _PaymentMethodParamsUsBankAccount value)? usBankAccount,TResult? Function( _PaymentMethodParamsElements value)? elements,}){ final _that = this; switch (_that) { case _PaymentMethodParamsCard() when card != null: @@ -3343,7 +3348,8 @@ return oxxo(_that);case _PaymentMethodParamsKlarna() when klarna != null: return klarna(_that);case _PaymentMethodParamsPayPal() when payPal != null: return payPal(_that);case _PaymentMethodParamsRevolutPay() when revolutPay != null: return revolutPay(_that);case _PaymentMethodParamsUsBankAccount() when usBankAccount != null: -return usBankAccount(_that);case _: +return usBankAccount(_that);case _PaymentMethodParamsElements() when elements != null: +return elements(_that);case _: return null; } @@ -3360,7 +3366,7 @@ return usBankAccount(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen({TResult Function( PaymentMethodData paymentMethodData)? card,TResult Function( PaymentMethodDataCardFromToken paymentMethodData)? cardFromToken,TResult Function( PaymentMethodDataCardFromMethod paymentMethodData)? cardFromMethodId,TResult Function( PaymentMethodData paymentMethodData)? alipay,TResult Function( PaymentMethodData paymentMethodData)? cashAppPay,TResult Function( PaymentMethodDataIdeal paymentMethodData)? ideal,TResult Function( PaymentMethodDataAubecs paymentMethodData)? aubecs,TResult Function( PaymentMethodData paymentMethodData)? bancontact,TResult Function( PaymentMethodData paymentMethodData)? giroPay,TResult Function( PaymentMethodData paymentMethodData)? eps,TResult Function( PaymentMethodData paymentMethodData)? affirm,TResult Function( PaymentMethodData paymentMethodData)? grabPay,TResult Function( PaymentMethodData paymentMethodData)? p24,TResult Function( PaymentMethodDataFpx paymentMethodData)? fpx,TResult Function( PaymentMethodDataSepa paymentMethodData)? sepaDebit,TResult Function( PaymentMethodDataAfterPay paymentMethodData)? afterpayClearpay,TResult Function( PaymentMethodData paymentMethodData)? oxxo,TResult Function( PaymentMethodData paymentMethodData)? klarna,TResult Function( PaymentMethodData paymentMethodData)? payPal,TResult Function( PaymentMethodData paymentMethodData)? revolutPay,TResult Function( PaymentMethodDataUsBank paymentMethodData)? usBankAccount,required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen({TResult Function( PaymentMethodData paymentMethodData)? card,TResult Function( PaymentMethodDataCardFromToken paymentMethodData)? cardFromToken,TResult Function( PaymentMethodDataCardFromMethod paymentMethodData)? cardFromMethodId,TResult Function( PaymentMethodData paymentMethodData)? alipay,TResult Function( PaymentMethodData paymentMethodData)? cashAppPay,TResult Function( PaymentMethodDataIdeal paymentMethodData)? ideal,TResult Function( PaymentMethodDataAubecs paymentMethodData)? aubecs,TResult Function( PaymentMethodData paymentMethodData)? bancontact,TResult Function( PaymentMethodData paymentMethodData)? giroPay,TResult Function( PaymentMethodData paymentMethodData)? eps,TResult Function( PaymentMethodData paymentMethodData)? affirm,TResult Function( PaymentMethodData paymentMethodData)? grabPay,TResult Function( PaymentMethodData paymentMethodData)? p24,TResult Function( PaymentMethodDataFpx paymentMethodData)? fpx,TResult Function( PaymentMethodDataSepa paymentMethodData)? sepaDebit,TResult Function( PaymentMethodDataAfterPay paymentMethodData)? afterpayClearpay,TResult Function( PaymentMethodData paymentMethodData)? oxxo,TResult Function( PaymentMethodData paymentMethodData)? klarna,TResult Function( PaymentMethodData paymentMethodData)? payPal,TResult Function( PaymentMethodData paymentMethodData)? revolutPay,TResult Function( PaymentMethodDataUsBank paymentMethodData)? usBankAccount,TResult Function()? elements,required TResult orElse(),}) {final _that = this; switch (_that) { case _PaymentMethodParamsCard() when card != null: return card(_that.paymentMethodData);case _PaymentMethodParamsCardWithToken() when cardFromToken != null: @@ -3383,7 +3389,8 @@ return oxxo(_that.paymentMethodData);case _PaymentMethodParamsKlarna() when klar return klarna(_that.paymentMethodData);case _PaymentMethodParamsPayPal() when payPal != null: return payPal(_that.paymentMethodData);case _PaymentMethodParamsRevolutPay() when revolutPay != null: return revolutPay(_that.paymentMethodData);case _PaymentMethodParamsUsBankAccount() when usBankAccount != null: -return usBankAccount(_that.paymentMethodData);case _: +return usBankAccount(_that.paymentMethodData);case _PaymentMethodParamsElements() when elements != null: +return elements();case _: return orElse(); } @@ -3401,7 +3408,7 @@ return usBankAccount(_that.paymentMethodData);case _: /// } /// ``` -@optionalTypeArgs TResult when({required TResult Function( PaymentMethodData paymentMethodData) card,required TResult Function( PaymentMethodDataCardFromToken paymentMethodData) cardFromToken,required TResult Function( PaymentMethodDataCardFromMethod paymentMethodData) cardFromMethodId,required TResult Function( PaymentMethodData paymentMethodData) alipay,required TResult Function( PaymentMethodData paymentMethodData) cashAppPay,required TResult Function( PaymentMethodDataIdeal paymentMethodData) ideal,required TResult Function( PaymentMethodDataAubecs paymentMethodData) aubecs,required TResult Function( PaymentMethodData paymentMethodData) bancontact,required TResult Function( PaymentMethodData paymentMethodData) giroPay,required TResult Function( PaymentMethodData paymentMethodData) eps,required TResult Function( PaymentMethodData paymentMethodData) affirm,required TResult Function( PaymentMethodData paymentMethodData) grabPay,required TResult Function( PaymentMethodData paymentMethodData) p24,required TResult Function( PaymentMethodDataFpx paymentMethodData) fpx,required TResult Function( PaymentMethodDataSepa paymentMethodData) sepaDebit,required TResult Function( PaymentMethodDataAfterPay paymentMethodData) afterpayClearpay,required TResult Function( PaymentMethodData paymentMethodData) oxxo,required TResult Function( PaymentMethodData paymentMethodData) klarna,required TResult Function( PaymentMethodData paymentMethodData) payPal,required TResult Function( PaymentMethodData paymentMethodData) revolutPay,required TResult Function( PaymentMethodDataUsBank paymentMethodData) usBankAccount,}) {final _that = this; +@optionalTypeArgs TResult when({required TResult Function( PaymentMethodData paymentMethodData) card,required TResult Function( PaymentMethodDataCardFromToken paymentMethodData) cardFromToken,required TResult Function( PaymentMethodDataCardFromMethod paymentMethodData) cardFromMethodId,required TResult Function( PaymentMethodData paymentMethodData) alipay,required TResult Function( PaymentMethodData paymentMethodData) cashAppPay,required TResult Function( PaymentMethodDataIdeal paymentMethodData) ideal,required TResult Function( PaymentMethodDataAubecs paymentMethodData) aubecs,required TResult Function( PaymentMethodData paymentMethodData) bancontact,required TResult Function( PaymentMethodData paymentMethodData) giroPay,required TResult Function( PaymentMethodData paymentMethodData) eps,required TResult Function( PaymentMethodData paymentMethodData) affirm,required TResult Function( PaymentMethodData paymentMethodData) grabPay,required TResult Function( PaymentMethodData paymentMethodData) p24,required TResult Function( PaymentMethodDataFpx paymentMethodData) fpx,required TResult Function( PaymentMethodDataSepa paymentMethodData) sepaDebit,required TResult Function( PaymentMethodDataAfterPay paymentMethodData) afterpayClearpay,required TResult Function( PaymentMethodData paymentMethodData) oxxo,required TResult Function( PaymentMethodData paymentMethodData) klarna,required TResult Function( PaymentMethodData paymentMethodData) payPal,required TResult Function( PaymentMethodData paymentMethodData) revolutPay,required TResult Function( PaymentMethodDataUsBank paymentMethodData) usBankAccount,required TResult Function() elements,}) {final _that = this; switch (_that) { case _PaymentMethodParamsCard(): return card(_that.paymentMethodData);case _PaymentMethodParamsCardWithToken(): @@ -3424,7 +3431,8 @@ return oxxo(_that.paymentMethodData);case _PaymentMethodParamsKlarna(): return klarna(_that.paymentMethodData);case _PaymentMethodParamsPayPal(): return payPal(_that.paymentMethodData);case _PaymentMethodParamsRevolutPay(): return revolutPay(_that.paymentMethodData);case _PaymentMethodParamsUsBankAccount(): -return usBankAccount(_that.paymentMethodData);case _: +return usBankAccount(_that.paymentMethodData);case _PaymentMethodParamsElements(): +return elements();case _: throw StateError('Unexpected subclass'); } @@ -3441,7 +3449,7 @@ return usBankAccount(_that.paymentMethodData);case _: /// } /// ``` -@optionalTypeArgs TResult? whenOrNull({TResult? Function( PaymentMethodData paymentMethodData)? card,TResult? Function( PaymentMethodDataCardFromToken paymentMethodData)? cardFromToken,TResult? Function( PaymentMethodDataCardFromMethod paymentMethodData)? cardFromMethodId,TResult? Function( PaymentMethodData paymentMethodData)? alipay,TResult? Function( PaymentMethodData paymentMethodData)? cashAppPay,TResult? Function( PaymentMethodDataIdeal paymentMethodData)? ideal,TResult? Function( PaymentMethodDataAubecs paymentMethodData)? aubecs,TResult? Function( PaymentMethodData paymentMethodData)? bancontact,TResult? Function( PaymentMethodData paymentMethodData)? giroPay,TResult? Function( PaymentMethodData paymentMethodData)? eps,TResult? Function( PaymentMethodData paymentMethodData)? affirm,TResult? Function( PaymentMethodData paymentMethodData)? grabPay,TResult? Function( PaymentMethodData paymentMethodData)? p24,TResult? Function( PaymentMethodDataFpx paymentMethodData)? fpx,TResult? Function( PaymentMethodDataSepa paymentMethodData)? sepaDebit,TResult? Function( PaymentMethodDataAfterPay paymentMethodData)? afterpayClearpay,TResult? Function( PaymentMethodData paymentMethodData)? oxxo,TResult? Function( PaymentMethodData paymentMethodData)? klarna,TResult? Function( PaymentMethodData paymentMethodData)? payPal,TResult? Function( PaymentMethodData paymentMethodData)? revolutPay,TResult? Function( PaymentMethodDataUsBank paymentMethodData)? usBankAccount,}) {final _that = this; +@optionalTypeArgs TResult? whenOrNull({TResult? Function( PaymentMethodData paymentMethodData)? card,TResult? Function( PaymentMethodDataCardFromToken paymentMethodData)? cardFromToken,TResult? Function( PaymentMethodDataCardFromMethod paymentMethodData)? cardFromMethodId,TResult? Function( PaymentMethodData paymentMethodData)? alipay,TResult? Function( PaymentMethodData paymentMethodData)? cashAppPay,TResult? Function( PaymentMethodDataIdeal paymentMethodData)? ideal,TResult? Function( PaymentMethodDataAubecs paymentMethodData)? aubecs,TResult? Function( PaymentMethodData paymentMethodData)? bancontact,TResult? Function( PaymentMethodData paymentMethodData)? giroPay,TResult? Function( PaymentMethodData paymentMethodData)? eps,TResult? Function( PaymentMethodData paymentMethodData)? affirm,TResult? Function( PaymentMethodData paymentMethodData)? grabPay,TResult? Function( PaymentMethodData paymentMethodData)? p24,TResult? Function( PaymentMethodDataFpx paymentMethodData)? fpx,TResult? Function( PaymentMethodDataSepa paymentMethodData)? sepaDebit,TResult? Function( PaymentMethodDataAfterPay paymentMethodData)? afterpayClearpay,TResult? Function( PaymentMethodData paymentMethodData)? oxxo,TResult? Function( PaymentMethodData paymentMethodData)? klarna,TResult? Function( PaymentMethodData paymentMethodData)? payPal,TResult? Function( PaymentMethodData paymentMethodData)? revolutPay,TResult? Function( PaymentMethodDataUsBank paymentMethodData)? usBankAccount,TResult? Function()? elements,}) {final _that = this; switch (_that) { case _PaymentMethodParamsCard() when card != null: return card(_that.paymentMethodData);case _PaymentMethodParamsCardWithToken() when cardFromToken != null: @@ -3464,7 +3472,8 @@ return oxxo(_that.paymentMethodData);case _PaymentMethodParamsKlarna() when klar return klarna(_that.paymentMethodData);case _PaymentMethodParamsPayPal() when payPal != null: return payPal(_that.paymentMethodData);case _PaymentMethodParamsRevolutPay() when revolutPay != null: return revolutPay(_that.paymentMethodData);case _PaymentMethodParamsUsBankAccount() when usBankAccount != null: -return usBankAccount(_that.paymentMethodData);case _: +return usBankAccount(_that.paymentMethodData);case _PaymentMethodParamsElements() when elements != null: +return elements();case _: return null; } @@ -3480,7 +3489,7 @@ class _PaymentMethodParamsCard implements PaymentMethodParams { factory _PaymentMethodParamsCard.fromJson(Map json) => _$PaymentMethodParamsCardFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -3563,7 +3572,7 @@ class _PaymentMethodParamsCardWithToken implements PaymentMethodParams { factory _PaymentMethodParamsCardWithToken.fromJson(Map json) => _$PaymentMethodParamsCardWithTokenFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodDataCardFromToken paymentMethodData; + final PaymentMethodDataCardFromToken paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -3646,7 +3655,7 @@ class _PaymentMethodParamsCardWithMethodId implements PaymentMethodParams { factory _PaymentMethodParamsCardWithMethodId.fromJson(Map json) => _$PaymentMethodParamsCardWithMethodIdFromJson(json); /// Payment method data object for card from payment method. -@override final PaymentMethodDataCardFromMethod paymentMethodData; + final PaymentMethodDataCardFromMethod paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -3729,7 +3738,7 @@ class _PaymentMethodParamsAlipay implements PaymentMethodParams { factory _PaymentMethodParamsAlipay.fromJson(Map json) => _$PaymentMethodParamsAlipayFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -3812,7 +3821,7 @@ class _PaymentMethodParamsCashAppPay implements PaymentMethodParams { factory _PaymentMethodParamsCashAppPay.fromJson(Map json) => _$PaymentMethodParamsCashAppPayFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -3895,7 +3904,7 @@ class _PaymentMethodParamsIdeal implements PaymentMethodParams { factory _PaymentMethodParamsIdeal.fromJson(Map json) => _$PaymentMethodParamsIdealFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodDataIdeal paymentMethodData; + final PaymentMethodDataIdeal paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -3978,7 +3987,7 @@ class _PaymentMethodParamsAubecs implements PaymentMethodParams { factory _PaymentMethodParamsAubecs.fromJson(Map json) => _$PaymentMethodParamsAubecsFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodDataAubecs paymentMethodData; + final PaymentMethodDataAubecs paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4061,7 +4070,7 @@ class _PaymentMethodParamsBankContact implements PaymentMethodParams { factory _PaymentMethodParamsBankContact.fromJson(Map json) => _$PaymentMethodParamsBankContactFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4144,7 +4153,7 @@ class _PaymentMethodParamsGiroPay implements PaymentMethodParams { factory _PaymentMethodParamsGiroPay.fromJson(Map json) => _$PaymentMethodParamsGiroPayFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4227,7 +4236,7 @@ class _PaymentMethodParamsEps implements PaymentMethodParams { factory _PaymentMethodParamsEps.fromJson(Map json) => _$PaymentMethodParamsEpsFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4310,7 +4319,7 @@ class _PaymentMethodParamsAffirm implements PaymentMethodParams { factory _PaymentMethodParamsAffirm.fromJson(Map json) => _$PaymentMethodParamsAffirmFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4393,7 +4402,7 @@ class _PaymentMethodParamsPay implements PaymentMethodParams { factory _PaymentMethodParamsPay.fromJson(Map json) => _$PaymentMethodParamsPayFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4476,7 +4485,7 @@ class _PaymentMethodParamsP24 implements PaymentMethodParams { factory _PaymentMethodParamsP24.fromJson(Map json) => _$PaymentMethodParamsP24FromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4559,7 +4568,7 @@ class _PaymentMethodParamsFpx implements PaymentMethodParams { factory _PaymentMethodParamsFpx.fromJson(Map json) => _$PaymentMethodParamsFpxFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodDataFpx paymentMethodData; + final PaymentMethodDataFpx paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4642,7 +4651,7 @@ class _PaymentMethodParamsSepaDebit implements PaymentMethodParams { factory _PaymentMethodParamsSepaDebit.fromJson(Map json) => _$PaymentMethodParamsSepaDebitFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodDataSepa paymentMethodData; + final PaymentMethodDataSepa paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4724,7 +4733,7 @@ class _PaymentMethodParamsAfterpayClearpay implements PaymentMethodParams { const _PaymentMethodParamsAfterpayClearpay({required this.paymentMethodData, final String? $type}): $type = $type ?? 'AfterpayClearpay'; factory _PaymentMethodParamsAfterpayClearpay.fromJson(Map json) => _$PaymentMethodParamsAfterpayClearpayFromJson(json); -@override final PaymentMethodDataAfterPay paymentMethodData; + final PaymentMethodDataAfterPay paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4807,7 +4816,7 @@ class _PaymentMethodParamsOxxo implements PaymentMethodParams { factory _PaymentMethodParamsOxxo.fromJson(Map json) => _$PaymentMethodParamsOxxoFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4893,7 +4902,7 @@ class _PaymentMethodParamsKlarna implements PaymentMethodParams { /// /// Make sure to add an email and country (part of the address) in the /// billingdetails which is required for using Klarna. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -4976,7 +4985,7 @@ class _PaymentMethodParamsPayPal implements PaymentMethodParams { factory _PaymentMethodParamsPayPal.fromJson(Map json) => _$PaymentMethodParamsPayPalFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -5059,7 +5068,7 @@ class _PaymentMethodParamsRevolutPay implements PaymentMethodParams { factory _PaymentMethodParamsRevolutPay.fromJson(Map json) => _$PaymentMethodParamsRevolutPayFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodData paymentMethodData; + final PaymentMethodData paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -5142,7 +5151,7 @@ class _PaymentMethodParamsUsBankAccount implements PaymentMethodParams { factory _PaymentMethodParamsUsBankAccount.fromJson(Map json) => _$PaymentMethodParamsUsBankAccountFromJson(json); /// Paymentmethod data for this paymentmethod. -@override final PaymentMethodDataUsBank paymentMethodData; + final PaymentMethodDataUsBank paymentMethodData; @JsonKey(name: 'paymentMethodType') final String $type; @@ -5217,6 +5226,45 @@ $PaymentMethodDataUsBankCopyWith<$Res> get paymentMethodData { } } +/// @nodoc + +@JsonSerializable(explicitToJson: true) +class _PaymentMethodParamsElements implements PaymentMethodParams { + const _PaymentMethodParamsElements({final String? $type}): $type = $type ?? 'Elements'; + factory _PaymentMethodParamsElements.fromJson(Map json) => _$PaymentMethodParamsElementsFromJson(json); + + + +@JsonKey(name: 'paymentMethodType') +final String $type; + + + +@override +Map toJson() { + return _$PaymentMethodParamsElementsToJson(this, ); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _PaymentMethodParamsElements); +} + +@JsonKey(includeFromJson: false, includeToJson: false) +@override +int get hashCode => runtimeType.hashCode; + +@override +String toString() { + return 'PaymentMethodParams.elements()'; +} + + +} + + + + /// @nodoc mixin _$PaymentMethodData { diff --git a/packages/stripe_platform_interface/lib/src/models/payment_methods.g.dart b/packages/stripe_platform_interface/lib/src/models/payment_methods.g.dart index cc33d1b64..52bce68d2 100644 --- a/packages/stripe_platform_interface/lib/src/models/payment_methods.g.dart +++ b/packages/stripe_platform_interface/lib/src/models/payment_methods.g.dart @@ -545,6 +545,14 @@ Map _$PaymentMethodParamsUsBankAccountToJson( 'paymentMethodType': instance.$type, }; +_PaymentMethodParamsElements _$PaymentMethodParamsElementsFromJson( + Map json, +) => _PaymentMethodParamsElements($type: json['paymentMethodType'] as String?); + +Map _$PaymentMethodParamsElementsToJson( + _PaymentMethodParamsElements instance, +) => {'paymentMethodType': instance.$type}; + _PaymentMethodData _$PaymentMethodDataFromJson(Map json) => _PaymentMethodData( billingDetails: json['billingDetails'] == null diff --git a/packages/stripe_platform_interface/lib/src/stripe_platform_interface.dart b/packages/stripe_platform_interface/lib/src/stripe_platform_interface.dart index 0853e6ef7..1c57119c4 100644 --- a/packages/stripe_platform_interface/lib/src/stripe_platform_interface.dart +++ b/packages/stripe_platform_interface/lib/src/stripe_platform_interface.dart @@ -44,6 +44,10 @@ abstract class StripePlatform extends PlatformInterface { String? returnURL, }); + Future handleCardAction( + String paymentIntentClientSecret, + ); + Future handleNextActionForSetupIntent( String setupIntentClientSecret, { String? returnURL, @@ -109,6 +113,11 @@ abstract class StripePlatform extends PlatformInterface { Future isCardInWallet(String cardLastFour); + Future availableMobilePayOptions({ + IsGooglePaySupportedParams? params, + PlatformPayWebPaymentRequestCreateOptions? paymentRequestOptions, + }); + /// Check if either google pay or apple pay is supported on device. Future isPlatformPaySupported({ IsGooglePaySupportedParams? params, @@ -179,6 +188,8 @@ abstract class StripePlatform extends PlatformInterface { const CollectFinancialConnectionsAccountsParams(), }); + Future elementsSubmit(); + /// Updates the internal card details. This method will not validate the card /// information so you should validate the information yourself. /// WARNING!!! Only do this if you're certain that you fulfill the necessary diff --git a/packages/stripe_platform_interface/lib/stripe_platform_interface.dart b/packages/stripe_platform_interface/lib/stripe_platform_interface.dart index 00fde05a8..f652cf2ba 100644 --- a/packages/stripe_platform_interface/lib/stripe_platform_interface.dart +++ b/packages/stripe_platform_interface/lib/stripe_platform_interface.dart @@ -7,6 +7,7 @@ export 'src/models/address.dart'; export 'src/models/app_info.dart'; export 'src/models/apple_pay.dart'; export 'src/models/aubecs_form.dart'; +export 'src/models/available_mobile_pay_options.dart'; export 'src/models/capture_method.dart'; export 'src/models/card_brand.dart'; export 'src/models/card_details.dart'; diff --git a/packages/stripe_web/lib/src/web_stripe.dart b/packages/stripe_web/lib/src/web_stripe.dart index f276f5a8b..87bba10d8 100644 --- a/packages/stripe_web/lib/src/web_stripe.dart +++ b/packages/stripe_web/lib/src/web_stripe.dart @@ -87,6 +87,9 @@ class WebStripe extends StripePlatform { card: (data) { return _createCardPaymentMethod(data); }, + elements: () { + return _createPaymentMethodWithElements(); + }, orElse: () { throw UnimplementedError(); }, @@ -94,7 +97,7 @@ class WebStripe extends StripePlatform { } Future _createCardPaymentMethod(PaymentMethodData data) async { - final params = stripe_js.CreatePaymentMethodData( + final params = stripe_js.CreatePaymentMethodData.card( type: 'card', card: element!, billingDetails: data.billingDetails?.toJs(), @@ -111,6 +114,22 @@ class WebStripe extends StripePlatform { } } + Future _createPaymentMethodWithElements() async { + final params = stripe_js.CreatePaymentMethodData.elements( + elements: elements!, + ); + try { + final response = await js.createPaymentMethod(params); + if (response.error != null) { + throw response.error!; + } + return response.paymentMethod!.parse(); + } catch (e) { + dev.log('Error $e'); + rethrow; + } + } + @override Future confirmPayment( String paymentIntentClientSecret, @@ -279,8 +298,19 @@ class WebStripe extends StripePlatform { @override Future handleNextAction(String paymentIntentClientSecret, {String? returnURL}) async { + final stripe_js.PaymentIntentResponse response = + await _stripe.handleNextAction(paymentIntentClientSecret); + + return response.paymentIntent!.parse(); + } + + @override + Future handleCardAction( + String paymentIntentClientSecret, + ) async { final stripe_js.PaymentIntentResponse response = await _stripe.handleCardAction(paymentIntentClientSecret); + return response.paymentIntent!.parse(); } @@ -359,8 +389,11 @@ class WebStripe extends StripePlatform { } @override - Future retrievePaymentIntent(String clientSecret) async { - throw UnimplementedError(); + Future retrievePaymentIntent(final String clientSecret) async { + final stripe_js.PaymentIntentResponse response = + await _stripe.retrievePaymentIntent(clientSecret); + + return response.paymentIntent!.parse(); } @override @@ -403,11 +436,13 @@ class WebStripe extends StripePlatform { } Future confirmPaymentElement( - ConfirmPaymentElementOptions options, - ) async { + ConfirmPaymentElementOptions options, [ + String? clientSecret, + ]) async { final response = await js.confirmPayment( stripe_js.ConfirmPaymentOptions( elements: elements!, + clientSecret: clientSecret, confirmParams: options.confirmParams, redirect: options.redirect, ), @@ -419,6 +454,8 @@ class WebStripe extends StripePlatform { } } + Future elementsSubmit() => elements!.submit(); + Future confirmSetupElement( ConfirmSetupElementOptions options, ) async { @@ -536,6 +573,24 @@ class WebStripe extends StripePlatform { throw WebUnsupportedError.method('resetPaymentSheet'); } + @override + Future availableMobilePayOptions({ + IsGooglePaySupportedParams? params, + PlatformPayWebPaymentRequestCreateOptions? paymentRequestOptions, + }) async { + final paymentRequest = js.paymentRequest((paymentRequestOptions ?? + PlatformPayWebPaymentRequestCreateOptions.defaultOptions) + .toJS()); + + final paymentOptions = await paymentRequest.canMakePayment(); + + return AvailableMobilePayOptions( + googlePay: paymentOptions?.googlePay ?? false, + applePay: paymentOptions?.applePay ?? false, + link: paymentOptions?.link ?? false, + ); + } + @override Future isPlatformPaySupported({ IsGooglePaySupportedParams? params, diff --git a/packages/stripe_web/lib/src/widgets/payment_element.dart b/packages/stripe_web/lib/src/widgets/payment_element.dart index 4d5a38225..a74047f45 100644 --- a/packages/stripe_web/lib/src/widgets/payment_element.dart +++ b/packages/stripe_web/lib/src/widgets/payment_element.dart @@ -13,16 +13,28 @@ import '../../flutter_stripe_web.dart'; export 'package:stripe_js/src/api/elements/payment_element_options.dart'; export 'package:stripe_js/stripe_api.dart' show - PaymentElementLayout, ElementAppearance, ElementTheme, - ElementAppearanceLabels; + ElementAppearanceLabels, + PaymentElementLayout, + PaymentElementDefaultValues, + PaymentElementBillingDetails, + PaymentElementBillingDetailsAddress, + PaymentElementWalletOptions, + PaymentElementFieldRequired; typedef PaymentElementTheme = js.ElementTheme; class PaymentElement extends StatefulWidget { - final String clientSecret; + final String? clientSecret; final String? customerSessionClientSecret; + + final int? amount; + final String? currency; + final String? mode; + final String? paymentMethodCreation; + final List? paymentMethodTypes; + final double? width; final double? height; final CardStyle? style; @@ -42,11 +54,45 @@ class PaymentElement extends StatefulWidget { final js.PaymentElementOptionsTerms? terms; final js.PaymentElementWalletOptions? wallets; final js.PaymentElementApplePayOptions? applePay; + final String? locale; - const PaymentElement({ + const PaymentElement.withoutIntent({ + super.key, + required this.amount, + required this.currency, + required this.mode, + required this.onCardChanged, + this.paymentMethodTypes, + this.paymentMethodCreation, + this.width, + this.height, + this.style, + this.placeholder, + this.enablePostalCode = false, + this.autofocus = false, + this.focusNode, + this.onFocus, + this.layout = PaymentElementLayout.accordion, + this.appearance, + this.locale, + this.defaultValues, + this.business, + this.paymentMethodOrder, + this.fields, + this.readOnly, + this.terms, + this.wallets, + this.applePay, + }) : clientSecret = null, + customerSessionClientSecret = null; + + const PaymentElement.withIntent({ super.key, required this.clientSecret, + required this.onCardChanged, this.customerSessionClientSecret, + this.paymentMethodTypes, + this.paymentMethodCreation, this.width, this.height, this.style, @@ -55,9 +101,9 @@ class PaymentElement extends StatefulWidget { this.autofocus = false, this.focusNode, this.onFocus, - required this.onCardChanged, this.layout = PaymentElementLayout.accordion, this.appearance, + this.locale, this.defaultValues, this.business, this.paymentMethodOrder, @@ -66,7 +112,9 @@ class PaymentElement extends StatefulWidget { this.terms, this.wallets, this.applePay, - }); + }) : amount = null, + currency = null, + mode = null; @override State createState() => PaymentElementState(); @@ -74,6 +122,7 @@ class PaymentElement extends StatefulWidget { class PaymentElementState extends State { web.HTMLDivElement _divElement = web.HTMLDivElement(); + // 2 is the first size generated by the iframe, O will not work. double height = 2.0; @@ -127,7 +176,9 @@ class PaymentElementState extends State { ..id = 'payment-element' ..style.border = 'none' ..style.width = '100%' - ..style.height = '$height'; + ..style.height = '$height' + ..style.overflow = 'scroll' + ..style.overflowX = 'hidden'; elements = WebStripe.js.elements(createOptions()); mutationObserver!.observe( @@ -143,9 +194,11 @@ class PaymentElementState extends State { } js.PaymentElement? get element => WebStripe.element as js.PaymentElement?; + set element(js.StripeElement? value) => WebStripe.element = value; js.StripeElements? get elements => WebStripe.elements; + set elements(js.StripeElements? value) => WebStripe.elements = value; void requestBlur(response) { @@ -166,6 +219,7 @@ class PaymentElementState extends State { } final FocusNode _focusNode = FocusNode(debugLabel: 'CardField'); + FocusNode get _effectiveNode => widget.focusNode ?? _focusNode; @override @@ -185,10 +239,27 @@ class PaymentElementState extends State { js.JsElementsCreateOptions createOptions() { final appearance = widget.appearance ?? js.ElementAppearance(); + + if (widget.clientSecret?.isNotEmpty == true) { + return js.JsElementsCreateOptions( + clientSecret: widget.clientSecret, + customerSessionClientSecret: widget.customerSessionClientSecret, + appearance: appearance.toJson().jsify() as js.JsElementAppearance, + locale: widget.locale, + ); + } + return js.JsElementsCreateOptions( - clientSecret: widget.clientSecret, - customerSessionClientSecret: widget.customerSessionClientSecret, + amount: widget.amount, + currency: widget.currency, + mode: widget.mode, + paymentMethodTypes: widget.paymentMethodTypes + ?.map((pmt) => pmt.toJS) + .toList(growable: false) + .toJS, + paymentMethodCreation: widget.paymentMethodCreation, appearance: appearance.toJson().jsify() as js.JsElementAppearance, + locale: widget.locale, ); }