使用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中的数据输出。另外请注意,如果我恢复到我的原始代码,我会看到预期的列表。