Как справиться с переполнением DateTime в Dart / Flutter? - PullRequest
0 голосов
/ 11 ноября 2019

В проекте Flutter у меня есть форма ввода с указателем даты. Когда пользователь выбрал дату, можно изменить выбранную дату, набрав. Я хочу проверить правильность ввода формы и убедиться в правильности ввода даты.

Вот снимок экрана формы ввода:

enter image description here

К сожалению, объект языка Dart DateTime допускает переполнение. Таким образом, если задано значение 2019-13-1 (поле DateTime отформатировано как yyyy-MM-dd), а затем проверка этого ввода пройдет проверку, возвращая дату 2020-1-1. 13-й месяц из-за поведения переполнения Dart Date превращается в 1-й месяц следующего года.

Я знаю, что проблема Github уже есть: https://github.com/dart-lang/sdk/issues/11189

Есть лиКто-нибудь, у кого есть рабочее решение, чтобы обойти эту проблему? Спасибо за помощь заранее!

Код для DateTimeField показан ниже:

                  ListTile(
                    leading: Icon(Icons.calendar_today, size: 21),
                    title: DateTimeField(
                      decoration: InputDecoration(
                        hintText: 'Date'
                      ),
                      autovalidate: false,
                      format: DateFormat('yyyy-MM-dd'),
                      onShowPicker: (context, currentValue) {
                        return showDatePicker(
                          firstDate: DateTime(2019),
                          initialDate: DateTime.now(),
                          lastDate: DateTime(DateTime.now().year + 1),
                          context: context
                        );
                      },
                      validator: (value) {
                        if ((value.toString().isEmpty) || (DateTime.tryParse(value.toString()) == null)) {
                          return 'Please enter a valid date';
                        } 
                        return null;
                      },
                      onChanged: (value) {
                        setState(() => expense.date = value);
                      },
                    )
                  ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...