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

Виджет Form и ключ FormState в Flutter

Несколько полей на одном экране удобно объединять виджетом Form. Он не рисует рамку сам по себе - это контейнер, который связывает потомков, например TextFormField и позже позволит проверить их одним вызовом.

К Form привязывают ключ GlobalKey<FormState>. Его объявляют полем в State: final _formKey = GlobalKey<FormState>(). Через _formKey.currentState обращаются к состоянию формы; проверку разберём в следующем уроке:

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 nameController = TextEditingController(); @override void dispose() { nameController.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( // validators need TextFormField controller: nameController, decoration: const InputDecoration( labelText: 'Name', border: OutlineInputBorder(), ), ), const SizedBox(height: 16), ElevatedButton( onPressed: () { debugPrint('Form is ready'); }, child: const Text('Next'), ), ], ), ), ), ); } }

Оберните два TextFormField ('Phone' и 'Comment') в Form с GlobalKey<FormState>. Валидаторов нет. Кнопка по нажатию пишет в консоль 'Form is ready' и не вызывает validate().

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