仅当窗口小部件在屏幕上可见一段时间时才触发请求

时间:2020-10-17 10:11:59

标签: flutter listview

我正在构建一个非常大的 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秒?

0 个答案:

没有答案