无法在 Flutter 中使用 .map 函数

Posted

技术标签:

【中文标题】无法在 Flutter 中使用 .map 函数【英文标题】:Unable to use the .map function in Flutter 【发布时间】:2021-04-09 10:40:03 【问题描述】:

所以我正在关注一本关于 Flutter 应用程序开发的书,我的任务是实现一个 ToDoMenuItem 类并在其中创建一个列表。

      class TodoMenuItem 
      final String title;
      final Icon icon;
    
      TodoMenuItem(this.title, this.icon);
    
      List<TodoMenuItem> foodMenuList = [
        TodoMenuItem(title: 'Fast Food', icon: Icon(Icons.fastfood)),
        TodoMenuItem(title: 'Remind Me', icon: Icon(Icons.add_alarm)),
        TodoMenuItem(title: 'Flight', icon: Icon(Icons.flight)),
        TodoMenuItem(title: 'Music', icon: Icon(Icons.audiotrack)),
      ];
    

然后我的任务是使用 itemBuilder 将其映射到 PopUpMenuButtonWidget。这是我为它写的课程。

    class PopupMenuButtonWidget extends StatelessWidget
        implements PreferredSizeWidget 
      const PopupMenuButtonWidget(
        Key key,
      ) : super(key: key);
      @override
      Widget build(BuildContext context) 
        return Container(
          color: Colors.lightGreen.shade100,
          height: preferredSize.height,
          width: double.infinity,
          child: Center(
            child: PopupMenuButton<TodoMenuItem>(
              icon: Icon(Icons.view_list),
              onSelected: ((valueSelected) 
                print('valueSelected: $valueSelected.title');
              ),
              itemBuilder: (BuildContext context) 
                return foodMenuList.map((TodoMenuItem todoMenuItem) 
                  return PopupMenuItem<TodoMenuItem>(
                    value: todoMenuItem,
                    child: Row(
                      children: <Widget>[
                        Icon(todoMenuItem.icon.icon),
                        Padding(
                          padding: EdgeInsets.all(8.0),
                        ),
                        Text(todoMenuItem.title),
                      ],
                    ),
                  );
                ).toList();
              ,
            ),
          ),
        );
      
    
      @override // implement preferredSize
      Size get preferredSize => Size.fromHeight(75.0);
    

但是,它在这一行返回错误。

    return foodMenuList.map((TodoMenuItem todoMenuItem) 

错误提示

Undefined name 'foodMenuList'.
Try correcting the name to one that is defined, or defining the name.

如何将 foodMenuList 列表“映射”到小部件?

【问题讨论】:

【参考方案1】:

您的foodMenuList 是在todoMenuItem 类中声明的,而您尝试引用它就像它是PopupMenuButtonWidget 的一部分(您在PopupMenuButtonModget 的上下文中执行this.foodMenuList

您可以在PopupMenuButtonWidget 中创建TodoMenuList 的实例,然后使用它。

final TodoMenuItem _todoMenu = TodoMenuItem();

Widget build(BuildContext context) 
...
// Someplace where you need to use the list
_todoMenu.foodMenuList
...

【讨论】:

以上是关于无法在 Flutter 中使用 .map 函数的主要内容,如果未能解决你的问题,请参考以下文章

Flutter web 无法使用移动项目中的包

Flutter 如何将裁剪器添加到 fl_chart (CustomPainter)

Flutter WebView 插件无法播放某些 YouTube 视频

Flutter Hive 无法检索 Map

Flutter Google Maps 插件在 iOS 上无法正常工作

google_maps_flutter - 自定义标记图标:无法启用 MyLocation 图层,因为未授予位置权限