You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter/Dart大数据列表分页:按偏移量与数量获取数据

Dart 基于 Offset 和 Limit 实现数据分页查询

要实现根据offset(偏移量)和limit(数量)截取数据的逻辑,只需在getData函数中添加索引边界校验和列表截取逻辑即可。以下是修改后的完整代码:

import 'dart:convert';
 
void main() {
  // 测试用例1:从偏移量0开始,取5条数据
  var data1 = getData(5, 0);
  print("测试用例1结果:\n${data1.toString()}\n");

  // 测试用例2:从偏移量1开始,取2条数据
  var data2 = getData(2, 1);
  print("测试用例2结果:\n${data2.toString()}\n");

  // 测试用例3:偏移量超出列表长度,返回空列表
  var data3 = getData(3, 10);
  print("测试用例3结果:\n${data3.toString()}");
}

List<Module> getData(int limit, int offset) { 
  // 模拟更多数据方便测试
  List<Module> freeModuleList = [
    Module(
      id: '1',
      title: 'Mempelajari Data Part 1',
      publishedAt: DateTime.now(),
      progressUpdated: DateTime.now(),
      created: DateTime.now()),
    Module(
      id: '2',
      title: 'Mempelajari Data Part 2',
      publishedAt: DateTime.now(),
      progressUpdated: DateTime.now(),
      created: DateTime.now()),
    Module(
      id: '3',
      title: 'Mempelajari Data Part 3',
      publishedAt: DateTime.now(),
      progressUpdated: DateTime.now(),
      created: DateTime.now()),
    Module(
      id: '4',
      title: 'Mempelajari Data Part 4',
      publishedAt: DateTime.now(),
      progressUpdated: DateTime.now(),
      created: DateTime.now()),
    Module(
      id: '5',
      title: 'Mempelajari Data Part 5',
      publishedAt: DateTime.now(),
      progressUpdated: DateTime.now(),
      created: DateTime.now()),
  ];

  // 处理边界情况,避免索引越界
  final startIndex = offset.clamp(0, freeModuleList.length);
  final endIndex = (offset + limit).clamp(startIndex, freeModuleList.length);
  
  // 截取对应范围的子列表
  return freeModuleList.sublist(startIndex, endIndex);
}

class Module {
  final String id;
  final String title;
  final DateTime progressUpdated;
  final DateTime publishedAt;
  final DateTime created;

  Module({
    required this.id,
    required this.title,
    required this.created,
    required this.progressUpdated,
    required this.publishedAt,
  });
  
  @override
  String toString() => '''
    Module {
      id: $id,
      title: $title,
      created: $created,
      progressUpdated: $progressUpdated,
      publishedAt: $publishedAt,
    }
  ''';
}

关键逻辑说明

  • 边界校验:使用clamp方法确保起始索引startIndex在0到列表长度之间,结束索引endIndex不小于起始索引且不超过列表长度,避免出现索引越界错误。
  • 列表截取:通过List.sublist(start, end)方法获取从startIndex(包含)到endIndex(不包含)的子列表,这正是分页所需的结果。
  • 测试用例:main函数中添加了三个测试场景,覆盖正常分页、部分分页和偏移量超出范围的情况,方便验证逻辑正确性。

内容的提问来源于stack exchange,提问作者Riana Deana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:01:41