Menu
CoddyTech

Odczytywanie pola za pomocą kontrolera

Część sekcji Dodajemy interaktywność ścieżki Flutter w Coddy. Lekcja 24 z 34.

onChanged reaguje na każdą literę. Często chcesz pobrać tekst dopiero po naciśnięciu przycisku, takiego jak Add lub Send. W tym celu przekaż polu controller:

final TextEditingController _controller = TextEditingController();

TextField(controller: _controller)

Kontroler znajduje się w State, obok pozostałych zmiennych. Jest final, ponieważ zawsze jest to ten sam kontroler; zmienia się tylko tekst w jego wnętrzu. _controller.text to aktualna zawartość pola, a _controller.clear() je opróżnia.

void _send() {
  print(_controller.text);
  _controller.clear();
}

Kontroler należy usunąć, gdy znika jego ekran. Do tego służy dispose: Flutter wywołuje tę metodę, gdy State przestaje istnieć.

@override
void dispose() {
  _controller.dispose();
  super.dispose();
}
challenge icon

Wyzwanie

Średni
  • Dodaj do State element final TextEditingController _controller i przekaż go do pola za pomocą controller:.
  • Spraw, aby _add wyświetlało tekst z pola jako Last added: Buy milk, a następnie opróżniało pole.
  • Dodaj metodę dispose z części teoretycznej.

Spróbuj swoich sił

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)),
          ],
        ),
      ),
    );
  }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Dodajemy interaktywność

Poćwicz samodzielnie: Kompilator Flutter online