|
|
|
@@ -498,7 +498,7 @@ class CardTextFieldState extends State<CardTextField> {
|
|
|
|
|
if (_isMobile &&
|
|
|
|
|
_expirationController.text ==
|
|
|
|
|
'\u200b')
|
|
|
|
|
Text('MM/YYY', style: _hintTextSyle),
|
|
|
|
|
Text('MM/YY', style: _hintTextSyle),
|
|
|
|
|
TextFormField(
|
|
|
|
|
key: const Key('expiration_field'),
|
|
|
|
|
focusNode: expirationFocusNode,
|
|
|
|
@@ -914,9 +914,10 @@ class CardTextFieldState extends State<CardTextField> {
|
|
|
|
|
// Makes an http call to stripe API with provided card credentials and returns the result
|
|
|
|
|
Future<Map<String, dynamic>?> getStripeResponse() async {
|
|
|
|
|
if (widget.stripePublishableKey == null) {
|
|
|
|
|
if (kDebugMode)
|
|
|
|
|
if (kDebugMode) {
|
|
|
|
|
print(
|
|
|
|
|
'***ERROR tried calling `getStripeResponse()` but no stripe key provided');
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1073,9 +1074,10 @@ class CardTextFieldState extends State<CardTextField> {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Make the selection adjustment after first frame builds
|
|
|
|
|
if (kIsWeb)
|
|
|
|
|
// Make the selection adjustment only on web, other platforms dont select on focus change
|
|
|
|
|
if (kIsWeb) {
|
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_) => _adjustSelection());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!isWideFormat) {
|
|
|
|
|
_scrollRow(step);
|
|
|
|
@@ -1095,27 +1097,23 @@ class CardTextFieldState extends State<CardTextField> {
|
|
|
|
|
switch (_currentStep) {
|
|
|
|
|
case CardEntryStep.number:
|
|
|
|
|
final len = _cardNumberController.text.length;
|
|
|
|
|
final offset = len == 0 ? 1 : len;
|
|
|
|
|
_cardNumberController.value = _cardNumberController.value.copyWith(
|
|
|
|
|
selection: TextSelection(baseOffset: offset, extentOffset: offset));
|
|
|
|
|
selection: TextSelection(baseOffset: len, extentOffset: len));
|
|
|
|
|
break;
|
|
|
|
|
case CardEntryStep.exp:
|
|
|
|
|
final len = _expirationController.text.length;
|
|
|
|
|
final offset = len == 0 ? 0 : len;
|
|
|
|
|
_expirationController.value = _expirationController.value.copyWith(
|
|
|
|
|
selection: TextSelection(baseOffset: offset, extentOffset: offset));
|
|
|
|
|
selection: TextSelection(baseOffset: len, extentOffset: len));
|
|
|
|
|
break;
|
|
|
|
|
case CardEntryStep.cvc:
|
|
|
|
|
final len = _securityCodeController.text.length;
|
|
|
|
|
final offset = len == 0 ? 0 : len;
|
|
|
|
|
_securityCodeController.value = _securityCodeController.value.copyWith(
|
|
|
|
|
selection: TextSelection(baseOffset: offset, extentOffset: offset));
|
|
|
|
|
selection: TextSelection(baseOffset: len, extentOffset: len));
|
|
|
|
|
break;
|
|
|
|
|
case CardEntryStep.postal:
|
|
|
|
|
final len = _postalCodeController.text.length;
|
|
|
|
|
final offset = len == 0 ? 0 : len;
|
|
|
|
|
_postalCodeController.value = _postalCodeController.value.copyWith(
|
|
|
|
|
selection: TextSelection(baseOffset: offset, extentOffset: offset));
|
|
|
|
|
selection: TextSelection(baseOffset: len, extentOffset: len));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|