Line data Source code
1 : import 'package:flutter/material.dart'; 2 : import 'package:flutter/services.dart'; 3 : import 'package:folly_fields/util/folly_utils.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 TimeValidator extends AbstractParserValidator<TimeOfDay> { 11 : /// 12 : /// 13 : /// 14 1 : TimeValidator() 15 1 : : super( 16 1 : <TextInputFormatter>[ 17 1 : MaskTextInputFormatter( 18 : mask: 'AB:CB', 19 1 : filter: <String, RegExp>{ 20 1 : 'A': RegExp('[0-2]'), 21 1 : 'B': RegExp('[0-9]'), 22 1 : 'C': RegExp('[0-5]'), 23 : }, 24 : ), 25 : ], 26 : ); 27 : 28 : /// 29 : /// 30 : /// 31 1 : @override 32 4 : String format(TimeOfDay value) => '${value.hour.toString().padLeft(2, '0')}' 33 3 : ':${value.minute.toString().padLeft(2, '0')}'; 34 : 35 : /// 36 : /// 37 : /// 38 1 : @override 39 : String strip(String value) => value; 40 : 41 : /// 42 : /// 43 : /// 44 1 : @override 45 1 : bool isValid(String value) => valid(value) == null; 46 : 47 : /// 48 : /// 49 : /// 50 1 : @override 51 : TextInputType get keyboard => TextInputType.datetime; 52 : 53 : /// 54 : /// 55 : /// 56 1 : @override 57 : TimeOfDay? parse(String? value) { 58 1 : if (value != null && isValid(value)) { 59 1 : List<String> parts = value.split(':'); 60 2 : if (parts.length == 2) { 61 1 : return TimeOfDay( 62 2 : hour: int.parse(parts.first), 63 2 : minute: int.parse(parts.last), 64 : ); 65 : } 66 : } 67 : 68 : return null; 69 : } 70 : 71 : /// 72 : /// 73 : /// 74 1 : @override 75 1 : String? valid(String value) => FollyUtils.validTime(value); 76 : 77 : /// 78 : /// 79 : /// 80 1 : String formatDateTime(DateTime dateTime) => 81 2 : format(TimeOfDay.fromDateTime(dateTime)); 82 : }