gpt4 book ai didi

flutter - 展平 Dart 中列表的动态列表

转载 作者:IT王子 更新时间:2023-10-29 06:39:11 25 4
gpt4 key购买 nike

我在 dart 中解码了以下 json:

[{"page":1, "items": [1, 2]}, {"page":2, "items": [3, 4]}]

我想将其展平为单个项目列表:[1, 2, 3, 4]。我尝试的第一个天真的方法是这样的:

final x = items.expand((p) => p['items']);

但它给了我这个错误:

Uncaught exception:
TypeError: Closure 'main_closure': type '(dynamic) => dynamic' is not a subtype of type '(dynamic) => Iterable<dynamic>'

所以我假设问题是 p['items'] 没有被识别为 Iterable,然后我尝试了其他方法但都没有用:

final x = items.expand((p) => p['items'] as List<int>);
// CastError: Instance of 'JSArray': type 'JSArray' is not a subtype of type 'List<int>'

final x = items.expand((p) => p['items'].map((i) => i as int);
// TypeError: Closure 'main_closure': type '(dynamic) => dynamic' is not a subtype of type '(dynamic) => Iterable<dynamic>'

这是代码,也在 dartPad 中在线运行:

import 'dart:convert';

void main() {
const jsonString = '[{"page":1, "items": [1, 2]}, {"page":2, "items": [3, 4]}]';
final items = json.decode(jsonString);
//final x = items.expand((p) => p['items']);
//final x = items.expand((p) => p['items'].map((i) => i as int);
print(x);

// When the list is not dynamic, it works
const foo = [{"page":1, "items": [11, 22]}, {"page":2, "items": [33, 44]}];
final y = foo.expand((p) => p['items']);
print(y); // => [1, 2, 3, 4];

// Example from dart's website
const pairs = [[1, 2], [3, 4]];
final flattened = pairs.expand((pair) => pair).toList();
print(flattened); // => [1, 2, 3, 4];
}

当列表是动态的时,我该如何使用它? json 看起来很简单,可以使用 json.decode 来完成,而不是设置类似 built_value 的东西来完成。

最佳答案

只需将解码后的对象转换为List

const jsonString = '[{"page":1, "items": [1, 2]}, {"page":2, "items": [3, 4]}]';
final items = json.decode(jsonString) as List;
final x = items.expand((p) => p['items']);
print(x);

或者使用固定的 List 类型:

final List items = json.decode(jsonString);

关于flutter - 展平 Dart 中列表的动态列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57050652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com