如何setState()而不重建TabBarView中的选项卡

时间:2020-11-11 16:55:49

标签: flutter dart flutter-layout setstate

我有这个问题,我在主页上有标签。我喜欢在切换选项卡以使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;
}

1 个答案:

答案 0 :(得分:0)

如果对于繁重的任务而言,您意味着未来,则应将其放置在initState内。

查看此答案:How to load async Stream only one time in Flutter?