From a8e571ca7bd506220010f711f24360c4299a8f7a Mon Sep 17 00:00:00 2001 From: Nathan Anderson Date: Tue, 21 Nov 2023 11:46:42 -0700 Subject: [PATCH] Fix focus on mobile when navigating away and coming back to field, added readme pizaz --- README.md | 46 ++++++++++++---------- lib/card_details.dart | 2 +- lib/stripe_native_card_field.dart | 17 +++++--- readme_assets/card_provider_detection.gif | Bin 0 -> 2982349 bytes 4 files changed, 39 insertions(+), 26 deletions(-) create mode 100644 readme_assets/card_provider_detection.gif diff --git a/README.md b/README.md index 8fc98e3..52ac46e 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,22 @@ A simple and clean Stripe Element Card clone, rebuilt in native Flutter widgets. +# DISCLAIMER + This is not an officially maintained package by Stripe, but using the html stripe -elements they provide with flutter is less than ideal. +elements they provide in flutter was inconvenient for me, so I made this package. - - -## Features +# Features Got to use emojis and taglines for attention grabbing and algorithm hacking: -⚡Blazingly fast ( its as fast as the rest of flutter ) -🧹Cleaner ( fewer dependencies than the official stripe elements ) -🛡️Safe and Supports all Flutter Targets ( its native flutter with minimal dependencies ) -☑️Seemless UI/UX ( hard to match stripe quality, but I think I got close ) -🔄Built-in Stripe Integration ( guess that one is obvious ) -☯️Chi Energy Boost ( alright I'm fishing... ) +- 󱐋 Blazingly fast ( its as fast as the rest of flutter ) +- 󰃢 Cleaner ( fewer dependencies than the official stripe elements ) +- 🛡 Safe and Supports all Flutter Targets ( its native flutter with minimal dependencies ) +- ☑ Seemless UI/UX ( hard to match stripe quality, but I think I got close ) +-  Built-in Stripe Integration ( guess that one is obvious ) +- ☯ Chi Energy Boost ( alright I'm fishing... ) -### Why StripeNativeCardField? +## Why StripeNativeCardField? - Fewer dependencies: no more depending on Flutter Webview - Customizable: the entire field can inherit native Flutter styling, i.e. `BoxDecoration()` @@ -27,19 +27,25 @@ The card data can either be retrieved with the `onCardDetailsComplete` callback, you can have the element automatically create a Stripe card token when the fields are filled out, and return the token with the `onTokenReceived` callback. -### Mobile +### Card Provider Detection -![mobile showcase](./example/loading.gif) +![Card Provider Detection](https://git.fosscat.com/n8r/stripe_native_card_field/raw/branch/main/readme_assets/card_provider_detection.gif) -### Desktop +[Documentation to supported card providers](https://pub.dev/documentation/stripe_native_card_field/latest/card_details/CardProviderID.html) + +Currently support American Express, Diners Club, Discover Card, Mastercard, Jcb, Visa + +### Customizable Styles + +![Customizable Style 1]() + +![Customizable Style 2]() + +### Cross Platform ![desktop showcase](./example/loading.gif) -### Customizable - -![cumstomization showcase](./example/loading.gif) - -## Getting started +# Getting started - Install the package by running `flutter pub add stripe_native_card_field` @@ -82,6 +88,6 @@ CardTextField( For documentation on all of the available customizable aspects of the `CardTextField`, go to the [API docs here](https://pub.dev/documentation/stripe_native_card_field/latest/stripe_native_card_field/CardTextField-class.html). -## Additional information +# Additional information Repository located [here](https://git.fosscat.com/n8r/stripe_native_card_field) diff --git a/lib/card_details.dart b/lib/card_details.dart index b0bf20d..7e94af8 100644 --- a/lib/card_details.dart +++ b/lib/card_details.dart @@ -261,7 +261,7 @@ enum CardDetailsValidState { invalidZip, } -/// Enum of supported U.S. Card Providers +/// Enum of supported Card Providers enum CardProviderID { americanExpress, dinersClub, diff --git a/lib/stripe_native_card_field.dart b/lib/stripe_native_card_field.dart index 323498d..ff2efb2 100644 --- a/lib/stripe_native_card_field.dart +++ b/lib/stripe_native_card_field.dart @@ -323,14 +323,15 @@ class CardTextFieldState extends State { }, // Enable scrolling on mobile and if its narrow (not all fields visible) onHorizontalDragUpdate: (details) { + const minOffset = 0.0; + final maxOffset = _horizontalScrollController.position.maxScrollExtent; if (!_isMobile || isWideFormat) return; final newOffset = _horizontalScrollController.offset - details.delta.dx; - final max = _horizontalScrollController.position.maxScrollExtent; - if (newOffset < -30.0) { - _horizontalScrollController.jumpTo(-30.0); - } else if (newOffset > max + 30.0) { - _horizontalScrollController.jumpTo(max + 30.0); + if (newOffset < minOffset) { + _horizontalScrollController.jumpTo(minOffset); + } else if (newOffset > maxOffset) { + _horizontalScrollController.jumpTo(maxOffset); } else { _horizontalScrollController.jumpTo(newOffset); } @@ -773,6 +774,12 @@ class CardTextFieldState extends State { _setValidationState(null); } + // If field tapped, and has focus, dismiss focus + if (_currentStep == step && _hasFocus()) { + FocusManager.instance.primaryFocus?.unfocus(); + return; + } + setState(() { _currentStep = step; }); diff --git a/readme_assets/card_provider_detection.gif b/readme_assets/card_provider_detection.gif new file mode 100644 index 0000000000000000000000000000000000000000..a16e5e2b67f54f5a3433dc2d97054a6acb7482da GIT binary patch literal 2982349 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