从选项卡0导航到选项卡2时,Flutter DefaultTabController在动画期间意外初始化窗口小部件

时间:2019-04-08 15:17:35

标签: dart flutter tabs tabcontrol

我正在使用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

0 个答案:

没有答案