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 LocalPhoneValidator extends AbstractValidator<String> { 9 : /// 10 : /// 11 : /// 12 1 : LocalPhoneValidator() 13 1 : : super( 14 1 : <TextInputFormatter>[ 15 1 : ChangeMask( 16 : firstMask: '####-####', 17 : secondMask: '#####-####', 18 : ), 19 : ], 20 : ); 21 : 22 : /// 23 : /// 24 : /// 25 1 : @override 26 2 : String format(String value) => strip(value).replaceAllMapped( 27 1 : RegExp(r'^(\d{4,5})(\d{4})$'), 28 4 : (Match m) => '${m[1]}-${m[2]}', 29 : ); 30 : 31 : /// 32 : /// 33 : /// 34 0 : @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 < 8 || value.length > 9) { 51 : return false; 52 : } 53 : 54 : /// Números de 9 dígitos sempre iniciam com 9. 55 4 : return !(value.length == 9 && value[0] != '9'); 56 : } 57 : }