我有一个屏幕,用户可以在其中选择一种模式(每天或每周),因此我使用两个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上保持状态(左右移动时)? 非常感谢你们!