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

ListView.builder 鼠标拖动无法滚动该如何解决?

问题原因
  • Flutter 2.5及以上版本默认的滚动行为配置中,仅针对触摸、触控板、手写笔类输入设备开放拖动滚动权限,鼠标输入设备默认不支持拖动滚动,仅支持滚轮/触控板双指滚动手势触发滚动。
  • AlwaysScrollableScrollPhysics仅控制滚动视图的滚动响应边界(比如内容不足时也允许拉动),不会修改输入设备的拖动授权规则,因此不解决鼠标拖动无响应的问题。
解决方案

方案1:全局生效(推荐)

在应用根组件MaterialApp/CupertinoApp中自定义滚动行为,给鼠标设备添加拖动权限:

import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // 自定义滚动行为
      scrollBehavior: MaterialScrollBehavior().copyWith(
        dragDevices: {
          PointerDeviceKind.mouse, // 新增鼠标设备支持拖动
          PointerDeviceKind.touch,
          PointerDeviceKind.stylus,
          PointerDeviceKind.trackpad,
        },
      ),
      home: const YourHomePage(),
    );
  }
}

方案2:仅针对当前ListView生效

如果不需要全局修改,用ScrollConfiguration包裹当前的ListView,单独配置拖动权限:

import 'package:flutter/gestures.dart';

// 组件内代码
ScrollConfiguration(
  behavior: ScrollConfiguration.of(context).copyWith(
    dragDevices: {
      PointerDeviceKind.mouse,
      PointerDeviceKind.touch,
    },
  ),
  child: ListView.builder(
    padding: EdgeInsets.zero,
    physics: globalScrollPhysics,
    scrollDirection: Axis.horizontal,
    itemCount: this.results.length,
    itemBuilder: (context, index) {
      return SearchResultCard(
          foodData: this.results[index],
          constraints: this.constraints,
          index: index);
    },
  ),
)

修改后即可支持鼠标拖动横向滚动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:54:05