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
相关产品推荐
相关产品推荐

