Валидатор TextFormField в Flutter
Проверку ввода задают параметром validator
у TextFormField
внутри Form.
Flutter вызывает функцию и ждёт результат:
null - всё верно, непустая
строка - сообщение об ошибке под полем.
Сам validator не бегает на каждый
символ. Его вызывает
formKey.currentState!.validate(),
в примере - по кнопке «Проверить».
Сейчас достаточно правила «поле не пустое»:
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>();
@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(
decoration: const InputDecoration(
labelText: 'Name',
border: OutlineInputBorder(),
),
validator: (value) {
if (value == null || value.trim().isEmpty) { // spaces-only is empty
return 'Enter a name';
}
return null;
},
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
formKey.currentState!.validate();
},
child: const Text('Check'),
),
],
),
),
),
);
}
}
Добавьте TextFormField 'City'
с валидатором: если пусто - строка
'Enter a city'. Кнопка
'Check' вызывает
validate() на ключе формы.