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
相关产品推荐
相关产品推荐

