Спросите помощника
0/400
Вопрос обрабатывается ИИ-сервисом и сохраняется для улучшения ответов. Не вводите персональные данные.

    TextFormField

    Текстовое поле ввода с поддержкой валидации и отправки формы. Интегрируется с компонентом 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 — кнопка для отправки формы
    menu_baseline