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 Ipv4Validator extends AbstractValidator<String> 9 : implements AbstractParser<String> { 10 : /// 11 : /// 12 : /// 13 1 : Ipv4Validator() 14 1 : : super( 15 1 : <TextInputFormatter>[ 16 1 : MaskTextInputFormatter( 17 : mask: '###############', 18 1 : filter: <String, RegExp>{ 19 1 : '#': RegExp('[0-9.]'), 20 : }, 21 : ), 22 : ], 23 : ); 24 : 25 : /// 26 : /// 27 : /// 28 1 : @override 29 : String format(String value) => value; 30 : 31 : /// 32 : /// 33 : /// 34 1 : @override 35 : String strip(String value) => value; 36 : 37 : /// 38 : /// 39 : /// 40 1 : @override 41 : TextInputType get keyboard => TextInputType.number; 42 : 43 : /// 44 : /// 45 : /// 46 1 : @override 47 1 : bool isValid(String value) => valid(value) == null; 48 : 49 : /// 50 : /// 51 : /// 52 1 : @override 53 : String? parse(String? value) { 54 1 : if (value == null || value.isEmpty) { 55 : return null; 56 : } 57 : 58 1 : List<String> parts = value.split('.'); 59 : 60 2 : if (parts.length != 4) { 61 : return null; 62 : } 63 : 64 2 : for (final String part in parts) { 65 1 : int? octet = int.tryParse(part); 66 2 : if (octet == null || octet < 0 || octet > 255) { 67 : return null; 68 : } 69 : } 70 : 71 : return value; 72 : } 73 : 74 : /// 75 : /// 76 : /// 77 1 : @override 78 : String? valid(String? value) => 79 1 : parse(value) == null ? 'IPv4 inválido.' : null; 80 : }