Виджет 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().