使用两个TabBarView会导致各自的TabBar和TabBarView之间的同步问题

时间:2019-12-02 18:18:00

标签: flutter dart controller

我有一个屏幕,用户可以在其中选择一种模式(每天或每周),因此我使用两个TabBar和每个模式的两个TabBarView。在“每天模式”下时,将显示7天的TapBar(因此有7个选项卡),用户可以导航该栏以浏览一周中的几天。在“每周”模式下,有四个选项卡,持续四个星期。每个选项卡的TabBarView显示所选日期(或星期)的事件的ListView。这可以正常工作,并且TabBars也可以相应地切换。

问题在于,即使一次只有一个处于活动状态,两个TabBar似乎也会一起改变。例如,您从“每天”模式开始,然后向右轻扫以查看明天的事件。如果您随后选择“每周”模式,即使DefaultTabController中的initialIndex参数设置为上一个,它也会向右移动。

这全部在无状态小部件中,并且当选择模式时,DefaultTabController的参数(length和initialIndex)将相应地更改。这是它的结构:

Widget getTabBar {
    return _sharedValue == 0 ? buildDaysTabBar() : buildWeeksTabBar();

// buildDaysTabBar returns a simple TabBar with 7 tabs and buildWeeksTabBar a TabBar with 4 
// tabs
// _sharedValues is an attribute of the state that is set by the mode selector (0 for day, 
// 1 for week)

Widget build(BuildContext context) {
    return DefaultTabController(
        length: _tabLength,
        initialIndex: _tabInitialIdx,
        child: Scaffold(
            ...
            bottom: getTabBar(),
            body: getTabBarView(),
        )
    )
)

当用户选择一种模式时,_tabLength和_tabInitial更改为正确的值,并使用具有正确参数的DefaultTabController调用setState方法进行重建。

有人知道控制器为何即使使用正确的initialIndex参数进行重建时,似乎仍在两个TabBar上保持状态(左右移动时)? 非常感谢你们!

0 个答案:

没有答案