所以当我设置physics: const NeverScrollableScrollPhysics()on 时ListView.builder,它也会禁用鼠标滚轮滚动。有没有办法保持鼠标滚轮但禁用拖动?
谢谢
小智 8
感谢您的回答(@HasilT),它有帮助!我发现它PointerScrollEvent.scrollDelta已经“动画”了,您可以将它与ScrollController.jumpTo. 在我的代码中,我防止过度滚动min和max功能。
import 'dart:math' as math;
Listener(
onPointerSignal: (ps) {
if (ps is PointerScrollEvent) {
final newOffset = _controller.offset + ps.scrollDelta.dy;
if (ps.scrollDelta.dy.isNegative) {
_controller.jumpTo(math.max(0, newOffset));
} else {
_controller
.jumpTo(math.min(_controller.position.maxScrollExtent, newOffset));
}
}
},
child: ListView.builder(
itemCount: 100,
controller: _controller,
physics: NeverScrollableScrollPhysics(),
itemBuilder: (BuildContext context, int index) {
return Container(
height: 100,
margin: EdgeInsets.all(10),
color: index.isEven ? Colors.blue : Colors.green);
},
),
);
Run Code Online (Sandbox Code Playgroud)
您可以使用Listener小部件来监视发生在您身上的拖动事件,ListView并ListView使用ScrollController附加到它手动滚动到所需的偏移量ListView。
这是一个示例代码:
Listener(
onPointerSignal: (ps) {
if (ps is PointerScrollEvent) {
_controller.animateTo(ps.position.dy,
duration: Duration(milliseconds: 500),
curve: Curves.linear);
}
},
child: ListView.builder(
itemCount: 100,
controller: _controller,
physics: NeverScrollableScrollPhysics(),
itemBuilder: (BuildContext context, int index) {
return Container(
height: 100,
margin: EdgeInsets.all(10),
color: index.isEven ? Colors.blue : Colors.green);
}))
Run Code Online (Sandbox Code Playgroud)
这是一个工作演示的链接(您可能需要使用侦听器事件来使滚动完美,这只是一个示例)
| 归档时间: |
|
| 查看次数: |
1849 次 |
| 最近记录: |