Flutter中使用youtube_explode_dart加载下一页视频失败求助
解决方案
首先明确youtube_explode_dart的分页逻辑:
- 调用
search()返回的SearchList对象本身就包含第一页的20条数据 nextPage()方法会加载下一页数据,并将数据追加到当前的SearchList中,而非替换原有数据
你的代码问题在于:
- 初始获取数据后立刻调用
nextPage(),直接用合并后的列表覆盖变量,丢失了增量加载的逻辑 - 未区分"首次加载"和"加载更多"场景,每次调用
getData()都会重新发起搜索,重置分页状态
修复步骤:
拆分首次加载与加载更多方法:
- 首次加载初始化分页状态和数据列表
- 加载更多仅追加新页数据
修改后代码实现:
// 类成员变量,保存分页状态和数据列表 SearchList<Video>? data; List<Video> searchQueryList = []; bool isLoading = false; // 首次加载首批数据 Future<void> fetchInitialData() async { isLoading = true; setState(() {}); String query = searchQueryController.text.trim().isEmpty ? 'trending hindi punjabi english and bhojpuri songs' : searchQueryController.text.trim(); // 获取第一页数据 data = await yt.search.search(query, filter: SortFilters.relevance); // 初始化列表为第一页内容 searchQueryList = data!.toList(); isLoading = false; setState(() {}); } // 加载下一批数据 Future<void> loadMore() async { if (data == null || !data!.hasNextPage) return; // 无下一页则终止请求 isLoading = true; setState(() {}); // 加载下一页,数据自动追加到data中 await data!.nextPage(); // 提取新增的下一页数据并追加到列表 searchQueryList.addAll(data!.skip(searchQueryList.length).toList()); isLoading = false; setState(() {}); }
- 使用方式:
- 页面初始化时调用
fetchInitialData()获取首批20条视频 - 用户滚动到页面底部(或点击"加载更多"按钮)时,调用
loadMore()加载下一批数据
- 页面初始化时调用
关键说明:
data!.hasNextPage可判断是否存在下一页,避免无效请求data!.skip(searchQueryList.length).toList()用于提取新增数据,防止重复添加原有内容- 必须拆分两种加载逻辑,否则每次都会重新搜索并重置分页状态
内容的提问来源于stack exchange,提问作者Neal
相关产品推荐
相关产品推荐

