Реагируем на ввод
Часть раздела Добавляем интерактивность путешествия по Flutter на Coddy. Урок 23 из 34.
Поле может сообщать тебе каждый раз, когда его текст меняется. Укажи для него onChanged: — функцию, которая получает весь текст в его текущем виде:
TextField(
onChanged: (String value) {
print(value);
},
)Введи Ada, и эта функция выведет текст три раза: A, Ad, Ada. (String value) — это параметр, как и в разделе «Функции с параметрами»: поле вызывает твою функцию и передаёт ей свой текст.
Чтобы показывать текст в другом месте экрана, храни его в State и изменяй с помощью setState — так же, как кнопка изменяет счётчик:
onChanged: (String value) {
setState(() {
_name = value;
});
},Задание
ЛегкоСделай так, чтобы приветствие обновлялось вслед за полем: когда ты вводишь имя, Hello, stranger! превращается в Hello, Ada!. Сохраняй текст в _name из onChanged.
Попробуйте сами
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 _name = 'stranger';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Greeter')),
body: Padding(
padding: const EdgeInsets.all(24),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
decoration: const InputDecoration(
labelText: 'Your name',
border: OutlineInputBorder(),
),
),
const SizedBox(height: 24),
Text('Hello, $_name!', style: const TextStyle(fontSize: 24)),
],
),
),
);
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Добавляем интерактивность
1Кнопки
Ваша первая кнопкаВывод в консольТекстовые и контурные кнопкиКнопки с иконкамиПлавающая кнопка действия7Переключатели и ползунки
Включаем и выключаем переключателемОтмечаем флажокВыбираем значение ползунком3Виджеты с состоянием
Свой класс виджетаПоказать SnackBarsetState перерисовывает экранСоздание StatefulWidgetСчётчик вверх и внизHot Reload сохраняет состояние6Текстовые поля
Ваше первое текстовое полеРеагируем на вводЧитаем поле с помощью ControllerЧисла из текстового поляДесятичные числа с toStringAsFixedПотренируйтесь самостоятельно: Онлайн-компилятор Flutter