flutter 如何以正确的方式实现无限滚动分页

snz8szmq  于 2023-01-09  发布在  Flutter
关注(0)|答案(1)|浏览(242)

我正在发出搜索请求,但返回的数据带有分页类型。我在TextField中的onchanged函数中有,这样每当我键入内容时,它都会发出get请求。我键入的第一个字母工作正常,但当我再次键入时,什么也没有发生。
这就是我在onChanged函数中的内容

onChanged: (value) {
      _pagingController.addPageRequestListener(
      (pageKey) {
      _fetchPage(pageKey, val.trim());
    },
   );
 },

下面是我的_fetchPageFunction

Future<void> _fetchPage(int pageKey, String searchParam) async {
    final results = await searchRepo.getCareers(
          isSearching: true,
          searchParam: searchParam,
          token: token,
          page: pageKey,
        );
      hasNextPage = results['hasNextPage'];
      newItems.clear();
      newItems = results['schools'];
      print(newItems.length);
      if (!hasNextPage) {
        _pagingController.appendLastPage(newItems);
      } else {
        final nextPageKey = pageKey + 1;
        _pagingController.appendPage(newItems, nextPageKey);
      }
    } catch (error) {
      _pagingController.error = error.toString();
    }
  }

下面是我的用户界面

PagedListView<int, dynamic>(
                  shrinkWrap: true,
                  pagingController: _pagingController,
                  builderDelegate: PagedChildBuilderDelegate<dynamic(
                    itemBuilder: (context, item, index) {
                      return ListTile(
                        leading: InitialsAvatar(name: item.name),
                        title: Text(
                          item.name ?? 'n/a',
                          style: theme.textTheme.bodyText1,
                        ),
                        subtitle: Text(
                          item.category,
                          style: theme.textTheme.labelMedium,
                        ),
                      );
                    },
                  ),
                ),

我试着在_fetchPage函数后删除pageRequestLister,但没有成功。有什么方法可以做到这一点吗?如果这不可能,有没有其他软件包可以为我工作?

nhn9ugyo

nhn9ugyo1#

尝试在onChanged()中添加_pagingController.refresh();

onChanged: (value) {
      _pagingController.refresh();
      _pagingController.addPageRequestListener(
      (pageKey) {
      _fetchPage(pageKey, val.trim());
    },
   );
 },

相关问题