发布于 2026-01-06 9 阅读
0

Flutter DEV 的全球展示挑战赛(由 Mux 呈现)中的链接标头分页:展示你的项目!

Flutter 中的链接标题分页

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

分页是 Web 开发中常用的一种技术,用于在处理大量数据时提高 API 的性能和用户体验。

滚动

什么是链接标题分页?

链接头分页是 API 中常用的分页方法之一。本文将探讨在 Dart 中构建与 API 交互的应用程序时如何使用链接头分页。

链接头分页是一种将大量数据分割成易于检索的小块数据的分页方法。该方法使用 HTTP 链接头提供有关上一页和下一页数据的信息。这样,客户端只需检索所需的数据,从而减轻服务器负载并提高性能。

什么

如何在 Flutter 应用中实现?

在构建与 API 交互的应用程序时,可以使用 Dart 的http_pagination包来实现链接标头分页

该软件包开箱即用,提供便捷的标头解析功能。

首先向 API 发送 HTTP 请求以获取第一页数据。响应应包含一个 Link 标头,其中包含有关下一页数据的信息。

import 'package:http/http.dart' as http;

final response = await http.get('https://example.com/api/data');
final headers = response.headers;
Enter fullscreen mode Exit fullscreen mode

解析 Link 标头以提取下一页数据的 URL。Link 标头可以包含 rel 属性设置为“first”、“next”、“prev”、“last”的URL 。

这些URL可以用作获取下一页的链接。
但是,如果我们使用服务或存储库中的API,并像下面的示例一样编写方法,我们应该怎么做呢?

final listData = await somethingRepository.getData(page: 2, perPage: 10);
Enter fullscreen mode Exit fullscreen mode

猫

使用 http_pagination 包

在您的 pubspec.yaml 文件中安装http_pagination

dependencies:
  http_pagination: ^0.2.0
Enter fullscreen mode Exit fullscreen mode

在 API 调用之后添加这行简单的代码。

import 'package:http/http.dart' as http;

final response = await http.get('https://example.com/api/data');
final pagination = PagesPagination.fromHeaders(response.headers);
Enter fullscreen mode Exit fullscreen mode

PagesPagination包含 int 字段 [first, next, prev. last]
,您可以使用这些字段中的任何一个作为 API 调用中的当前加载页面发送。

使用 GitHub API 示例

import 'package:http_pagination/http_pagination.dart';

final headers = {
  'link': [
    '<https://api.github.com/user/9287/repos?page=3&per_page=100>; rel="next", ' +
    '<https://api.github.com/user/9287/repos?page=1&per_page=100>; rel="prev", ' +
    '<https://api.github.com/user/9287/repos?page=5&per_page=100>; rel="last"'
  ],
};
final pagination = PagesPagination.fromHeaders(headers);
print(pagination); // PagesPagination(first: null, next: 3, prev: 1, last: 5)
Enter fullscreen mode Exit fullscreen mode

向下一页数据的 URL 发送新的 HTTP 请求。重复步骤 2 和 3,直到没有更多数据页需要检索为止。

光标和页面(偏移量)分页

CursorPagination 是另一种分页方式,逻辑相同。
链接类型是客户端代码中唯一的区别。

当使用 Pages(offset) 分页时,光标类型分页客户端会接收指向下一页或最后一页的字符串 ID 链接,而 Pages(offset) 分页会接收指向下一页或最后一页的整数索引。

光标分页示例

import 'package:http_pagination/http_pagination.dart';

final headers = {
  'link': [
    '<http://example.com/items?cursor=a>; rel="first", ' +
    '<http://example.com/items?cursor=b>; rel="next", ' +
    '<http://example.com/items?cursor=c>; rel="prev", ' +
    '<http://example.com/items?cursor=d>; rel="last"',
  ],
};

final pagination = CursorPagination.fromHeaders(headers);
print(pagination); // CursorPagination(first: a, next: b, prev: c, last: d)
Enter fullscreen mode Exit fullscreen mode

链接标头分页是一种强大的技术,可以帮助提升应用程序在使用返回大量数据的 API 时的性能。通过将数据拆分成更小的部分,并提供有关上一页和下一页数据的信息,客户端可以仅检索所需数据,从而减轻服务器负载并提高性能。

文章来源:https://dev.to/frezyx/link-headers-pagination-in-flutter-kcd