Menu
CoddyTech

Реагируем на ввод

Часть раздела Добавляем интерактивность путешествия по 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;
  });
},
challenge icon

Задание

Легко

Сделай так, чтобы приветствие обновлялось вслед за полем: когда ты вводишь имя, 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)),
          ],
        ),
      ),
    );
  }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Добавляем интерактивность

Потренируйтесь самостоятельно: Онлайн-компилятор Flutter