どうも、ちょげ(@chogetarou)です。
TabBarのインデックスを取得する方法を紹介します。
方法

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)),
],
),
),
),
);
}
}
コメント