Flutter 如何在TabBarView中设置Tate()而不是重建选项卡
我有这个问题,我有一个主页,其中有标签。我喜欢切换选项卡以使Flutter 如何在TabBarView中设置Tate()而不是重建选项卡,flutter,dart,flutter-layout,setstate,Flutter,Dart,Flutter Layout,Setstate,我有这个问题,我有一个主页,其中有标签。我喜欢切换选项卡以使选项卡栏显示所选选项卡的黑色,并且我还想更改整个支架的颜色。因此,我还制作了一个自定义控制器,如下所示: TabController _controller; @override void initState() { super.initState(); _controller = TabController(vsync: this, length: 5); _controller.index = 1;
选项卡栏
显示所选选项卡的黑色,并且我还想更改整个支架的颜色。因此,我还制作了一个自定义控制器,如下所示:
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];
});
}
});
}
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;
}
问题是,以这种方式,我所有的标签都将被重建,这是非常糟糕的,因为我在其中很少有繁重的任务。
我还在所有选项卡中使用了automatickepaliveclientmixin
,但没有解决问题。顺便说一下,我是这样用的:
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];
});
}
});
}
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;
}
class Tab1扩展了StatefulWidget{
@凌驾
_Tab1State createState()=>Tab1State();
}
类_Tab1State使用AutomaticEpaLiveClientMixin扩展状态{
@凌驾
小部件构建(构建上下文){
super.build(上下文);
打印(“表1已生成”);
返回文本(“表1”);
}
@凌驾
//TODO:实现wantKeepAlive
bool get wantKeepAlive=>true;
}
如果繁重的任务意味着未来,则应将其放在initState
中
看看这个答案:。不,不是那样的。但重要的是不要重建TabBarView的所有选项卡如果选项卡是同一支架的不同主体,我不知道如何在不重建的情况下更改支架的颜色。为了保持选项卡的状态,我使用了IndexedStack。我的选项卡是不同的小部件。但是,是的,我们在同一个脚手架上,因为在AppBar里我有TabBar。所以是的。。。