如何使用弹出菜单删除项目列表-Flutter

时间:2019-03-05 07:38:15

标签: list flutter popupmenu

当我单击弹出菜单按钮时,如何删除项目列表?但是,我的列表和弹出菜单位于两个单独的文件中。我需要知道根据按下的列表项删除了哪一个即时消息。

pop_up_menu.dart:

drawRect(1, 1, this.getWidth() - 3, this.getHeight() - 3)

因此,将这个弹出菜单导入到list_tile.dart中,每当我单击弹出菜单按钮“删除”时,我都需要删除已按下弹出菜单的选定列表项

List_tile.dart:

import 'package:flutter/material.dart';

class PopUpMenu extends StatelessWidget {
  void showMenuSelection(String value) {
    print("pressed");
  }

  @override
  Widget build(BuildContext context) {
    return PopupMenuButton<String>(
      padding: EdgeInsets.zero,
      icon: Icon(Icons.more_vert),
      onSelected: showMenuSelection,
      itemBuilder: (BuildContext context) => <PopupMenuEntry<String>>[
            const PopupMenuItem<String>(
                value: 'Create another',
                child: ListTile(
                    leading: Icon(Icons.add), title: Text('Create another'))),
            const PopupMenuItem<String>(
                value: 'Delete',
                child: ListTile(
                    leading: Icon(Icons.delete), title: Text('Delete')))
          ],
    );
  }
}

因此,此列表中的每个项目都有一个弹出菜单,该菜单中有删除选项。当按下删除选项时,它必须删除触发它的项目。

示例:当按下user2的弹出菜单按钮delete时,应删除user2。

example:

1 个答案:

答案 0 :(得分:0)

向您的PopUpMenu类添加回调函数:

class PopUpMenu extends StatelessWidget {
  VoidCallback onDelete;

  PopUpMenu({this.onDelete});

  void showMenuSelection(String value) {
    switch (value) {
      case 'Delete':
        onDelete();
        break;
      // Other cases for other menu options
    }
  }

然后在原始类中创建它时:

         ...
                trailing: PopUpMenu(
                  onDelete: () {
                    levelsData.removeWhere((element) => element == element);
                  }
                )));
          }

Flutter的一般经验法则是将回调传递给子级,而不是尝试访问父级中的数据。

您可能还需要将StuffInTiles小部件设为有状态,并将setState(() {});添加到onDelete,因为仅删除该值实际上并不会使用新列表来更新视图。 / p>