如何检测到TabBarView刚刚被拖动?

时间:2019-04-18 08:40:13

标签: dart flutter

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

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

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

5 个答案:

答案 0 :(得分:2)

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

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

_tabController.animation.addListener(() => print(_tabController.animation.value.toString));

答案 1 :(得分:1)

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

您可以执行以下操作:

_tabController.addListener(() {
    print("${_tabController.index}");
});

答案 2 :(得分:1)

这是我的解决方案;

 if (_tabController.indexIsChanging || 
    (_tabController.animation.value == _tabController.index)) {
  print(_tabController.index);

  Provider.of<OrderScreenProvider>(context, listen: false).onIndexChangeResetAccountInfo();
}

答案 3 :(得分:0)

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

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

@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();
  }

答案 4 :(得分:0)

就我而言;在我将其设置为TabView控制器之前,无法使用tabcontroller处理制表符拖动更改。

这样处理;

void _handleTabSelection() {
    if (_tabController.indexIsChanging || _tabController.index != _tabController.previousIndex) {
      setState(() {
        _selectedTab = _tabController.index;
      });
    }
  }

并设置它;

TabBarView(
   controller: _tabController,
   ...



TabBar(
      controller: _tabController,
    ...