0.0.6 release
This commit is contained in:
parent
d7d27a1cf5
commit
462e40308f
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -1,3 +1,13 @@
|
||||||
|
## 0.0.6
|
||||||
|
|
||||||
|
- Improved assertion and error messaging when missing stripe implements
|
||||||
|
- Added better doc comments
|
||||||
|
- Fixed `CardTextField.delayToShowLoading`, now it uses it
|
||||||
|
- Fixed bad assertion logic when providing stripe keys
|
||||||
|
- Added ability to make Stripe call with `GlobalKey`
|
||||||
|
- Refactored method `onTokenReceived` to `onStripeResponse` to be clearer
|
||||||
|
- Refactored method `onCardDetailsComplete` to `onValidCardDetails` to be clearer
|
||||||
|
|
||||||
## 0.0.5
|
## 0.0.5
|
||||||
|
|
||||||
- Fix Web, invalid call to `Platform.isAndroid`
|
- Fix Web, invalid call to `Platform.isAndroid`
|
||||||
|
|
21
README.md
21
README.md
|
@ -23,7 +23,7 @@ Got to use emojis and taglines for attention grabbing and algorithm hacking:
|
||||||
- Native Implementation: compiles and loads like the rest of your app, unlike embeded html
|
- Native Implementation: compiles and loads like the rest of your app, unlike embeded html
|
||||||
- Automatic validation: no `inputFormatters` or `RegExp` needed on your side
|
- Automatic validation: no `inputFormatters` or `RegExp` needed on your side
|
||||||
|
|
||||||
The card data can either be retrieved with the `onCardDetailsComplete` callback, or
|
The card data can either be retrieved with the `onValidCardDetails` callback, or
|
||||||
you can have the element automatically create a Stripe card token when the fields
|
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.
|
are filled out, and return the token with the `onTokenReceived` callback.
|
||||||
|
|
||||||
|
@ -62,12 +62,13 @@ Include the package in a file:
|
||||||
import 'package:stripe_native_card_field/stripe_native_card_field.dart';
|
import 'package:stripe_native_card_field/stripe_native_card_field.dart';
|
||||||
```
|
```
|
||||||
|
|
||||||
### For just Card Data
|
### For Raw Card Data
|
||||||
|
|
||||||
|
Provide a callback for the `CardTextField` to return you the data when its complete.
|
||||||
```dart
|
```dart
|
||||||
CardTextField(
|
CardTextField(
|
||||||
width: 500,
|
width: 500,
|
||||||
onCardDetailsComplete: (details) {
|
onValidCardDetails: (details) {
|
||||||
// Save the card details to use with your call to Stripe, or whoever
|
// Save the card details to use with your call to Stripe, or whoever
|
||||||
setState(() => _cardDetails = details);
|
setState(() => _cardDetails = details);
|
||||||
},
|
},
|
||||||
|
@ -76,17 +77,27 @@ CardTextField(
|
||||||
|
|
||||||
### For Stripe Token
|
### For Stripe Token
|
||||||
|
|
||||||
|
Simply provide a function for the `onStripeResponse` callback!
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
CardTextField(
|
CardTextField(
|
||||||
width: 500,
|
width: 500,
|
||||||
stripePublishableKey: 'pk_test_abc123', // Your stripe key here
|
stripePublishableKey: 'pk_test_abc123', // Your stripe key here
|
||||||
onTokenReceived: (token) {
|
onStripeResponse: (Map<String, dynamic> data) {
|
||||||
// Save the stripe token to send to your backend
|
// Save the stripe token to send to your backend
|
||||||
setState(() => _token = token);
|
setState(() => _tokenData = data);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you want more fine-grained control of when the stripe call is made, you
|
||||||
|
can create a `GlobalKey` and access the `CardTextFieldState`, calling the
|
||||||
|
`getStripeResponse()` function yourself. See the provided [example](https://pub.dev/packages/stripe_native_card_field/example)
|
||||||
|
for details. If you choose this route, do not provide an `onStripeResponse` callback, or you will end up
|
||||||
|
making two calls to stripe!
|
||||||
|
|
||||||
# Additional information
|
# Additional information
|
||||||
|
|
||||||
Repository located [here](https://git.fosscat.com/n8r/stripe_native_card_field)
|
Repository located [here](https://git.fosscat.com/n8r/stripe_native_card_field)
|
||||||
|
|
||||||
|
Please email me at n8r@fosscat.com for any issues or PRs.
|
||||||
|
|
|
@ -61,14 +61,15 @@ class _MyHomePageState extends State<MyHomePage> {
|
||||||
),
|
),
|
||||||
CardTextField(
|
CardTextField(
|
||||||
width: 300,
|
width: 300,
|
||||||
onCardDetailsComplete: (details) {
|
onValidCardDetails: (details) {
|
||||||
if (kDebugMode) {
|
if (kDebugMode) {
|
||||||
print(details);
|
print(details);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
textStyle:
|
textStyle:
|
||||||
const TextStyle(fontFamily: 'Lato', color: Colors.tealAccent),
|
const TextStyle(fontFamily: 'Lato', color: Colors.tealAccent),
|
||||||
hintTextStyle: const TextStyle(fontFamily: 'Lato', color: Colors.teal),
|
hintTextStyle:
|
||||||
|
const TextStyle(fontFamily: 'Lato', color: Colors.teal),
|
||||||
errorTextStyle: const TextStyle(color: Colors.purpleAccent),
|
errorTextStyle: const TextStyle(color: Colors.purpleAccent),
|
||||||
boxDecoration: BoxDecoration(
|
boxDecoration: BoxDecoration(
|
||||||
color: Colors.black54,
|
color: Colors.black54,
|
||||||
|
|
|
@ -38,8 +38,26 @@ class _MyHomePageState extends State<MyHomePage> {
|
||||||
CardDetailsValidState? state;
|
CardDetailsValidState? state;
|
||||||
String? errorText;
|
String? errorText;
|
||||||
|
|
||||||
|
// Creating a global key here allows us to call the `getStripeResponse()`
|
||||||
|
// inside the CardTextFieldState widget in our build method. See below
|
||||||
|
final _key = GlobalKey<CardTextFieldState>();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final cardField = CardTextField(
|
||||||
|
key: _key,
|
||||||
|
loadingWidgetLocation: LoadingLocation.above,
|
||||||
|
stripePublishableKey: 'pk_test_abc123testmykey',
|
||||||
|
width: 600,
|
||||||
|
onValidCardDetails: (details) {
|
||||||
|
if (kDebugMode) {
|
||||||
|
print(details);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
overrideValidState: state,
|
||||||
|
errorText: errorText,
|
||||||
|
);
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: Center(
|
body: Center(
|
||||||
child: Column(
|
child: Column(
|
||||||
|
@ -51,22 +69,23 @@ class _MyHomePageState extends State<MyHomePage> {
|
||||||
'Enter your card details below:',
|
'Enter your card details below:',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
CardTextField(
|
cardField,
|
||||||
width: 300,
|
|
||||||
onCardDetailsComplete: (details) {
|
|
||||||
if (kDebugMode) {
|
|
||||||
print(details);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
overrideValidState: state,
|
|
||||||
errorText: errorText,
|
|
||||||
),
|
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
child: const Text('Set manual error'),
|
child: const Text('Set manual error'),
|
||||||
onPressed: () => setState(() {
|
onPressed: () => setState(() {
|
||||||
errorText = 'There is a problem';
|
errorText = 'There is a problem';
|
||||||
state = CardDetailsValidState.invalidCard;
|
state = CardDetailsValidState.invalidCard;
|
||||||
}),
|
}),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 12),
|
||||||
|
ElevatedButton(
|
||||||
|
child: const Text('Get Stripe token'),
|
||||||
|
onPressed: () async {
|
||||||
|
// Here we use the global key to get the stripe data, rather than
|
||||||
|
// using the `onStripeResponse` callback in the widget
|
||||||
|
final tok = await _key.currentState?.getStripeResponse();
|
||||||
|
if (kDebugMode) print(tok);
|
||||||
|
},
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
@ -206,7 +206,7 @@ packages:
|
||||||
path: ".."
|
path: ".."
|
||||||
relative: true
|
relative: true
|
||||||
source: path
|
source: path
|
||||||
version: "0.0.3"
|
version: "0.0.5"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
19
lib/card_text_field_error.dart
Normal file
19
lib/card_text_field_error.dart
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
/// Error class that `CardTextField` throws if any errors are encountered
|
||||||
|
class CardTextFieldError extends Error {
|
||||||
|
/// Details provided for the error
|
||||||
|
String? details;
|
||||||
|
CardTextFieldErrorType type;
|
||||||
|
|
||||||
|
CardTextFieldError(this.type, {this.details});
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'CardTextFieldError-${type.name}: $details';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Enum to add typing to the `CardTextFieldErrorType`
|
||||||
|
enum CardTextFieldErrorType {
|
||||||
|
stripeImplementation,
|
||||||
|
unknown,
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
||||||
name: stripe_native_card_field
|
name: stripe_native_card_field
|
||||||
description: A native flutter implementation of the elegant Stripe Card Field.
|
description: A native flutter implementation of the elegant Stripe Card Field.
|
||||||
version: 0.0.5
|
version: 0.0.6
|
||||||
repository: https://git.fosscat.com/n8r/stripe_native_card_field
|
repository: https://git.fosscat.com/n8r/stripe_native_card_field
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -18,7 +18,7 @@ void main() {
|
||||||
CardDetails? details;
|
CardDetails? details;
|
||||||
final cardField = CardTextField(
|
final cardField = CardTextField(
|
||||||
width: width,
|
width: width,
|
||||||
onCardDetailsComplete: (cd) => details = cd,
|
onValidCardDetails: (cd) => details = cd,
|
||||||
);
|
);
|
||||||
await tester.pumpWidget(baseCardFieldWidget(cardField));
|
await tester.pumpWidget(baseCardFieldWidget(cardField));
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ void main() {
|
||||||
|
|
||||||
final cardField = CardTextField(
|
final cardField = CardTextField(
|
||||||
width: width,
|
width: width,
|
||||||
onCardDetailsComplete: (cd) => details = cd,
|
onValidCardDetails: (cd) => details = cd,
|
||||||
);
|
);
|
||||||
await tester.pumpWidget(baseCardFieldWidget(cardField));
|
await tester.pumpWidget(baseCardFieldWidget(cardField));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user