包含项的映射中的return语句:Flutter DropdownButton中的原因和作用方式

时间:2019-04-23 19:28:48

标签: dart flutter dropdownbutton

我是Flutter和Dart的新手。我正在遵循免费教程,但是我对在map中的dropdownButton中的item中如何有一个return语句感到困惑。这是如何运作的?我正在寻找有关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 个答案:

答案 0 :(得分:0)

对于新来的人来说,命名可能会造成混淆,但是让我为您解释一下您发布的代码:

因此,with open('hello.csv', 'r', encoding="latin-1") as csvfile: readCSV = csv.reader(csvfile, delimiter=',') with open('helloout.csv', 'w', encoding="latin-1") as outfile: outCSV = csv.writer(outfile,delimiter=',') for line in readCSV: new_column_value = func(line[j]) # Your modification function j column number new_line = line + [new_column_value] outCSV.writerow(newline) 构造函数希望使用DropdownButton的列表作为参数,但是在您的情况下,您没有DropdownMenuItem的列表,而您有DropdownMenuItem的列表。您需要的是一种将字符串转换为String的方法,最简单的方法是对字符串执行DropdownMenuItem,为每个for创建一个新的DropdownMenuItem您将其添加到列表中,然后将其发送到String。像这样:

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而不是列表(您无法将Iterable转换为Iterable),幸运的是List还有另外一件事称为Iterable的方法将其转换为toList()

现在,在您的情况下,必须转换的列表是List,即要应用的功能:

_currencies

(String dropDownStringItem) { // interested in this return statement return DropdownMenuItem<String>( value: dropDownStringItem, child: Text(dropDownStringItem), ); 将采用dropDownStringItem中每个元素的值。 _currencies将返回转换后的对象

希望这会有所帮助。