Skip to content

Commit

Permalink
Merge pull request #90 from kavantrivedi/fixes/_#86_fix_for_custom_va…
Browse files Browse the repository at this point in the history
…lidator

fixes #86 Enhancement regarding support of custom validator
  • Loading branch information
ShwetaChauhan18 committed Sep 13, 2022
2 parents 9b3ef26 + d9a26af commit 4f94c44
Showing 1 changed file with 53 additions and 35 deletions.
88 changes: 53 additions & 35 deletions lib/credit_card_form.dart
@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_credit_card/flutter_credit_card.dart';

import 'flutter_credit_card.dart';

class CreditCardForm extends StatefulWidget {
const CreditCardForm({
Key? key,
Expand Down Expand Up @@ -41,6 +43,10 @@ class CreditCardForm extends StatefulWidget {
this.isCardNumberVisible = true,
this.isExpiryDateVisible = true,
this.autovalidateMode,
this.cardNumberValidator,
this.expiryDateValidator,
this.cvvValidator,
this.cardHolderValidator,
}) : super(key: key);

final String cardNumber;
Expand Down Expand Up @@ -72,6 +78,11 @@ class CreditCardForm extends StatefulWidget {
final InputDecoration cvvCodeDecoration;
final AutovalidateMode? autovalidateMode;

final String? Function(String?)? cardNumberValidator;
final String? Function(String?)? expiryDateValidator;
final String? Function(String?)? cvvValidator;
final String? Function(String?)? cardHolderValidator;

@override
_CreditCardFormState createState() => _CreditCardFormState();
}
Expand Down Expand Up @@ -184,13 +195,14 @@ class _CreditCardFormState extends State<CreditCardForm> {
textInputAction: TextInputAction.next,
autofillHints: const <String>[AutofillHints.creditCardNumber],
autovalidateMode: widget.autovalidateMode,
validator: (String? value) {
// Validate less that 13 digits +3 white spaces
if (value!.isEmpty || value.length < 16) {
return widget.numberValidationMessage;
}
return null;
},
validator: widget.cardNumberValidator ??
(String? value) {
// Validate less that 13 digits +3 white spaces
if (value!.isEmpty || value.length < 16) {
return widget.numberValidationMessage;
}
return null;
},
),
),
),
Expand All @@ -207,8 +219,10 @@ class _CreditCardFormState extends State<CreditCardForm> {
key: widget.expiryDateKey,
controller: _expiryDateController,
onChanged: (String value) {
if (_expiryDateController.text.startsWith(RegExp('[2-9]'))) {
_expiryDateController.text = '0' + _expiryDateController.text;
if (_expiryDateController.text
.startsWith(RegExp('[2-9]'))) {
_expiryDateController.text =
'0' + _expiryDateController.text;
}
setState(() {
expiryDate = _expiryDateController.text;
Expand All @@ -230,27 +244,29 @@ class _CreditCardFormState extends State<CreditCardForm> {
autofillHints: const <String>[
AutofillHints.creditCardExpirationDate
],
validator: (String? value) {
if (value!.isEmpty) {
return widget.dateValidationMessage;
}
final DateTime now = DateTime.now();
final List<String> date = value.split(RegExp(r'/'));
final int month = int.parse(date.first);
final int year = int.parse('20${date.last}');
final int lastDayOfMonth = month < 12
? DateTime(year, month + 1, 0).day
: DateTime(year + 1, 1, 0).day;
final DateTime cardDate = DateTime(
year, month, lastDayOfMonth, 23, 59, 59, 999);
validator: widget.expiryDateValidator ??
(String? value) {
if (value!.isEmpty) {
return widget.dateValidationMessage;
}
final DateTime now = DateTime.now();
final List<String> date =
value.split(RegExp(r'/'));
final int month = int.parse(date.first);
final int year = int.parse('20${date.last}');
final int lastDayOfMonth = month < 12
? DateTime(year, month + 1, 0).day
: DateTime(year + 1, 1, 0).day;
final DateTime cardDate = DateTime(
year, month, lastDayOfMonth, 23, 59, 59, 999);

if (cardDate.isBefore(now) ||
month > 12 ||
month == 0) {
return widget.dateValidationMessage;
}
return null;
},
if (cardDate.isBefore(now) ||
month > 12 ||
month == 0) {
return widget.dateValidationMessage;
}
return null;
},
),
),
),
Expand Down Expand Up @@ -291,12 +307,13 @@ class _CreditCardFormState extends State<CreditCardForm> {
onCreditCardModelChange(creditCardModel);
});
},
validator: (String? value) {
if (value!.isEmpty || value.length < 3) {
return widget.cvvValidationMessage;
}
return null;
},
validator: widget.cvvValidator ??
(String? value) {
if (value!.isEmpty || value.length < 3) {
return widget.cvvValidationMessage;
}
return null;
},
),
),
),
Expand Down Expand Up @@ -330,6 +347,7 @@ class _CreditCardFormState extends State<CreditCardForm> {
FocusScope.of(context).unfocus();
onCreditCardModelChange(creditCardModel);
},
validator: widget.cardHolderValidator,
),
),
),
Expand Down

0 comments on commit 4f94c44

Please sign in to comment.