Flutter如何返回指定长度(240条)的列表?
解决方案
要实现仅返回总共有240条数据的分块列表,可以通过以下两种方式修改代码:
方法一:先限制总元素数再分块
这种方式先从原始数据中截取最多240个元素,再进行分块补全,确保最终总元素数恰好为240:
static Future<List<List<int>>> localPath() async { File textAsset = File('/storage/emulated/0/RPSApp/assets/bluetooth.txt'); final text = await textAsset.readAsString(); final bytes = text.split(',') .map((s) => s.trim()) .map((s) => int.parse(s)) .toList(); const int chunkSize = 20; const int totalTarget = 240; // 截取前240个元素,避免处理多余数据 final limitedBytes = bytes.take(totalTarget).toList(); List<int> padTo(List<int> input, int count) { return [...input, ...List.filled(count - input.length, 255)]; } List<int> padToChunksize(List<int> input) => padTo(input, chunkSize); // 对截取后的元素进行分块并补全每个块到20个元素 final items = limitedBytes.slices(chunkSize).map(padToChunksize).toList(); // 如果分块后总元素数不足240,补充全255的块直到满足要求 while (items.length * chunkSize < totalTarget) { items.add(List.filled(chunkSize, 255)); } return items; }
方法二:直接限制分块数量
因为每个块包含20个元素,240条数据对应12个块,所以可以直接取前12个分块,再补全不足的块:
static Future<List<List<int>>> localPath() async { File textAsset = File('/storage/emulated/0/RPSApp/assets/bluetooth.txt'); final text = await textAsset.readAsString(); final bytes = text.split(',') .map((s) => s.trim()) .map((s) => int.parse(s)) .toList(); const int chunkSize = 20; const int chunkCount = 12; // 12*20=240 List<int> padTo(List<int> input, int count) { return [...input, ...List.filled(count - input.length, 255)]; } List<int> padToChunksize(List<int> input) => padTo(input, chunkSize); // 生成分块并取前12个 final items = bytes.slices(chunkSize).map(padToChunksize).take(chunkCount).toList(); // 补全到12个块 while (items.length < chunkCount) { items.add(List.filled(chunkSize, 255)); } return items; }
说明
- 两种方法都会确保最终返回的列表总元素数为240,每个子列表(块)包含20个元素,不足的部分用
255填充。 - 函数返回类型从
Future<List>改为Future<List<List<int>>>,让类型更明确,避免类型警告。
内容的提问来源于stack exchange,提问作者rania
相关产品推荐
相关产品推荐

