Sobes.tech
Middle

¿Para qué se utilizan los controladores de widgets en Flutter?

sobes.tech AI

Respuesta de la IA

Los controladores de widgets en Flutter se utilizan para gestionar el estado o comportamiento de un widget específico desde fuera, así como para interactuar con él.

Objetivos principales de uso:

  • Gestión programática: Cambiar las propiedades del widget (por ejemplo, desplazamiento de listas, control del cursor en un campo de texto) sin interacción directa del usuario.
  • Obtención de información: Leer el estado actual del widget (por ejemplo, posición de desplazamiento actual, texto ingresado).
  • Respuesta a eventos: Realizar acciones relacionadas con el widget en respuesta a eventos en otras partes de la aplicación.

Ejemplos de controladores populares:

  • TextEditingController: Gestión de campos de texto (TextField, TextFormField). Permite obtener y establecer texto, gestionar la selección y la posición del cursor.
    final myController = TextEditingController();
    
    // Obtener texto del campo
    final text = myController.text;
    
    // Establecer texto en el campo
    myController.text = 'Nuevo texto';
    
  • ScrollController: Gestión de widgets desplazables (ListView, GridView, SingleChildScrollView). Permite desplazarse programáticamente, obtener la posición actual de desplazamiento y escuchar eventos de desplazamiento.
    final myScrollController = ScrollController();
    
    // Desplazar al inicio
    myScrollController.animateTo(
      0,
      duration: Duration(milliseconds: 500),
      curve: Curves.easeOut,
    );
    
    // Obtener la posición actual de desplazamiento
    final position = myScrollController.position.pixels;
    
  • PageController: Gestión de widgets de páginas (PageView). Permite cambiar entre páginas, obtener la página actual y escuchar eventos de cambio de página.
    final myPageController = PageController();
    
    // Ir a la siguiente página
    myPageController.nextPage(
      duration: Duration(milliseconds: 300),
      curve: Curves.easeIn,
    );
    
    // Obtener la página actual
    final currentPage = myPageController.page;
    

Los controladores generalmente se pasan al widget correspondiente a través de su constructor. La gestión del ciclo de vida del controlador (creación y eliminación) debe realizarse en el widget que lo utiliza, a menudo en el método initState para crear y en dispose para eliminar.

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  late final TextEditingController _textController;

  @override
  void initState() {
    super.initState();
    _textController = TextEditingController();
  }

  @override
  void dispose() {
    _textController.dispose(); // Es importante liberar recursos
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: _textController,
      // ... otras propiedades de TextField
    );
  }
}

El uso de controladores permite separar claramente la lógica de gestión del widget de su presentación.