You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter 2.5更新后横向ListView移动端可滚动但Web端无法滚动

Flutter 2.5+ Web端水平ListView无法滚动解决方案

Flutter 2.5版本对Web、桌面端的默认滚动行为做了调整,默认仅允许触摸、触控板设备触发滚动,鼠标拖拽滚动被从默认支持的设备类型中移除,这是导致你移动端正常、Web端无法滚动的核心原因,可通过以下两种方案解决:

  • 方案1:局部配置滚动行为(仅针对当前ListView生效)
    首先自定义滚动行为类,重写支持的拖拽设备类型:
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';

class CustomScrollBehavior extends MaterialScrollBehavior {
  @override
  Set<PointerDeviceKind> get dragDevices => {
    PointerDeviceKind.touch,
    PointerDeviceKind.mouse,
    PointerDeviceKind.trackpad,
  };
}

然后在你现有代码的外层包裹ScrollConfiguration组件即可,原有ListView的逻辑不需要修改:

return ScrollConfiguration(
  behavior: CustomScrollBehavior(),
  child: SizedBox(
    height: 400,
    child: ListView.builder(
      physics: ClampingScrollPhysics(),
      scrollDirection: Axis.horizontal,
      itemCount: items == null ? 0 : items.length,
      itemBuilder: (context, index) {
        // 原有itemBuilder逻辑保持不变
      },
    ),
  ),
);
  • 方案2:全局配置滚动行为(整个应用所有滚动组件生效)
    直接在MaterialApp的初始化参数中配置自定义的滚动行为,不需要修改每个滚动组件的代码:
MaterialApp(
  scrollBehavior: CustomScrollBehavior(),
  // 其他原有配置:title、theme、home等保持不变
)

如果调整后仍有问题,可检查physics参数是否被意外设置为NeverScrollableScrollPhysics,或者子组件是否存在水平手势冲突,你现有代码中的GestureDetector仅监听onTap事件,不会触发水平滚动冲突,无需调整。

内容的提问来源于stack exchange,提问作者beynelmilel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:27:00