首页 > 解决方案 > 如何设置状态()而不是重建 TabBarView 中的选项卡

问题描述

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

标签: flutterdartflutter-layoutsetstate

解决方案


如果对于繁重的任务意味着未来,你应该把它放在initState.

看到这个答案:如何在 Flutter 中只加载一次异步流?.


推荐阅读