TextFormField
This page has not been translated into English yet. The Russian original is below.
Текстовое поле ввода с поддержкой валидации и отправки формы. Интегрируется с компонентом Form для сбора данных.
Тип:
multi-child
TextFormField name:email
#decoration
#hintText "example@email.com"
Основные параметры
| Параметр | Тип | Default | Описание |
|---|---|---|---|
name
|
string | — | Имя поля для отправки формы |
initialValue
|
string | — | Начальное значение |
autofocus
|
bool | false | Автоматический фокус |
readOnly
|
bool | false | Только для чтения |
obscureText
|
bool | false | Скрытие текста (пароль) |
obscuringCharacter
|
string | • | Символ маскировки |
maxLines
|
int | 1 | Максимум строк |
minLines
|
int | — | Минимум строк |
maxLength
|
int | — | Максимум символов |
enabled
|
bool | — | Включено/отключено |
autocorrect
|
bool | true | Автокоррекция |
enableSuggestions
|
bool | true | Предложения ввода |
textAlign
|
string | start | Выравнивание текста |
canRequestFocus
|
bool | true | Может получить фокус |
Вложенные структуры
#decoration
Оформление поля ввода — через
parseInputDecoration
. Поддерживает hint, label, error, prefix/suffix, border и многое другое.
TextFormField name:email
#decoration
labelText:"Email"
hintText:"example@email.com"
#enabledBorder outline
#borderRadius circular 8
#borderSide color:#585593 width:1
#focusedBorder outline
#borderRadius circular 8
#borderSide color:#6C63FF width:2
#style
Стиль текста внутри поля (через
parseTextStyle
).
#validators
Правила, которым должно удовлетворять значение. Проверяются при отправке формы — или сразу, если поле помечено
autovalidateMode:always
.
#validators
#isEmpty "Поле обязательно для заполнения"
#minLength 8 "Минимум восемь символов"
Правила выполняются
в том порядке, в каком написаны
, и показывается сообщение первого возразившего — поэтому
#isEmpty
пишут первым, чтобы «обязательное» читалось раньше «слишком короткого».
Последний позиционный аргумент — сообщение. Без него правило говорит за себя по-английски; свой текст — единственный способ получить перевод.
| Правило | Аргументы | Что проверяет |
|---|---|---|
#isEmpty
|
— | Значение не пустое. Единственное , которое пустое значение не проходит |
#email
|
— |
Адрес с именем,
@
и доменом с точкой. Нарочно нестрогое; кириллические адреса проходят
|
#url
|
— |
Ссылка
http://
или
https://
. Только эти две схемы: поле, принимающее
javascript:
, — это дыра
|
#phone
|
— | Цифры с той пунктуацией, которую люди правда набирают, минимум семь цифр |
#numeric
|
— | Разбирается как число. Десятичная запятая не проходит |
#minLength
|
длина | Не короче. Считает символы, не байты |
#maxLength
|
длина | Не длиннее |
#min
|
число | Не меньше. Не-число не проходит |
#max
|
число | Не больше |
#pattern
|
регулярное выражение | Совпадает с ним. Якоря ставит автор: без них совпадение ищется где угодно |
#match
|
имя поля | Равно другому полю формы — подтверждение пароля. Имя несуществующего поля не проходит |
Пустое значение проходит все правила, кроме
#isEmpty
и
#match
.
Иначе необязательное поле нельзя было бы сделать необязательным: оставленный пустым email сообщал бы о неверном формате.
Имени, которого нет, поле не пропускает — оно называет его в сообщении. Молчаливый пропуск означал бы форму, принимающую что угодно.
Правила выполняются одинаково в приложении и на сайте : они описаны один раз и проверяются одним и тем же набором случаев на обоих движках.
Всё, кроме#isEmpty, — словарь версии 4. Проект, который их использует, объявляетminRuntime: 4; установка постарше откажется от такого содержимого заранее, а не покажет форму, отклоняющую каждое значение.
Дочерние элементы-билдеры
-
errorBuilder— кастомный виджет ошибки -
buildCounter— кастомный счётчик символов
Примеры
Поле email
TextFormField name:email autofocus:true
#decoration
labelText:"Email"
hintText:"example@email.com"
#validators
#isEmpty "Введите email"
#email "Неверный адрес"
Подтверждение пароля
Form @password:"" @confirm:""
Column
TextFormField name:"password" obscureText:true
#validators
#minLength 8 "Минимум восемь символов"
TextFormField name:"confirm" obscureText:true
#validators
#match "password" "Пароли не совпадают"
Значение поля по мере ввода
value:$переменная
связывает поле в обе стороны — ввод пишет в переменную, изменение переменной переписывает текст. Это отдельно от
name:
, который отдаёт значение при успешной отправке.
@query:""
TextFormField value:$query onChanged:(value){query=value}
Поле пароля
TextFormField name:password obscureText:true
#decoration
labelText:"Пароль"
#validators
#isEmpty "Введите пароль"
Многострочное поле
TextFormField name:comment maxLines:5 minLines:3
#decoration
labelText:"Комментарий"
hintText:"Введите текст..."