无限滚动颤振

时间:2020-01-17 14:52:05

标签: flutter

我正在尝试为我的内置flutter应用程序实现无限滚动,但是我遇到了问题。 我想在到达列表末尾时加载更多元素。

然后我尝试使用此代码(为了方便起见,我将放置一个pastebin https://pastebin.com/StwTpj0M):

 void initState() {
    loadItems();
    _scrollController..addListener(_onScroll);
    super.initState();
  }
 final _scrollThreshold = 200.0;
 void _onScroll() {
    final maxScroll = _scrollController.position.maxScrollExtent;
    final currentScroll = _scrollController.position.pixels;

    if (maxScroll - currentScroll <= _scrollThreshold) {
      //this is called many time
      print("limit reached");
    }
  }
  @override
  Widget build(BuildContext context) {
        return Scaffold(
          body: Column(
            children: <Widget>[

              Expanded(
                child: ListView.builder
                  (
                    controller: _scrollController,
                    itemCount: litems.length,
                    itemBuilder: (BuildContext ctxt, int index) {
                      return new Text(litems[index]);
                    }
                ),
              )

            ],
          ),
        );

但是问题在于,在我创建的函数 _onScroll 中,该块:

if (maxScroll - currentScroll <= _scrollThreshold) {
      print("limit reached");
    }

被调用了很多次,实际上它将多次打印我的字符串。 显然,这是一个问题,因为如果我向后端发出异步调用,则会多次触发相同的调用。

我遵循了本教程,在我的实际应用程序中我使用了Bloc,但问题是相同的。

https://bloclibrary.dev/#/flutterinfinitelisttutorial

1 个答案:

答案 0 :(得分:0)

使用Google Codelab,它们会按照正确的说明显示工作原理。 https://codelabs.developers.google.com/codelabs/first-flutter-app-pt2/#0