Line data Source code
1 : import 'package:flutter/services.dart'; 2 : import 'package:folly_fields/util/mask_text_input_formatter.dart'; 3 : import 'package:folly_fields/validators/abstract_validator.dart'; 4 : 5 : /// 6 : /// 7 : /// 8 : class PhoneValidator extends AbstractValidator<String> { 9 : /// 10 : /// 11 : /// 12 1 : PhoneValidator() 13 1 : : super( 14 1 : <TextInputFormatter>[ 15 1 : ChangeMask( 16 : firstMask: '(##) ####-####', 17 : secondMask: '(##) #####-####', 18 : ), 19 : ], 20 : ); 21 : 22 : /// 23 : /// 24 : /// 25 0 : @override 26 0 : String format(String value) => strip(value).replaceAllMapped( 27 0 : RegExp(r'^(\d{2})(\d{4,5})(\d{4})$'), 28 0 : (Match m) => '(${m[1]}) ${m[2]}-${m[3]}', 29 : ); 30 : 31 : /// 32 : /// 33 : /// 34 1 : @override 35 : TextInputType get keyboard => TextInputType.number; 36 : 37 : /// 38 : /// 39 : /// 40 1 : @override 41 : bool isValid(String value) { 42 1 : value = strip(value); 43 : 44 : /// phone must be defined 45 1 : if (value.isEmpty) { 46 : return false; 47 : } 48 : 49 : /// phone must have 10 or 11 chars 50 4 : if (value.length < 10 || value.length > 11) { 51 : return false; 52 : } 53 : 54 : /// Não existe DDD com zero. 55 4 : if (value[0] == '0' || value[1] == '0') { 56 : return false; 57 : } 58 : 59 : /// Telefones celulares sempre iniciam com 9. 60 4 : return !(value.length == 11 && value[2] != '9'); 61 : } 62 : }