Читаем поле с помощью Controller
Часть раздела Добавляем интерактивность путешествия по Flutter на Coddy. Урок 24 из 34.
onChanged реагирует на каждую букву. Часто текст нужен только после нажатия кнопки, например «Добавить» или «Отправить». Для этого передай полю контроллер:
final TextEditingController _controller = TextEditingController();
TextField(controller: _controller)Контроллер хранится в State рядом с другими переменными. Он final, потому что сам контроллер всегда один и тот же; меняется только текст внутри него. _controller.text — это текущее содержимое поля, а _controller.clear() очищает его.
void _send() {
print(_controller.text);
_controller.clear();
}Контроллер следует освобождать, когда экран закрывается. Для этого нужен dispose: Flutter вызывает его, когда State уничтожается.
@override
void dispose() {
_controller.dispose();
super.dispose();
}Задание
Средне- Добавь
final TextEditingController _controllerв State и передай его полю с помощьюcontroller:. - Сделай так, чтобы
_addотображал текст поля какLast added: Buy milk, а затем очищал поле. - Добавь метод
disposeиз теории.
Попробуйте сами
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String _last = 'nothing';
void _add() {}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Tasks')),
body: Padding(
padding: const EdgeInsets.all(24),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
decoration: const InputDecoration(
labelText: 'New task',
border: OutlineInputBorder(),
),
),
const SizedBox(height: 12),
ElevatedButton(onPressed: _add, child: const Text('Add')),
const SizedBox(height: 24),
Text('Last added: $_last', style: const TextStyle(fontSize: 20)),
],
),
),
);
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Добавляем интерактивность
1Кнопки
Ваша первая кнопкаВывод в консольТекстовые и контурные кнопкиКнопки с иконкамиПлавающая кнопка действия7Переключатели и ползунки
Включаем и выключаем переключателемОтмечаем флажокВыбираем значение ползунком3Виджеты с состоянием
Свой класс виджетаПоказать SnackBarsetState перерисовывает экранСоздание StatefulWidgetСчётчик вверх и внизHot Reload сохраняет состояние6Текстовые поля
Ваше первое текстовое полеРеагируем на вводЧитаем поле с помощью ControllerЧисла из текстового поляДесятичные числа с toStringAsFixedПотренируйтесь самостоятельно: Онлайн-компилятор Flutter