tabControllerをstatelessWidgetで使う方法
TabBarでtabControllerを使おうと思って公式ドキュメントを読んだが、
with TickerProviderStateMixinがstatefulWidgetでしか使えないためvsync:thisが利用できなかった。
TabBarの公式ドキュメント
しかしtabControllerの公式ドキュメントをよく見ると下の方にstatelessWidgetでもtabControllerを使う方法が記されていた。
tabControllerの公式ドキュメント
以下、ほとんど公式のコピペ↓
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: tabs.length,
child: Builder(builder: (BuildContext context) {
final TabController tabController = DefaultTabController.of(context)!;
tabController.addListener(() {
if (!tabController.indexIsChanging) {
//ここでcontrollerの値が変わった時の処理を書く。
}
});
return Scaffold();
このように、DefaultTabController()の中でadd.Listener()をすることで、controllerの値が変わった時に処理が走る。
最後に
そもそもtabControllerがstatefulWidgetでしか使えない、ということがなんとなくおかしいと推測するのが順当な考え方だと思った。おおもとを辿れば全てstelessWidgetなのでstatelessでも使えるはずということを前提におきつつ検索をかけにいくという姿勢が大事なのかな?と思った。