Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗flPmFdCt 72 of 125 menu
◀ ▶

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().

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить