<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>FlutterStack</title><author><name>FlutterStack</name></author><id>https://teletype.in/atom/flutterstack</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/flutterstack?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@flutterstack?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=flutterstack"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/flutterstack?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-05T14:59:02.401Z</updated><entry><id>flutterstack:UbGMW2dBXKN</id><link rel="alternate" type="text/html" href="https://teletype.in/@flutterstack/UbGMW2dBXKN?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=flutterstack"></link><title>Создание формы с валидацией</title><published>2023-08-06T16:11:21.587Z</published><updated>2023-08-06T16:11:21.587Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/2b/89/2b89c29e-8543-49f9-b5c8-31e1aa93874f.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--nDTvozHt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4wcpgnvc31arrkmguwo8.jpg&quot;&gt;Приложения часто требуют от пользователей ввода информации в текстовое поле. Например, для входа в систему требуется ввести адрес электронной почты и пароль.</summary><content type="html">
  &lt;figure id=&quot;Atom&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--nDTvozHt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4wcpgnvc31arrkmguwo8.jpg&quot; width=&quot;880&quot; /&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://t.me/f1utterstack&quot; target=&quot;_blank&quot;&gt;FlutterStack&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;LA9M&quot;&gt;Приложения часто требуют от пользователей ввода информации в текстовое поле. Например, для входа в систему требуется ввести адрес электронной почты и пароль.&lt;/p&gt;
  &lt;p id=&quot;Cvqz&quot;&gt;Чтобы сделать приложения безопасными и удобными в использовании, необходимо проверять правильность введенной пользователем информации. Если пользователь правильно заполнил форму, следует обработать информацию. Если пользователь отправил неверную информацию, необходимо вывести на экран сообщение об ошибке.&lt;/p&gt;
  &lt;p id=&quot;epBp&quot;&gt;В этом примере мы узнаем, как добавить проверку в форму с одним текстовым полем, выполнив следующие действия:&lt;/p&gt;
  &lt;ol id=&quot;iOlS&quot;&gt;
    &lt;li id=&quot;6kGi&quot;&gt;Создать форму с глобальным ключом.&lt;/li&gt;
    &lt;li id=&quot;000e&quot;&gt;Добавьте текстовое поле TextFormField с логикой валидации.&lt;/li&gt;
    &lt;li id=&quot;pNnc&quot;&gt;Создать кнопку для проверки и отправки формы.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;bxFd&quot;&gt;&lt;strong&gt;1. Создание формы с глобальным ключом&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;NMeD&quot;&gt;Во-первых, создадим форму. Виджет Form выступает в качестве контейнера для группировки и проверки нескольких полей формы.&lt;/p&gt;
  &lt;p id=&quot;mKHu&quot;&gt;При создании формы необходимо указать GlobalKey. Он уникально идентифицирует форму и позволяет выполнить ее проверку на следующем этапе.&lt;/p&gt;
  &lt;pre id=&quot;qCkd&quot; data-lang=&quot;dart&quot;&gt;import &amp;#x27;package:flutter/material.dart&amp;#x27;;

// Define a custom Form widget.
class MyCustomForm extends StatefulWidget {
  const MyCustomForm({super.key});

  @override
  MyCustomFormState createState() {
    return MyCustomFormState();
  }
}

// Define a corresponding State class.
// This class holds data related to the form.
class MyCustomFormState extends State&amp;lt;MyCustomForm&amp;gt; {
  // Create a global key that uniquely identifies the Form widget
  // and allows validation of the form.
  //
  // Note: This is a &amp;#x60;GlobalKey&amp;lt;FormState&amp;gt;&amp;#x60;,
  // not a GlobalKey&amp;lt;MyCustomFormState&amp;gt;.
  final _formKey = GlobalKey&amp;lt;FormState&amp;gt;();

  @override
  Widget build(BuildContext context) {
    // Build a Form widget using the _formKey created above.
    return Form(
      key: _formKey,
      child: const Column(
        children: &amp;lt;Widget&amp;gt;[
          // Add TextFormFields and ElevatedButton here.
        ],
      ),
    );
  }
}&lt;/pre&gt;
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;8qtJ&quot;&gt;&lt;strong&gt;Совет:&lt;/strong&gt; Использование глобального ключа является рекомендуемым способом обращения к форме. Однако если у вас более сложное дерево виджетов, то для доступа к форме внутри вложенных виджетов можно использовать метод Form.of().&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;ivKL&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;qlXF&quot;&gt;&lt;strong&gt;2. Добавление поля TextFormField с логикой валидации&lt;/strong&gt;&lt;br /&gt;Хотя форма уже создана, в ней нет возможности для ввода текста. Для этого необходимо создать текстовое поле TextFormField. Виджет TextFormField отображает текстовое поле с материальным дизайном и может отображать ошибки валидации при их возникновении.&lt;/p&gt;
  &lt;p id=&quot;yrkt&quot;&gt;Для проверки вводимых данных в TextFormField используется функция validator(). Если вводимые пользователем данные не являются валидными, функция validator возвращает строку, содержащую сообщение об ошибке. Если ошибок нет, то валидатор должен возвращать null.&lt;/p&gt;
  &lt;p id=&quot;6RH1&quot;&gt;Для данного примера создадим валидатор, который будет проверять, не пусто ли поле TextFormField. Если оно пустое, то возвращает сообщение об ошибке в дружественной форме.&lt;/p&gt;
  &lt;pre id=&quot;sXhh&quot; data-lang=&quot;dart&quot;&gt;TextFormField(
  // The validator receives the text that the user has entered.
  validator: (value) {
    if (value == null || value.isEmpty) {
      return &amp;#x27;Please enter some text&amp;#x27;;
    }
    return null;
  },
),&lt;/pre&gt;
  &lt;p id=&quot;6H0M&quot;&gt;&lt;strong&gt;3. Создание кнопки для проверки и отправки формы&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;2eYK&quot;&gt;Теперь, когда у вас есть форма с текстовым полем, необходимо создать кнопку, на которую пользователь может нажать для отправки информации.&lt;/p&gt;
  &lt;p id=&quot;8AEl&quot;&gt;Когда пользователь попытается отправить форму, следует проверить, является ли форма действительной. Если она действительна, то выводится сообщение об успешном завершении. Если нет, выводится сообщение об ошибке.&lt;/p&gt;
  &lt;pre id=&quot;8Eg8&quot; data-lang=&quot;dart&quot;&gt;ElevatedButton(
  onPressed: () {
    // Validate returns true if the form is valid, or false otherwise.
    if (_formKey.currentState!.validate()) {
      // If the form is valid, display a snackbar. In the real world,
      // you&amp;#x27;d often call a server or save the information in a database.
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text(&amp;#x27;Processing Data&amp;#x27;)),
      );
    }
  },
  child: const Text(&amp;#x27;Submit&amp;#x27;),
),&lt;/pre&gt;
  &lt;h3 id=&quot;5kL6&quot;&gt;Как это работает?&lt;/h3&gt;
  &lt;p id=&quot;U8MC&quot;&gt;Для валидации формы используется ключ _formKey, созданный на первом этапе. С помощью метода _formKey.currentState() можно получить доступ к классу FormState, который автоматически создается Flutter при построении формы.&lt;/p&gt;
  &lt;p id=&quot;eX4h&quot;&gt;Класс FormState содержит метод validate(). Когда вызывается метод validate(), он запускает функцию validator() для каждого текстового поля формы. Если все в порядке, то метод validate() возвращает значение true. Если какое-либо текстовое поле содержит ошибки, метод validate() перестраивает форму для отображения сообщений об ошибках и возвращает false.&lt;/p&gt;

</content></entry></feed>