如何检测 TabBarView 刚刚被拖动?

ont*_*oon 2 dart flutter

TabBar 小部件有一个 onTap() 回调,它允许检测用户何时刚刚按下了一个选项卡。这很有用,因此我们可以准备新的 tabView 来显示一些动态数据。

TabBar 小部件还有一个拖动功能,允许更改显示的 tabView(类似于点击另一个选项卡的结果)。但在这种情况下,似乎没有办法准备新的 TabView,因为没有 onDrag() 回调。

所以问题是:有没有办法检测到 TabBarView 刚刚被拖动?

ont*_*oon 7

我发现这个解决方案可以区分点击新标签和滑动到新标签事件。

它看起来很尴尬,但它正在工作。遗憾的是,无法检测到滑动的开始。

@override
  void initState() {
    print("FB:X _HNPageState:initState()");
    _tabController = TabController(vsync: this, length: _myTabs.length);
    _tabController.addListener(() {
      if (_tabController.indexIsChanging)
        // Tab Changed tapping on new tab
       onTabTap();
      else if(_tabController.index != _tabController.previousIndex)
        // Tab Changed swiping to a new tab
        onTabDrag();
    });
    super.initState();
  }
Run Code Online (Sandbox Code Playgroud)


Dan*_*cia 7

这对我有用:

int _tab = 0;

@override
void initState() {
 super.initState();

 _tabController = TabController(
  length: _tabs.length, 
  vsync: this
 );

 _tabController.animation!.addListener(_tabListener);
}

void _tabListener(){
 if(_tab != _tabController.animation!.value.round()){
  setState(() {
   _tab = _tabController.animation!.value.round();
  });
 }
}
Run Code Online (Sandbox Code Playgroud)


Але*_*бич 6

以前的答案仅考虑用户何时完成拖动。

如果您需要监听更准确的数据(即用户刚刚开始拖动),您可以监听动画:

_tabController.animation.addListener(() => print(_tabController.animation.value.toString));
Run Code Online (Sandbox Code Playgroud)


sie*_*ega 4

您可以使用TabController并添加侦听器来观察更改。它适用于点击和拖动事件/操作。

你可以这样做:

_tabController.addListener(() {
    print("${_tabController.index}");
});
Run Code Online (Sandbox Code Playgroud)

  • 点击或拖动时您真的需要执行不同的操作吗? (2认同)