TextEditingController для поля в Flutter
Когда текст нужно прочитать по кнопке,
очистить программно или подставить значение,
удобнее TextEditingController.
Он хранит текущую строку поля; у
TextField
его передают в controller.
Контроллер создают в initState
класса State
и обязательно вызывают dispose
на нём в dispose состояния. Иначе
утечёт память и слушатели останутся
привязаны к уничтоженному виджету:
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> {
late final TextEditingController nameController;
@override
void initState() {
super.initState();
nameController = TextEditingController();
}
@override
void dispose() {
nameController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
TextField(
controller: nameController,
decoration: const InputDecoration(
labelText: 'Name',
border: OutlineInputBorder(),
),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
final text = nameController.text;
debugPrint('Name: $text');
},
child: const Text('Print to console'),
),
],
),
),
);
}
}
Добавьте поле 'Note'. Контроллер
создайте в State. Кнопка
'Print to console' выводит
controller.text через
debugPrint. В dispose
состояния вызовите
controller.dispose().