为什么Flutter ListTile onTap似乎已缓存?

时间:2019-01-29 13:12:13

标签: flutter

我的应用程序上有两个listview屏幕。用户可以使用BottomNavigationBar控件在它们之间导航。

在listview.builder函数上,我返回类似这样的内容

return ListView.builder(
                itemCount: snapshot.data.length,
                itemBuilder: (context, index) {
                  return ListTile(
                      title: Text('...'),
                      subtitle: Text('...'),
                      onTap:  () { 
                ...
                      }
                   )
                });  

我发现onTap处理程序似乎混在这两个列表视图之间。

当我打开第一个列表视图时,Flutter会提供正确的onTap,但是当我切换到第二个列表视图时,Flutter仍会提供第一个列表视图onTap。

似乎onTap被flutter缓存了(标题和字幕似乎还可以)。有想法吗?

示例源代码:https://github.com/jazarja/flutter_app

2 个答案:

答案 0 :(得分:0)

问题出在比较过渡值上。因为您首先要反转当前视图的动画过渡。

在您的 botton_nav.dart 中,更改此设置:

return aValue.compareTo(bValue);

对此:

return bValue.compareTo(aValue);

答案 1 :(得分:0)

是的,问题是在进行比较时动画尚未完成,因此堆栈顶部的窗口小部件始终在后面1个选项卡中。实际上,您根本不需要构建堆栈,只需将Center(child: _buildTransitionStack())的{​​{1}}替换为_navigationViews[_currentIndex].transition(_type, context),它应该可以工作。