Comment trouver l’index TabController dans Flutter ?


Avatar de Pierre Courtois

Connaître l’index du TabController actif dans votre application, peut parfois s’avérer utile pour changer l’état de certains de vos widgets, telle que la couleur du bouton de la page active. Dans ce guide, je vous explique comment faire pour le trouver et le stocker dans une variable réutilisable.


Trouver index tabcontroller flutter

Trouver l’index d’un TabController dans Flutter

Connaître l’index du TabController sur lequel a cliqué un utilisateur peut parfois être utile. Par exemple, vous pourriez en avoir besoin pour changer la couleur ou la forme de l’icon actif.

Pour cela, on va ajouter un listener à notre TabController, pour detecter un changement d’onglet et dans le même temps garder l’index de celui-ci dans une variable de type int.

Voici un exemple très simple que vous pouvez réutiliser pour votre propre application :

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(home: TabControllerExample()));

class TabControllerExample extends StatefulWidget {
  @override
  _TabControllerExampleState createState() => _TabControllerExampleState();
}

class _TabControllerExampleState extends State<TabControllerExample>
    with SingleTickerProviderStateMixin {
  TabController? _tabController;
  int _activeIndex = 0;

  @override
  void initState() {
    super.initState();
    // Initialiser le TabController
    _tabController = TabController(vsync: this, length: 3);
    _tabController!.addListener(() {
      setState(() {
        _activeIndex = _tabController!.index;
        print("L'index est actuellement $_activeIndex");
      });
    });
  }

  @override
  void dispose() {
    _tabController?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Exemple TabController'),
        bottom: TabBar(
          controller: _tabController,
          tabs: [
            Tab(
                icon:
                    Icon(_activeIndex == 0 ? Icons.home : Icons.home_outlined)),
            Tab(
                icon: Icon(
                    _activeIndex == 1 ? Icons.search : Icons.search_outlined)),
            Tab(
                icon: Icon(_activeIndex == 2
                    ? Icons.settings
                    : Icons.settings_outlined)),
          ],
        ),
      ),
      body: TabBarView(
        controller: _tabController,
        children: [
          Center(child: Text('Page Accueil')),
          Center(child: Text('Page Recherche')),
          Center(child: Text('Page Paramètres')),
        ],
      ),
    );
  }
}
Avatar de Pierre Courtois