Sobes.tech
Middle

À quoi servent les contrôleurs de widgets dans Flutter?

sobes.tech IA

Réponse de l'IA

Les contrôleurs de widgets dans Flutter sont utilisés pour gérer l’état ou le comportement d’un widget spécifique depuis l’extérieur, ainsi que pour interagir avec lui.

Objectifs principaux d’utilisation:

  • Gestion programmée: Modifier les propriétés du widget (par exemple, défilement de liste, contrôle du curseur dans un champ de texte) sans interaction directe de l’utilisateur.
  • Obtention d’informations: Lire l’état actuel du widget (par exemple, position de défilement actuelle, texte saisi).
  • Réaction aux événements: Effectuer des actions liées au widget en réponse à des événements dans d’autres parties de l’application.

Exemples de contrôleurs populaires:

  • TextEditingController: Gestion des champs de texte (TextField, TextFormField). Permet d’obtenir et de définir du texte, de gérer la sélection et la position du curseur.
    final myController = TextEditingController();
    
    // Obtenir le texte du champ
    final text = myController.text;
    
    // Définir le texte dans le champ
    myController.text = 'Nouveau texte';
    
  • ScrollController: Gestion des widgets défilables (ListView, GridView, SingleChildScrollView). Permet de faire défiler programmatiquement, d’obtenir la position actuelle de défilement et d’écouter les événements de défilement.
    final myScrollController = ScrollController();
    
    // Défilement vers le début
    myScrollController.animateTo(
      0,
      duration: Duration(milliseconds: 500),
      curve: Curves.easeOut,
    );
    
    // Obtenir la position de défilement actuelle
    final position = myScrollController.position.pixels;
    
  • PageController: Gestion des widgets de pages (PageView). Permet de changer de page, d’obtenir la page actuelle et d’écouter les événements de changement de page.
    final myPageController = PageController();
    
    // Passer à la page suivante
    myPageController.nextPage(
      duration: Duration(milliseconds: 300),
      curve: Curves.easeIn,
    );
    
    // Obtenir la page actuelle
    final currentPage = myPageController.page;
    

Les contrôleurs sont généralement passés au widget correspondant via son constructeur. La gestion du cycle de vie du contrôleur (création et suppression) doit être effectuée dans le widget qui l’utilise, souvent dans la méthode initState pour la création et dispose pour la suppression.

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(); // Il est important de libérer les ressources
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: _textController,
      // ... autres propriétés de TextField
    );
  }
}

L’utilisation de contrôleurs permet de séparer clairement la logique de gestion du widget de sa présentation.