どうも、ちょげ(@chogetarou)です。
TabBarのインデックスが切り替わる際に処理をする方法を紹介します。
方法

TabBarのインデックスが切り替わる際に処理をするには、TabControllerを使います。
まず、TabControllerの変数を用意します。
次に、TabControllerのaddListenerにインデックスが切り替わる際の処理を指定します。
class _MyHomePageState extends State<MyHomePage>
with SingleTickerProviderStateMixin {
TabController? _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(vsync: this, length: /*タブの長さ*/);
_tabController!.addListener(() {
//インデックスが切り替わる際の処理
});
}
@override
void dispose() {
_tabController?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(・・・);
}
}
最後に、TabBarの引数「controller」に用意したTabControllerの変数を指定します。
TabBar(
controller: _tabController,
tabs: [
・・・
],
),
TabControllerを使うことで、TabBarのインデックスが切り替わる際に処理をすることが出来ます。
使用例
以下は、使用例です。
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 = TabController(vsync: this, length: 3);
_tabController!.addListener(() {
setState(() {
_currentIndex = _tabController!.index;
});
});
}
@override
void dispose() {
_tabController?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Center(
child: Text('Index : $_currentIndex'),
),
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)),
],
),
),
),
);
}
}
コメント