如何遍历 Flutter 中的对象映射

Muj*_*ood 4 dart flutter

我有这个数据作为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)

Wil*_*ill 5

我将首先回答提出的问题,但是我想提出一种不同的方法来解决这个问题:

为了遍历映射,您必须获取映射键,然后遍历键,使用它们访问映射。下面是一个例子:

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

如果这有帮助,请告诉我,我会用我遗漏的任何内容更新我的答案