我正在使用DefaultTabController管理3个选项卡。默认选项卡控制器的设置如下:
DefaultTabController(
length: 3,
initialIndex: 1,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Material(
type: MaterialType.canvas,
elevation: 1.0,
child: Container(
color: Color(0xFFe3f2fd),
child: TabBar(tabs: [Tab(text: 'ACTIVITY'), Tab(text: 'LEADERBOARD',) ,Tab(text: 'SETTINGS',)
],
labelColor: Theme.of(context).primaryColor,
indicatorColor: Theme.of(context).primaryColor,
labelPadding: EdgeInsets.all(0.0),
labelStyle: TextStyle(fontWeight: FontWeight.bold, fontFamily: 'Montserrat'),
indicatorPadding: EdgeInsets.symmetric(horizontal: 20.0),
),
),
),
Expanded(
child: Container(
child: TabBarView(
children: [
ActivityTab(),
LeaderBoardTab(),
SettingsTab(rebuildLeaderBoard: refreshLeaderBoard,),
]),
),
)
],
),
);
从选项卡0导航到2或从2导航到0时,我遇到setState错误。通过测试,我发现了两个意外行为:
1)从ActivityTab()导航到SettingsTab()(从0到2)时,正在初始化LeaderboardTab(),然后进行处理。这会导致setState错误。
2)在相同的导航过程中,我发现离开标签页时,第一件事就是初始化我要离开的标签页,从而导致另一个setState错误。
仅向左或向右移动1个标签时,不会发生这种奇怪的功能。仅在两个选项卡上移动时才会发生。我在这里找到了一些线索:https://github.com/flutter/flutter/issues/13848,但此讨论似乎解决了我没有遇到过的轻击与轻击行为问题。
我只是在新项目中重建了项目的这一部分,然后将打印语句放在initState中并进行处理。这是从选项卡0移至选项卡2时吐出的东西。
flutter: INIT TAB ZERO
flutter: DISPOSE TAB ZERO
flutter: INIT TAB TWO
flutter: INIT TAB ONE
flutter: DISPOSE TAB ZERO
flutter: DISPOSE TAB ONE