Flutter)我想知道如何通过按下按钮从创建的列表中删除项目

Posted

技术标签:

【中文标题】Flutter)我想知道如何通过按下按钮从创建的列表中删除项目【英文标题】:Flutter) I wonder how to remove items from the created list by pressing the button 【发布时间】:2022-01-13 06:05:13 【问题描述】:

我按下按钮将 ListTile 小部件添加到列表并将其输出到 ListViewBuilder。我想通过按每个列表上的删除按钮来删除列表。

  List<ListTile> _todoList = [];

添加列表按钮

 TextButton.icon(
  onPressed: () 
     //I wrote the text in a TextField in the Dialog Widget.
     //And add ListTile widget to list
     _todoList.add(_addListTile(_textController.text));
  

输出列表

  ListView.builder(
      itemBuilder: (context, index) 
         return _todoList[index];
      ,
              
      itemCount: _todoList.length),

这是一个添加到列表中的小部件。我想通过按下列表磁贴上的按钮来删除列表的索引。

  _addListTile(String text) 
    return ListTile(
      title: Text(text),
      //menu 
      trailing: PopupMenuButton(
        // icon: const Icon(Icons.more_vert),
        itemBuilder: (context) 
          return [const PopupMenuItem<int>(value: 0, child: Text('Remove'))];
        ,
        //Cliked menu 
        onSelected: (item) 
          switch (item) 
            case 0:
              return print('Remove List');
              // return _todoList.remove();
          
        ,
      ),
      onTap: () ,
    );
  

如何使用此 ListTile 上的删除按钮删除列表?

谢谢。

【问题讨论】:

【参考方案1】:

我认为您可以为每个 ListTile 对象添加一个 key 值,以确定您每次在 _addListTile() 函数中生成哪个 ListTile 时要删除它,如下所示。

  _addListTile(String text) 
    // You can have anything to be the unique value. Here, I just used the current time.
    // I can't say this is the best option.
    final key = ValueKey(DateTime.now().toString()); 

    return ListTile(
      key: key,
      title: Text(text),
      //menu 
      trailing: PopupMenuButton(
        // icon: const Icon(Icons.more_vert),
        itemBuilder: (context) 
          return [const PopupMenuItem<int>(value: 0, child: Text('Remove'))];
        ,
        //Cliked menu 
        onSelected: (item) 
          switch (item) 
            case 0:
              print('Remove List');
              return _todoList.removeWhere((e) => e.key == key);
          
        ,
      ),
      onTap: () ,
    );
  

我希望它对你有用。

【讨论】:

以上是关于Flutter)我想知道如何通过按下按钮从创建的列表中删除项目的主要内容,如果未能解决你的问题,请参考以下文章

Flutter,按下按钮后如何在Text Widget上粘贴数据?

在 Flutter 中动态创建一列行的好方法是啥

每次使用 Flutter/Firebase 按下上传时,如何创建唯一的图像 ID?

按下按钮后更新文本 - 在 Flutter 中

按下/按下按钮设计 - Flutter

如何知道从另一个视图控制器中的 UICollectionViewController 按下了哪个按钮