flutter - Flutter 使用 ScrollController 检测用户滚动
问题描述
项目
嗨,我试图用我的自定义控制器和监听器构建一个简单的列表。这是代码
class Test2 extends StatefulWidget {
@override
_Test2State createState() => _Test2State();
}
class _Test2State extends State<Test2> {
ScrollController scrollController = ScrollController();
@override
void initState() {
scrollController.addListener((){
print('controller called');
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView.builder(
controller: scrollController,
itemCount: 8,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
color: Colors.white,
height: 50,
),
);
},
));
}
}
问题
我的代码按预期工作,但我试图检测用户的滑动,即使没有任何东西可以滑动。到目前为止,如果在调用用户滑动滚动侦听器时列表溢出屏幕,但是当项目列表短于屏幕大小时,不会发生这种情况。我怎样才能强迫听众总是听?
解决方案
也许这段代码可以帮助你。
将脚手架包裹在 NotificationListener 上可以监听所有事件,即使 itemCount 为零
不要忘记提供一个AlwaysScrollableScrollPhysics物理对象
import 'dart:math' as math;
import 'package:flutter/material.dart';
class TestPage extends StatefulWidget {
@override
_TestPageState createState() => _TestPageState();
}
class _TestPageState extends State<TestPage> {
@override
Widget build(BuildContext context) {
final ScrollController scrollController = ScrollController();
return NotificationListener(
child: Scaffold(
body: ListView.builder(
controller: scrollController,
physics: const AlwaysScrollableScrollPhysics(),
itemCount: 0,
itemBuilder: (context, index) {
return Container(
color: Colors.black,
height: 50,
);
},
),
),
onNotification: (notificationInfo) {
if (notificationInfo is ScrollStartNotification) {
print("scroll");
print("detail:"+notificationInfo.dragDetails.toString());
/// your code
}
return true;
},
);
}
}
推荐阅读
- javascript - React useState 多次触发
- r - 在 R 中使用 LightGBM;lgb.Dataset.construct 的目的是什么?
- xml - 无法打开我用 protégé 手动实现的本体
- django-rest-framework - 如何将 Django REST Framework 路由器中的 url 参数限制为整数?
- windows - 一段时间后,pg_notify 不会向在 docker 容器中运行的应用程序发送通知
- node.js - 使用等待后哈希密码不起作用
- ontology - 如何将数据(实例)导入到 protoge 中的现有本体中
- java - 如何在 Spring Boot 应用程序启动期间将 SynchronizationCallbacks 添加到 @TransactionalEventListener?
- reactjs - 使用 useEffect 时,我在传递小于变量依赖项时收到警告
- math - 在 Maple 中,如何将数组(列表或向量或矩阵)的数量与行数和列数相等的数组的数量相除?