我有这个问题,我在主页上有标签。我喜欢在切换选项卡以使TabBar
显示为选中状态的选项卡时显示为黑色,并且我还想更改整个Scaffold
的颜色。因此,我还制作了一个自定义控制器,并像这样使用它:
TabController _controller;
@override
void initState() {
super.initState();
_controller = TabController(vsync: this, length: 5);
_controller.index = 1;
_controller.addListener(() {
if (!_controller.indexIsChanging) {
setState(() {
scaffoldColor = colors[_controller.index];
});
}
});
}
问题是,通过这种方式,我的所有选项卡都将被重建,这非常糟糕,因为我很少执行繁重的任务。
我还在所有选项卡中都使用过AutomaticKeepAliveClientMixin
,但是它不能解决问题。顺便说一下,我这样使用它:
class Tab1 extends StatefulWidget {
@override
_Tab1State createState() => _Tab1State();
}
class _Tab1State extends State<Tab1> with AutomaticKeepAliveClientMixin {
@override
Widget build(BuildContext context) {
super.build(context);
print("Tab 1 Has been built");
return Text("TAB 1");
}
@override
// TODO: implement wantKeepAlive
bool get wantKeepAlive => true;
}
答案 0 :(得分:0)
如果对于繁重的任务而言,您意味着未来,则应将其放置在initState
内。