Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在ListView.Builder中循环列表中的对象_Flutter_Dart_Flutter Layout - Fatal编程技术网

Flutter 如何在ListView.Builder中循环列表中的对象

Flutter 如何在ListView.Builder中循环列表中的对象,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我正在ListView.builder中循环列表项 List _rBoxes = new List();//declare 我要循环的数据如下所示: { "box_content": { "box_1": [ { "id": "9", "name": "abc&quo

我正在ListView.builder中循环列表项

List _rBoxes = new List();//declare
我要循环的数据如下所示:

{    
    "box_content": {
        "box_1": [
            {
                "id": "9",
                "name": "abc"
            },
            {
                "id": "10",
                "name": "xyz"
            }
        ],
        "box_2": [
            {
                "id": "8",
                "name": "acc"
            }
        ],
        "box_3": [
            {
                "id": "1",
                "name": "abc"
            }
        ],
        "box_4": [
            {
                "id": "4",
                "name": "amno"
            },
            {
                "id": "6",
                "name": "jkl"
            }
        ],
        "box_5": [
            {
                "id": "7",
                "name": "xre"
            }
        ]
    }    
}
_rBoxes.addAll(data['box_content'].entries.map((entry) => { entry.key, entry.value }).toList());
然后我将这些项目添加到列表中

_rBoxes.addAll(data['box_content']);//it gives error - Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>'
错误: //这里我想循环列表视图中的box_1索引(仅限),如果我给出
\u rBoxItems['box\u 1']。长度
将发生错误。实际上,我被困在这个场景中,请帮助我解决这个问题。

首先,您需要创建
数据
模型来将json数据解析为一个模型,
数据
类应该如下所示

class Data {
  BoxContent boxContent;

  Data({this.boxContent});

  Data.fromJson(Map<String, dynamic> json) {
    boxContent = json['box_content'] != null
        ? new BoxContent.fromJson(json['box_content'])
        : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.boxContent != null) {
      data['box_content'] = this.boxContent.toJson();
    }
    return data;
  }
}

class BoxContent {
  List<Box> box;

  BoxContent({this.box});

  BoxContent.fromJson(Map<String, dynamic> json) {
    if (json['box'] != null) {
      box = new List<Box>();
      json['box'].forEach((v) {
        box.add(new Box.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.box != null) {
      data['box'] = this.box.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class Box {
  String id;
  String name;

  Box({this.id, this.name});

  Box.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    name = json['name'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['name'] = this.name;
    return data;
  }
}
最终你可以实现你所需要的

ListView.builder(
    physics: NeverScrollableScrollPhysics(),
    itemCount: _rBoxItems.length,
    itemBuilder: (BuildContext context, int index) {
        return Text(_data.boxContent.box[index].length.toString(),
            style: TextStyle(fontSize: 20.0),
        );
}),

注意:您可以简单地从json数据生成要解析的模型,首先您需要创建
data
model将json数据解析为一个模型,
data
类应该如下所示:

class Data {
  BoxContent boxContent;

  Data({this.boxContent});

  Data.fromJson(Map<String, dynamic> json) {
    boxContent = json['box_content'] != null
        ? new BoxContent.fromJson(json['box_content'])
        : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.boxContent != null) {
      data['box_content'] = this.boxContent.toJson();
    }
    return data;
  }
}

class BoxContent {
  List<Box> box;

  BoxContent({this.box});

  BoxContent.fromJson(Map<String, dynamic> json) {
    if (json['box'] != null) {
      box = new List<Box>();
      json['box'].forEach((v) {
        box.add(new Box.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.box != null) {
      data['box'] = this.box.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class Box {
  String id;
  String name;

  Box({this.id, this.name});

  Box.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    name = json['name'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['name'] = this.name;
    return data;
  }
}
最终你可以实现你所需要的

ListView.builder(
    physics: NeverScrollableScrollPhysics(),
    itemCount: _rBoxItems.length,
    itemBuilder: (BuildContext context, int index) {
        return Text(_data.boxContent.box[index].length.toString(),
            style: TextStyle(fontSize: 20.0),
        );
}),

注意:您可以简单地从json数据生成要解析的模型,因为您是
数据['box\u content']
是一个映射,但是_rBoxes.addAll需要一个列表,因此它将报告一个错误:

Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>

希望对您有所帮助^^ ^

,因为您是
数据['box\u content']
是一个映射,但是_rBoxes.addAll需要一个列表,因此它将报告一个错误:

Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>

希望对您有所帮助^ ^

我想您需要迭代框上下文。如果您首先从API获取数据,您应该创建数据模型,为此,您可以使用app.quicktype.io,它在dart中工作得非常好。当我把你的盒子里的东西加进去的时候,它给了我一个这样的东西。

在创建数据模型之后。您可以使用此函数从json字符串获取对象,并将其转换为列表。
Box.fromJson(String str)=>Box.fromMap(json.decode(str))

我认为您需要迭代框上下文。如果您首先从API获取数据,您应该创建数据模型,为此,您可以使用app.quicktype.io,它在dart中工作得非常好。当我把你的盒子里的东西加进去的时候,它给了我一个这样的东西。

在创建数据模型之后。您可以使用此函数从json字符串获取对象,并将其转换为列表。
Box.fromJson(String str)=>Box.fromMap(json.decode(str))

\u rBoxes.addAll(数据['box\u content'])
您想将所有内容添加到
rBoxes
\u rBoxes.addAll(数据['box\u content'])
是否要将所有对象添加到
rBoxes
?是的,已清除错误,但我只想在列表视图生成器中循环box\u 1对象,当前它循环box\u内容中的完整对象@hysunnyok~实际上,很容易得到
box_1
在将地图转换为列表后,您可以使用
List[0]
。您的意思是:ListView.builder(itemCount:_rBoxItems[0]。length,itemBuilder:(BuildContext,int index){返回文本(_rBoxItems[0][index].toString();)是的,它清除了错误,但我只想在列表视图生成器中循环box_1对象,目前它在box_内容中循环完整对象@hysunnyok~实际上,很容易得到
box_1
在将地图转换为列表后,您可以使用
List[0]
。您的意思是:ListView.builder(itemCount:_rBoxItems[0]。length,itemBuilder:(BuildContext,int index){返回文本(_rBoxItems[0][index].toString();)