[Flutter]TabBarのインデックスを取得するには?

Flutter

どうも、ちょげ(@chogetarou)です。

TabBarのインデックスを取得する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

TabBarのインデックスを取得するには、TabControllerを使います。

まず、TabControllerを用意します。

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage>
    with SingleTickerProviderStateMixin {

  TabController? _tabController;

  @override
  void initState() {
    super.initState();
    _tabController = new TabController(vsync: this, length: /*長さ*/);
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(・・・);
  }
}

次に、TabBaraの引数「controller」に用意したTabControllerを指定します。

TabBar(
  controller: _tabController,
  tabs: [
    ・・・
  ],
),

あとは、TabControllerの「indexプロパティ」にアクセスすることで、TabBarのインデックスを取得することが出来ます。

_tabController!.index; //indexプロパティにアクセス

使用例

以下は、使用例です。

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage>
    with SingleTickerProviderStateMixin {
  var _currentIndex = 0;
  TabController? _tabController;

  @override
  void initState() {
    super.initState();
    _tabController = new TabController(vsync: this, length: 3);
  }

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

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Text('Index : $_currentIndex'),
              SizedBox(
                height: 30.0,
              ),
              ElevatedButton(
                onPressed: () {
                  setState(() {
                    _currentIndex = _tabController!.index;
                  });
                },
                child: Text('GET'),
              ),
            ],
          ),
        ),
        bottomNavigationBar: Container(
          color: Colors.blue,
          child: TabBar(
            controller: _tabController,
            tabs: [
              Tab(icon: Icon(Icons.person)),
              Tab(icon: Icon(Icons.today)),
              Tab(icon: Icon(Icons.settings)),
            ],
          ),
        ),
      ),
    );
  }
}

コメント

タイトルとURLをコピーしました