Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗flPmFdSb 83 of 125 menu
◀ ▶

Отправка формы после validate в Flutter

Типичный сценарий: пользователь нажимает «Сохранить», форма проверяет все TextFormField, и только при успехе код читает данные. Метод validate() у Form возвращает true, если каждый валидатор вернул null.

Ключ GlobalKey<FormState> хранят в State. Текст поля по-прежнему удобно брать из TextEditingController после успешной проверки - так не нужно дублировать строку в отдельной переменной:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: HomePage())); } class HomePage extends StatefulWidget { const HomePage({super.key}); @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { final formKey = GlobalKey<FormState>(); final emailController = TextEditingController(); String lastSaved = ''; @override void dispose() { emailController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: Padding( padding: const EdgeInsets.all(16), child: Form( key: formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ TextFormField( controller: emailController, decoration: const InputDecoration( labelText: 'Mail', border: OutlineInputBorder(), ), validator: (value) { if (value == null || value.trim().isEmpty) { return 'Enter email'; } return null; }, ), const SizedBox(height: 16), ElevatedButton( onPressed: () { final ok = formKey.currentState!.validate(); if (!ok) return; setState(() { lastSaved = emailController.text.trim(); }); }, child: const Text('Save'), ), const SizedBox(height: 16), Text('Saved: $lastSaved'), ], ), ), ), ); } }

Соберите форму с полем 'Last name', валидатором на пустую строку и кнопкой 'Send'. При успешной validate() выведите фамилию из controller.text в Text ниже кнопки.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить