Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在TabBarView中设置Tate()而不是重建选项卡_Flutter_Dart_Flutter Layout_Setstate - Fatal编程技术网

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。所以是的。。。