Flutter 如何在ListView.Builder中循环列表中的对象
我正在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
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();)