Line data Source code
1 : import 'dart:math'; 2 : 3 : import 'package:flutter/services.dart'; 4 : import 'package:folly_fields/util/mask_text_input_formatter.dart'; 5 : import 'package:folly_fields/validators/abstract_validator.dart'; 6 : 7 : /// 8 : /// 9 : /// 10 : class MacAddressValidator extends AbstractValidator<String> { 11 : /// 12 : /// 13 : /// 14 1 : MacAddressValidator() 15 1 : : super( 16 1 : <TextInputFormatter>[ 17 1 : UppercaseMask( 18 : mask: '##:##:##:##:##:##', 19 1 : filter: <String, RegExp>{ 20 1 : '#': RegExp('[a-fA-F0-9]'), 21 : }, 22 : ), 23 : ], 24 : ); 25 : 26 : /// 27 : /// 28 : /// 29 1 : @override 30 2 : String format(String value) => strip(value).replaceAllMapped( 31 1 : RegExp( 32 : '^([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})' 33 : r'([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})$', 34 : ), 35 8 : (Match m) => '${m[1]}:${m[2]}:${m[3]}:${m[4]}:${m[5]}:${m[6]}', 36 : ); 37 : 38 : /// 39 : /// 40 : /// 41 1 : @override 42 2 : String strip(String value) => value.replaceAll(RegExp('[^A-F0-9]'), ''); 43 : 44 : /// 45 : /// 46 : /// 47 1 : @override 48 : bool isValid(String value) { 49 3 : if (value.isEmpty || value.length != 17) { 50 : return false; 51 : } 52 : 53 1 : value = strip(value); 54 : 55 2 : if (value.length != 12) { 56 : return false; 57 : } 58 : 59 3 : return format(value).length == 17; 60 : } 61 : 62 3 : static final Random _random = Random(); 63 : 64 : /// 65 : /// 66 : /// 67 2 : static String generate() => List<String>.generate( 68 : 17, 69 1 : (int index) => 70 6 : (index + 1) % 3 == 0 ? ':' : _random.nextInt(16).toRadixString(16), 71 2 : ).join().toUpperCase(); 72 : }