滚动加载新数据表单服务器 |分页 |颤动/飞镖

时间:2021-03-25 19:53:24

标签: flutter pagination flutter-layout

我正在尝试在我的 Flutter 应用程序上实现分页。任务是在滚动时加载/获取新数据。我可以在每次滚动时从服务器获取数据,但问题是每次获取相同的数据。

这是我的代码供您查看:

Future<Map<String, dynamic>> fetchEvents(String accessToken,int vehicleId,) async {
    String url = '${AppConstants.baseUrl}v2/event/paginated?size=10&offset=${offset++}&eventsId=${widget.eventsId}';

    final response = await get(
      Uri.parse('$url'),
      headers: {
        'Authorization': "bearer $accessToken",
      },
    );

    Map<String, dynamic> responseBody = json.decode(response.body);
    fetchedEvents = [...responseBody['eventResponses']];
    for (var event in fetchedEvents) {
      setState(() {
        events.add(event);
      });
    }
    return responseBody;
  }

每次滚动时,偏移量都会更新,但返回相同的数据。

但是在 Postman 上,如果我更改偏移量,则会获取新的数据集。我哪里出错了?

这是我的 initState() 代码:

@override
  initState() {
    super.initState();
    loadMoreData(); //initial data is fetched
    _controller.addListener(() {
      if (_controller.position.pixels == _controller.position.maxScrollExtent) { //data fetched on scroll
        loadMoreData();
      }
    });
  }

这里是 laodMoreData():

loadMoreData() {
    fetchEvents(widget.accessToken, widget.eventId);
  }

请帮助我克服这个问题。提前致谢。

1 个答案:

答案 0 :(得分:0)

您不必为此使用控制器 您可以将 itemCount 加 1 以加载下一页

   ListView.builder(
      itemCount: list.length+1,
      itemBuilder: (context, i) {
        if(i<list.length)
           {
           return listItem()
            }
        else{
          loadMoreData()//this function will be called with the last listitem 
          return Loader()  //loader for pagination
            }
        },
    )