Flutter: установка диапазона допустимых значений и нескольких условий для валидатора TextFormField - PullRequest
0 голосов
/ 28 июня 2018

Я использую много TextFormFields в качестве полей ввода чисел и хочу убедиться, что пользователь может вводить значение только из допустимого диапазона чисел. Например, поле возраста должно принимать только числа от 18 до 100 и только целые числа, а не десятичные.

Что подводит меня ко второй половине моего вопроса: как я могу использовать свойство validator для указания двух или более условий для одного поля? Скажите для поля возраста; вход должен быть в указанном диапазоне, вход должен быть целым числом, вход не должен быть пустым. Я могу создать работающий валидатор, скажем, с одним из этих условий, но как мне попросить его проверить несколько вещей в одном TextFormField?

Пожалуйста, дайте мне знать, если есть какая-либо другая информация, которую я могу предоставить, чтобы помочь вам ответить, я не чувствовал, что пример кода был бы полезен, потому что проблема не является конкретной.

РЕДАКТИРОВАТЬ: выяснили (по большей части) проблему множественных условий, все еще в неведении относительно создания диапазона допустимых значений. Конкретный пример решения для моей возрастной области был бы большой помощью. Пример кода:

...
String validateAge(String value){
 String pattern = r'(^[0-9]*$)';
 RegExp regExp = new RegExp(pattern);
 if (value.length == 0){
  return "Age is required.";
 } else if (!regExp.hasMatch(value)){
  return "Age cannot contain characters other than numbers.";
 }
}
...
new TextFormField(
 decoration: InputDecoration(
  hintText: "Age"
 ),
 validator: validateAge,
 autoValidate: true,
),

1 Ответ

0 голосов
/ 28 июня 2018

Если вы анализируете значение для числа, вам не нужно использовать регулярное выражение

var numValue = int.tryParse(value);
if(numValue >= 5 && numValue < 100) {
  return true;
} 

Например, вы можете проверить, если value.length > 0 и numValue > 0 узнать, что строка не является допустимым числом для

"Age cannot contain characters other than numbers."
...