Ask the assistant
0/400
Your question is processed by an AI service and kept to improve answers. Do not enter personal data.

    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:"Введите текст..."

    See also

    • Text — отображение текста (без ввода)
    • Button — кнопка для отправки формы
    DOCS
    dark_mode_baseline
    RU/EN
    menu_baseline