使用listview.separated时列表中重复的相同项
出于某种原因,我试图使用使用listview.separated时列表中重复的相同项,listview,flutter,flutter-layout,divider,Listview,Flutter,Flutter Layout,Divider,出于某种原因,我试图使用listView.separated显示的列表正在重复每个项目,如下面的屏幕截图所示: 预期的行为是使用分隔符只显示每个项目一次,因此我选择了listView.separated 显示此列表的当前代码为: Widget proTile(Pro pro, BuildContext context) { return ListView.separated( separatorBuilder: (pro, context) =>
listView.separated
显示的列表正在重复每个项目,如下面的屏幕截图所示:
预期的行为是使用分隔符只显示每个项目一次,因此我选择了listView.separated
显示此列表的当前代码为:
Widget proTile(Pro pro, BuildContext context) {
return ListView.separated(
separatorBuilder: (pro, context) => Divider(
color: Colors.black,
),
shrinkWrap: true,
physics: ScrollPhysics(),
itemCount: pros.length,
itemBuilder: (context, index) =>
(GestureDetector(
child: new Container(padding: EdgeInsets.all(10.0),
child: new Row(
children: <Widget>[
_getProfilePic(pro),
new Padding(
padding: EdgeInsets.only(left: 9.0),
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Text(
'${pro.fullname}',
style: new TextStyle(
fontSize: 16.0
),
),
new Padding(
padding: EdgeInsets.only(top:3.0),
child: new Text(
'${pro.company}',
style: new TextStyle(
fontSize: 12.0
),
)
),
],
),
),
new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new StarRating(starCount: 5,rating: pro.rating,color: Colors.amber),
new Padding(
padding: EdgeInsets.only(top: 3.0),
child: new Text(
('${pro.reviewCount} reviews'),
style: new TextStyle(
fontSize: 12.0
),),
),
],
),
],
),
),
// Go to the profile page of the pro
onTap:() => Navigator.push(context,
MaterialPageRoute(builder: (context) => ProfilePage(pro, this.fireBaseUser, this.user))
)
)
)
);
}
// Returns a list view of pro list tiles
Widget buildProList(List<dynamic> pros, BuildContext context) {
List<Widget> proTiles = new List<Widget>();
pros.forEach((pro) {
proTiles.add(proTile(pro, context));
});
return new ListView(
children: proTiles
);
}
@override
Widget build(BuildContext context) {
return new Center(
child: buildProList(pros, context),
);
}
Widget程序文件(Pro-Pro,BuildContext){
返回ListView.separated(
separatorBuilder:(pro,context)=>Divider(
颜色:颜色,黑色,
),
收缩膜:对,
物理:物理(),
itemCount:pros.length,
itemBuilder:(上下文,索引)=>
(手势检测器(
子项:新容器(填充:边缘集。全部(10.0),
孩子:新的一排(
儿童:[
_getProfilePic(专业版),
新填料(
填充:仅限边缘设置(左:9.0),
),
扩大(
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
新文本(
“${pro.fullname}”,
样式:新文本样式(
字体大小:16.0
),
),
新填料(
填充:仅限边缘设置(顶部:3.0),
儿童:新文本(
“${pro.company}”,
样式:新文本样式(
字体大小:12.0
),
)
),
],
),
),
新专栏(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
新星光(星数:5,等级:专业等级,颜色:颜色。琥珀色),
新填料(
填充:仅限边缘设置(顶部:3.0),
儿童:新文本(
(“${pro.reviewCount}评论”),
样式:新文本样式(
字体大小:12.0
),),
),
],
),
],
),
),
//转到专业版的个人资料页面
onTap:()=>Navigator.push(上下文、,
MaterialPageRoute(生成器:(上下文)=>ProfilePage(pro,this.fireBaseUser,this.user))
)
)
)
);
}
//返回pro列表分幅的列表视图
Widget buildProList(列出优点、BuildContext上下文){
List proTiles=新列表();
赞成者。赞成者((赞成者){
添加(proTile(pro,context));
});
返回新的ListView(
儿童:原生生物
);
}
@凌驾
小部件构建(构建上下文){
返回新中心(
子项:buildProList(专业,上下文),
);
}
在这里寻找问题所在的指导和适当的解决方案
数据输出:
您可以使用您的
profile
方法,现在您正在创建一个ListView。如果每个项目都不正确,请尝试以下更改:
删除该参数
Widget proTile(BuildContext context) {
更改构建方法
@override
Widget build(BuildContext context) {
return new Center(
child: proTile(context),
);
}
在profile
方法中,不要使用胖箭头,因为您需要获取当前对象:
itemBuilder: (context, index) {
final pro = pros[index];
return GestureDetector(
child: new Container(padding: EdgeInsets.all(10.0),
...
}
ListView.separated为每个项目创建一个单独的项目。你有关于你需要什么的图片吗?首先运行
flatter format
-很难读取这样缩进的代码更新了OP@diegoveloperhm中的预期屏幕截图看起来你的数据有问题,你能打印里面的每个项目吗:pros.foreach更新了OP@diegoveloper中的数据输出。另外请注意,如果我恢复到我的原始代码,我会看到预期的列表。