我正在构建一个非常大的 ListView ,其中列出了产品类别。该列表具有 DraggableScrollbar ,因此用户可以轻松浏览此长列表。
每个列表项都触发一个请求,以获取列表中每个产品类别的产品数量。
问题在于,即使用户真正快速滚动到底部,每个列表项都发送了一个请求,要求加载计数器,即使是用户在快速滚动时看不到的那些。
>ImageListView:
Widget build(BuildContext context) {
return DraggableScrollbar.semicircle(
controller: ScrollController(),
child: ListView.builder(
itemBuilder: (context, index) {
final _productCategory = productCategories[index];
return ProductCategoryItem(
category: _productCategory,
);
},
itemCount: productCategories.length,
),
);
}
ProductCategoryItem:
class ProductCategoryItem extends StatefulWidget {
final ProductCategory category;
const ProductCategoryItem({
Key key,
this.category,
}) : super(key: key);
@override
_ProductCategoryItemState createState() => _ProductCategoryItemState();
}
class _ProductCategoryItemState extends State<ProductCategoryItem> {
@override
initState() {
// Fire me only if I'm visible and after a certain time
// because I can be visible but not enough time to justify
// firing this request
fetchCounter(widget.productCategory.id);
super.initState();
}
@override
Widget build(BuildContext context) {
return ListTile(
title: Text(widget.productCategory.name),
trailing: Text(_counter.toString()),
);
}
}
我的问题是:如何防止用户跳至发送请求的那些列表项?
仅当用户在特定时间后停止滚动且窗口小部件可见时,才如何触发请求?大概1秒?