Flutter 从列颤振中删除小部件索引

Flutter 从列颤振中删除小部件索引,flutter,Flutter,这里是小部件列表,因此当用户按下关闭图标时,我想从列表中删除任何小部件 我还想获取小部件的索引 List<Widget> _Items = [ Container( margin: EdgeInsets.only(right: 10), child: GestureDetector(onTap: () { // on tap this widget should be removed from the list }

这里是小部件列表,因此当用户按下关闭图标时,我想从列表中删除任何小部件

我还想获取小部件的索引

 List<Widget> _Items = [
      Container(
              margin: EdgeInsets.only(right: 10),
              child: GestureDetector(onTap: () {
// on tap this widget should be removed from the list
}, child: Icon(Icons.close)),
            ),
Container(
              margin: EdgeInsets.only(right: 10),
              child: GestureDetector(onTap: () {
// on tap this widget should be removed from the list
}, child: Icon(Icons.close)),
            ),
      
    ];



Column(children: _Items,)

列表项目=[
容器(
页边距:仅限边集(右:10),
子项:手势检测器(onTap:(){
//点击时,应将此小部件从列表中删除
},子:图标(Icons.close)),
),
容器(
页边距:仅限边集(右:10),
子项:手势检测器(onTap:(){
//点击时,应将此小部件从列表中删除
},子:图标(Icons.close)),
),
];
列(子项:_项,)

您应该尝试
ListView.builder()
。它支持获取列表的索引
例如:

class\u tabspagentate扩展状态{
最终清单项目=[
容器(
页边距:仅限边集(右:10),
子项:手势检测器(onTap:(){
//点击时,应将此小部件从列表中删除
},子:图标(Icons.close)),
),
容器(
页边距:仅限边集(右:10),
子项:手势检测器(onTap:(){
//点击时,应将此小部件从列表中删除
},子:图标(Icons.close)),
),
];
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
子项:ListView.builder(
itemCount:items.length,itemBuilder:(\uz,索引){
退货项目[索引];
});
),
);
}
}
试试这个

class DeleteWidget extends StatefulWidget {
  @override
  _DeleteWidgetState createState() => _DeleteWidgetState();
}

class _DeleteWidgetState extends State<DeleteWidget> {
  final List<Widget> items = [
    Container(
      margin: EdgeInsets.only(right: 10),
      child: Icon(Icons.close),
    ),
    Container(
      margin: EdgeInsets.only(right: 10),
      child: Icon(Icons.close),
    ),
    Container(
      margin: EdgeInsets.only(right: 10),
      child: Icon(Icons.close),
    ),
    Container(
      margin: EdgeInsets.only(right: 10),
      child: Icon(Icons.close),
    ),
    Container(
      margin: EdgeInsets.only(right: 10),
      child: Icon(Icons.close),
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ListView.builder(
          itemCount: items.length,
          itemBuilder: (_, index) {
            return GestureDetector(
              onTap: () {
                setState(() {
                  items.remove(items[index]);
                });
              },
              child: items[index],
            );
          },
        ),
      ),
    );
  }
}
类DeleteWidget扩展StatefulWidget{
@凌驾
_DeleteWidgetState createState()=>\u DeleteWidgetState();
}
类_DeleteWidgetState扩展状态{
最终清单项目=[
容器(
页边距:仅限边集(右:10),
子:图标(Icons.close),
),
容器(
页边距:仅限边集(右:10),
子:图标(Icons.close),
),
容器(
页边距:仅限边集(右:10),
子:图标(Icons.close),
),
容器(
页边距:仅限边集(右:10),
子:图标(Icons.close),
),
容器(
页边距:仅限边集(右:10),
子:图标(Icons.close),
),
];
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
子项:ListView.builder(
itemCount:items.length,
itemBuilder:(\ux,索引){
返回手势检测器(
onTap:(){
设置状态(){
项目。删除(项目[索引]);
});
},
子项:项[索引],
);
},
),
),
);
}
}

使用列时无法获取索引。。使用了
ListView.builder()
。。我可以在ListView.Builder中给出答案,而不是在列上。那么ListView.Builder的答案是什么
class DeleteWidget extends StatefulWidget {
  @override
  _DeleteWidgetState createState() => _DeleteWidgetState();
}

class _DeleteWidgetState extends State<DeleteWidget> {
  final List<Widget> items = [
    Container(
      margin: EdgeInsets.only(right: 10),
      child: Icon(Icons.close),
    ),
    Container(
      margin: EdgeInsets.only(right: 10),
      child: Icon(Icons.close),
    ),
    Container(
      margin: EdgeInsets.only(right: 10),
      child: Icon(Icons.close),
    ),
    Container(
      margin: EdgeInsets.only(right: 10),
      child: Icon(Icons.close),
    ),
    Container(
      margin: EdgeInsets.only(right: 10),
      child: Icon(Icons.close),
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ListView.builder(
          itemCount: items.length,
          itemBuilder: (_, index) {
            return GestureDetector(
              onTap: () {
                setState(() {
                  items.remove(items[index]);
                });
              },
              child: items[index],
            );
          },
        ),
      ),
    );
  }
}