• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

juancastillo0 / json_form / 13743422655

09 Mar 2025 01:23AM UTC coverage: 80.521% (-0.01%) from 80.534%
13743422655

push

github

juancastillo0
ui schema width property

7 of 10 new or added lines in 3 files covered. (70.0%)

20 existing lines in 2 files now uncovered.

1670 of 2074 relevant lines covered (80.52%)

1.31 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

8.89
/lib/src/utils/date_text_input_json_formatter.dart
1
import 'dart:developer';
2

3
import 'package:flutter/services.dart';
4

5
const String dateFormatString = 'yyyy-MM-dd';
6
const String dateTimeFormatString = 'yyyy-MM-dd HH:mm:ss';
7

8
String formatDate(DateTime dateTime) {
1✔
9
  return '${dateTime.year}-${dateTime.month.toString().padLeft(2, '0')}-${dateTime.day.toString().padLeft(2, '0')}';
8✔
10
}
11

12
String formatDateTime(DateTime dateTime) {
1✔
13
  return '${formatDate(dateTime)} ${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}:${dateTime.second.toString().padLeft(2, '0')}';
11✔
14
}
15

16
class DateTextInputJsonFormatter extends TextInputFormatter {
UNCOV
17
  @override
×
18
  TextEditingValue formatEditUpdate(
19
    TextEditingValue oldValue,
20
    TextEditingValue newValue,
21
  ) {
22
    if (oldValue.text.length >= newValue.text.length) {
×
23
      return newValue;
24
    }
25

UNCOV
26
    if (newValue.text.length > 10) {
×
27
      return oldValue;
28
    }
29

30
    final dateText = _addSeparators(newValue.text, '-');
×
31

UNCOV
32
    if (dateText.length == 1) {
×
UNCOV
33
      if (!RegExp(r'([0-3])$').hasMatch(dateText)) {
×
34
        return oldValue;
35
      }
36
    }
37
    if (dateText.length == 2) {
×
38
      log(dateText[1]);
×
UNCOV
39
      if (!RegExp(r'(0[1-9]|1[0-9]|2[0-9]|3[0-1])$').hasMatch(dateText)) {
×
40
        return oldValue;
41
      }
42
    }
43

44
    if (dateText.length == 4) {
×
45
      if (!RegExp(r'(0[1-9]|1[0-9]|2[0-9]|3[0-1])-([0-1])$')
×
UNCOV
46
          .hasMatch(dateText)) {
×
47
        return oldValue;
48
      }
49
    }
50

51
    if (dateText.length == 5) {
×
UNCOV
52
      if (!RegExp(r'(0[1-9]|1[0-9]|2[0-9]|3[0-1])-(0[1-9]|1[0-2])$')
×
UNCOV
53
          .hasMatch(dateText)) {
×
54
        return oldValue;
55
      }
56
    }
57
    if (dateText.length == 7) {
×
UNCOV
58
      if (!RegExp(r'(0[1-9]|1[0-9]|2[0-9]|3[0-1])-(0[1-9]|1[0-2])-([1-2])$')
×
59
          .hasMatch(dateText)) {
×
60
        return oldValue;
61
      }
62
    }
63

64
    if (dateText.length == 8) {
×
65
      if (!RegExp(
×
66
        r'(0[1-9]|1[0-9]|2[0-9]|3[0-1])-(0[1-9]|1[0-2])-(1[9]|2[0|9])$',
67
      ).hasMatch(dateText)) {
×
68
        return oldValue;
69
      }
70
    }
71

72
    if (dateText.length == 9) {
×
73
      if (!RegExp(
×
74
        r'(0[1-9]|1[0-9]|2[0-9]|3[0-1])-(0[1-9]|1[0-2])-(19[89]|20[0-3])$',
75
      ).hasMatch(dateText)) {
×
76
        return oldValue;
77
      }
78
    }
79

80
    if (dateText.length == 10) {
×
UNCOV
81
      if (!RegExp(
×
82
        r'(0[1-9]|1[0-9]|2[0-9]|3[0-1])-(0[1-9]|1[0-2])-(19[89][0-9]|20[0-3][0-9])$',
UNCOV
83
      ).hasMatch(dateText)) {
×
84
        return oldValue;
85
      }
86
    }
87

88
    return newValue.copyWith(
×
89
      text: dateText,
90
      selection: updateCursorPosition(dateText),
×
91
    );
92
  }
93

94
  String _addSeparators(String value, String separator) {
×
95
    final v = value.replaceAll('-', '');
×
UNCOV
96
    final newString = StringBuffer();
×
UNCOV
97
    for (int i = 0; i < v.length; i++) {
×
98
      newString.write(v[i]);
×
UNCOV
99
      if (i == 1) {
×
UNCOV
100
        newString.write(separator);
×
101
      }
102
      if (i == 3) {
×
UNCOV
103
        newString.write(separator);
×
104
      }
105
    }
UNCOV
106
    return newString.toString();
×
107
  }
108

UNCOV
109
  TextSelection updateCursorPosition(String text) {
×
UNCOV
110
    return TextSelection.fromPosition(TextPosition(offset: text.length));
×
111
  }
112
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc