111

是否可以让 ListView 只能使用 ScrollController 而不能使用触摸屏滚动?

4

7 回答 7

204

如评论中所述,NeverScrollableScrollPhysics 类将执行此操作:

NeverScrollableScrollPhysics 类

不允许用户滚动的滚动物理。

于 2018-05-26T16:10:35.977 回答
188

在 ListView 小部件内,使用

physics: const NeverScrollableScrollPhysics()
于 2018-07-16T17:27:56.647 回答
39

您可以primary: false在 ListView Widget中添加

默认匹配平台约定。此外,如果primary为false,那么如果没有足够的内容滚动,用户将无法滚动,而如果primary为true,他们总是可以尝试滚动。

更多信息,请查看官方文档

于 2019-08-28T06:23:53.330 回答
15

启用和禁用滚动视图的条件语句。

physics: chckSwitch ? const  NeverScrollableScrollPhysics() : const AlwaysScrollableScrollPhysics(),
于 2019-11-19T07:40:43.067 回答
9

为我工作

 ListView.builder(
    scrollDirection: Axis.vertical,
    shrinkWrap: true,
    physics: const ClampingScrollPhysics(),
...
于 2020-11-29T02:08:22.427 回答
2

NestedScrollView 呢?

            bottomNavigationBar: _buildBottomAppBar(),
            body: Container(
              child: NestedScrollView(
                physics: NeverScrollableScrollPhysics(),
                controller: _scrollViewController,
                headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
                  return <Widget>[
                    buildSliverAppBar(innerBoxIsScrolled),
                  ];
                },
                body: _buildBody(context),
              ),
            ),
          );

它对我有用

于 2021-03-18T16:53:02.630 回答
0

您可以通过两种方式实现此目的

  1. 如果您只想禁用整个屏幕滚动

    然后解决方案是将其包装ListView在一个IgnorePointer小部件中。

  2. 你也可以只在你ListView喜欢的时候禁用滚动

    在 ListView 上设置shrinkWrap: trueandprimary: true属性,这将禁用滚动:

    ListView(
      shrinkWrap: true,
      primary: true,
    
于 2022-01-24T03:35:35.470 回答