带有项目的地图中的返回语句:在 Flutter DropdownButton 中,为啥以及如何工作

Posted

技术标签:

【中文标题】带有项目的地图中的返回语句:在 Flutter DropdownButton 中,为啥以及如何工作【英文标题】:Return statement within a map with items: within Flutter DropdownButton, Why and How it works带有项目的地图中的返回语句:在 Flutter DropdownButton 中,为什么以及如何工作 【发布时间】:2019-09-13 01:10:03 【问题描述】:

我是 Flutter 和 Dart 的新手。我正在关注一个免费教程,但我很困惑如何在项目中的地图中存在 return 语句:在 DropdownButton 中。这是如何运作的?我正在寻找关于为什么 return 语句存在以及它在哪里发送其值的说明。

我试图在地图中查找 return 语句的方式,但我可能在如何问这个问题上弄错了。代码按给定的方式工作,但我不确定它是如何工作的。是否有此代码的逐步简化形式,可能会导致更多的理解。就像现在“它在我头上”。

          DropdownButton<String>(

            items: _currencies.map(
                    (String dropDownStringItem) 

                   // interested in this return statement 
                  return DropdownMenuItem<String>(
                    value: dropDownStringItem,
                    child: Text(dropDownStringItem),
                  );
                
            ).toList(),  //convert to List


            onChanged: (String newValueSelected) 
              _onDropDownItemSelected(newValueSelected);
            ,

            value: _currentItemSelected,
          ),

【问题讨论】:

如果任何一个答案对您有用,您应该接受一个。谢谢 【参考方案1】:

命名可能会让新手感到困惑,但让我为您解释一下您发布的代码:

所以DropdownButton 构造函数期望DropdownMenuItem 列表作为参数,但在您的情况下,您没有DropdownMenuItem 列表,您有String 列表。您需要一种将字符串转换为DropdownMenuItem 的方法,最简单的方法是在字符串上执行for,为您拥有的每个String 创建一个新的DropdownMenuItem,将其添加到列表中然后发送到DropdownButton。比如:

List<DropdownMenuItem> newGenerated = [];
_currencies.forEach((value) 
    DropdownMenuItem newItem = DropdownMenuItem<String>(
                                  value: dropDownStringItem,
                                  child: Text(dropDownStringItem),
                                 );
    newGenerated.add(newItem)

 DropdownButton<String>(
        items: newGenerated,  //convert to List
        onChanged: (String newValueSelected) 
          _onDropDownItemSelected(newValueSelected);
        ,
        value: _currentItemSelected,
      ),

上面的代码和你的代码做同样的事情,但在我看来不是那么好。

您使用的函数map 用于将对象列表转换为其他元素的Iterable,对列表中要转换的每个元素应用函数。

要记住一件事,map 转换为 Iterable 而不是 List(你不能将 Iterable 转换为 List),幸运的是 Iterable 有另一种称为 toList() 的方法可以转换将其转换为List

现在,在您的情况下,必须转换的列表是 _currencies,即应用的函数:

 (String dropDownStringItem) 

                   // interested in this return statement 
                  return DropdownMenuItem<String>(
                    value: dropDownStringItem,
                    child: Text(dropDownStringItem),
                  );

dropDownStringItem 将获取_currencies 中每个元素的值。 return DropdownMenuItem ... 将返回转换后的对象

希望这会有所帮助。

【讨论】:

以上是关于带有项目的地图中的返回语句:在 Flutter DropdownButton 中,为啥以及如何工作的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 选择带有显示和返回值的列表

Flutter 如何遍历 ListView 中的每个项目?

将 Firebase 中的地图数据检索到 Flutter

如何处理 Flutter 谷歌地图控制器

Flutter 的 onTap 方法打开存储在 Firestore 中的经纬度

带有返回数据的 Flutter Back 按钮