flutter 未使用作为手势检测器抖动子级的列表视图调用手势检测器的onVerticalDragUpdate和onPanUpdate

but5z9lq  于 2023-03-13  发布在  Flutter
关注(0)|答案(1)|浏览(136)

我想开发一个应用程序,其中我使用TabBar,它由两个屏幕组成。在第一个屏幕中,我有一个ListView。我希望在向下滚动ListView时隐藏TabBar。并且在ListView向上滚动时显示出来。我使用GestureDetector作为ListView的父对象来检测用户是否向上和/或向下滚动。通过在线搜索,我发现使用onVerticalDragUpdateonPanUpdate可以检测上下垂直滚动,但是现在的问题是这些方法没有被调用!GestureDetector的其他方法比如onTap被调用了,我想原因是ListView吸收了垂直滚动,那么解决这个问题的方法是什么呢?您的帮助是非常感谢!!

**注意:**使用SliverAppBar并不能很好地符合我的要求。

下面是我的代码:

SafeArea(
        child: Stack(
          children: [
            TabBarView(
              controller: _controller,
              children: [
                GestureDetector(
                  onTap: () {
                    print('onTap called!');
                  },
                  onVerticalDragUpdate: (updates) {
                    print('onVerticalDragUpdate is called!');
                  },
                  onPanUpdate: (update) {
                    print('onPanUpdate is called!');
                  },
                  child: ListView.builder(
                    itemCount: 20,
                    itemBuilder: (ctx, index) => Card(
                      child: ListTile(
                        title: Text('Hi there! $index'),
                      ),
                    ),
                  ),
                ),
                Container(color: Colors.purpleAccent),
              ],
            ),
            Align(
              alignment: Alignment.topCenter,
              child: TabBar(
                controller: _controller,
                labelColor: Colors.black,
                indicator: UnderlineTabIndicator(
                  borderRadius: BorderRadius.circular(8),
                  borderSide: const BorderSide(
                    color: Colors.black,
                    width: 2,
                  ),
                  insets: const EdgeInsets.symmetric(horizontal: -8),
                ),
                indicatorSize: TabBarIndicatorSize.label,
                isScrollable: true,
                tabs: const [
                  Tab(
                    text: 'Social',
                    height: 36,
                  ),
                  Tab(
                    icon: Text('Videos'),
                    height: 36,
                  ),
                ],
              ),
            ),
          ],
        ),
      )

下面是输出:

kq4fsx7k

kq4fsx7k1#

试试这个

NotificationListener<ScrollNotification>(
   onNotification: (scrollNotification) {
       if (scrollNotification is UserScrollNotification) {
           ....
       }
       
       return false;
   },
   child: ... }

或者如果UserScrollNotification不适合您,请选择另一种ScrollNotification

相关问题