我有这个数据作为json:
{
"id":1,
"value":"value x",
"option":{
"id":1,
"name":"option d"
},
"attachment":null,
"price":0
},
{
"id":2,
"value":"value y",
"option":{
"id":1,
"name":"option b"
},
"attachment":null,
"price":0
},
Run Code Online (Sandbox Code Playgroud)
我想在将它们与 Option.name 分组后将它们视为 ListView ,因此返回是一个映射为:
Map<String, List<Option>> getGrouped(
List<Option> options) {
Map<String, List<Option>> groupByData = groupBy(
itemVariations, (obj) => (obj as Option).option.name);
return groupByData;
}
Run Code Online (Sandbox Code Playgroud)
我不是如何将其视为嵌套的 Text() 小部件?我尝试了很多东西,而且总是:
The argument type 'List<Option>' can't be assigned to the parameter type 'String'.
Run Code Online (Sandbox Code Playgroud)
我将首先回答提出的问题,但是我想提出一种不同的方法来解决这个问题:
为了遍历映射,您必须获取映射键,然后遍历键,使用它们访问映射。下面是一个例子:
Map<String,String> testMap = {"first":"1st","second":"2nd", "third":"3rd"};
main(){
for (String key in testMap.keys){
print(key);
print(testMap[key]);
}
}
Run Code Online (Sandbox Code Playgroud)
这是带有上述示例的飞镖板:https ://dartpad.dev/8c342ae34d34b5572795a4b8bc60e1b6
但是,我猜您不需要这样做。
但首先,一些信息。
在您的评论中,我问您将“选项”定义为什么。我问这个的原因是因为你把 List 放在你的代码中。<> 表示变量类型,而不是 Map 键。此外,Dart 中的大写字母也被视为类名。因此,当我阅读你的代码时,我假设你已经做了这样的事情:
class MyOption { //<-- this defines the class MyOption
final int id;
final String name;
}
MyOption ex1 = MyOption(1, "option a"); // <-- these define objects ex1, ex2
MyOption ex2 = MyOption(2, "option b"); // <-- you can defined these as 'MyOption'
// types because you defined the
// MyOption class.
List<MyOption> myList = [ex1,ex2]; // this is a list of Option object.
Run Code Online (Sandbox Code Playgroud)
所以,你得到“参数类型列表不能分配给参数'字符串'的原因是因为你混合了变量类型。(特别是字符串和列表)
其次,这很难说,但我不相信您正在处理解码后的 json。在开始在颤振中操作它之前,您需要执行此操作。为此,您需要执行以下操作:
var jsonStr = """ // <-- the json data you get should look like this:
{
"results": [
{
"id":1,
"value":"value x",
"option":{
"id":1,
"name":"option d"
},
"attachment":null,
"price":0
},
{
"id":2,
"value":"value y",
"option":{
"id":1,
"name":"option b"
},
"attachment":null,
"price":0
}
]
}
""";
main() {
Map<String, dynamic> myMap = jsonDecode(jsonStr); // decode json here
Run Code Online (Sandbox Code Playgroud)
因此,我们可以以正常方式遍历数组
print("Values from json data:");
for(int i=0; i<myMap['results'].length; i++){
print(myArray[i]['option']['name']);
}
}
Run Code Online (Sandbox Code Playgroud)
我用第二组代码制作了一个飞镖板,所以你可以玩它:
https://dartpad.dev/7f670e3835ad292f2b325dd3d40bb41c
如果这有帮助,请告诉我,我会用我遗漏的任何内容更新我的答案
| 归档时间: |
|
| 查看次数: |
5796 次 |
| 最近记录: |