Dart 如何检测到TabBarView刚刚被拖动?
TabBar小部件有一个onTap()回调,允许检测用户何时刚刚按下选项卡。这非常有用,这样我们就可以准备新的选项卡视图来显示一些动态数据 TabBar小部件还具有拖动功能,允许更改显示的tabView(与点击另一个选项卡的结果类似)。但在本例中,似乎无法准备新的选项卡视图,因为没有onDrag()回调 所以问题是:有没有一种方法可以检测到TabBarView刚刚被拖动?您可以使用并添加一个侦听器来观察更改。它适用于点击和拖动事件/动作 您可以这样做:Dart 如何检测到TabBarView刚刚被拖动?,dart,flutter,Dart,Flutter,TabBar小部件有一个onTap()回调,允许检测用户何时刚刚按下选项卡。这非常有用,这样我们就可以准备新的选项卡视图来显示一些动态数据 TabBar小部件还具有拖动功能,允许更改显示的tabView(与点击另一个选项卡的结果类似)。但在本例中,似乎无法准备新的选项卡视图,因为没有onDrag()回调 所以问题是:有没有一种方法可以检测到TabBarView刚刚被拖动?您可以使用并添加一个侦听器来观察更改。它适用于点击和拖动事件/动作 您可以这样做: _tabController.addLis
_tabController.addListener(() {
print("${_tabController.index}");
});
我发现这个解决方案可以区分点击新标签和滑动到新标签事件 这看起来很尴尬,但很有效。遗憾的是,无法检测到刷卡的开始
@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();
}
以前的答案只考虑用户完成拖动。 如果您需要监听更精确的数据(即用户刚刚开始拖动),您可以监听动画:
_tabController.animation.addListener(() => print(_tabController.animation.value.toString));
这是我的解决方案
if (_tabController.indexIsChanging ||
(_tabController.animation.value == _tabController.index)) {
print(_tabController.index);
Provider.of<OrderScreenProvider>(context, listen: false).onIndexChangeResetAccountInfo();
}
if(_tabController.indexIsChanging | |
(_tabController.animation.value==_tabController.index)){
打印(tabController.index);
Provider.of(context,listen:false).onIndexChangeResetAccountInfo();
}
就我而言;在我将tabcontroller设置为TabView控制器之前,tab drag更改不能使用tabcontroller处理
这样处理,
void _handleTabSelection() {
if (_tabController.indexIsChanging || _tabController.index != _tabController.previousIndex) {
setState(() {
_selectedTab = _tabController.index;
});
}
}
并设定它
TabBarView(
controller: _tabController,
...
TabBar(
controller: _tabController,
...
它同时检测标签点击和滑动。我需要区分它们。点击或拖动时,您真的需要执行不同的操作吗?如果您需要禁用其中一个选项卡,请注意,我需要对它们进行不同的处理,因为拖动会在选项卡控制器上生成两个事件(一个用于拖动开始,另一个用于拖动结束)。在我的事件处理程序中,我需要加载(只加载一次)新tabView的元素。顺便说一句,您已经将第二个处理程序重命名为onTabDrag,因为它实际上执行不同的操作