Flutter 中 DropdownButton 的列表理解(Dart)
List Comprehension for DropdownButton in Flutter (Dart)
我目前正在学习 Flutter 并想用以下列表创建一个 DropdownButton
:
const List<String> currenciesList = [
'AUD',
'BRL',
'CAD',
'CNY',
'EUR',
];
DropdownButton
小部件的 item
属性需要一个列表。因此,我想通过使用列表理解来清理代码。我编写了以下函数来根据给定的字符串创建 DropdownMenuItem
:
DropdownMenuItem makeDropdownMenuItem (String currency) {
DropdownMenuItem item = DropdownMenuItem(
child: Text(currency),
value: currency,
);
return item;
}
不幸的是,当我使用我发现 here 的列表理解语法时,我得到一个错误:
child: DropdownButton<String>(
value: selectedCurrency,
items: currenciesList.map((currency) => makeDropdownMenuItem(currency)).toList(),
onChanged: (value) {
setState(() {
selectedCurrency = value;
});
},
type 'List<DropdownMenuItem>' is not a subtype of type
'List<DropdownMenuItem>?'
谁能帮我解决这个问题?非常感谢!
DropdownMenuItem 是泛型 class,因此您必须在 makeDropdownMenuItem 函数中明确指定实际类型:
DropdownMenuItem<String> makeDropdownMenuItem(String currency) {
final item = DropdownMenuItem(
child: Text(currency),
value: currency,
);
return item;
}
首先,
Unfortunately, when I use the list comprehension syntax I found, I get an error:
这不是新的列表理解。这是:
child: DropdownButton<String>(
value: selectedCurrency,
onChanged: (value) => setState(() => selectedCurrency = value),
items: [
for (final currency in currenciesList)
makeDropdownMenuItem(currency)
],
)
我发现它更简洁,您也可以添加 if
或嵌套 for
循环。
然后,正如@Midhun 所说,您需要将函数标记为返回 DropdownMenuItem<String>
。或者,您可以继续使用您的列表理解:
child: DropdownButton<String>(
value: selectedCurrency,
onChanged: (value) => setState(() => selectedCurrency = value),
items: [
for (final currency in currenciesList) DropdownMenuItem(
child: Text(currency),
value: currency,
);
],
)
我目前正在学习 Flutter 并想用以下列表创建一个 DropdownButton
:
const List<String> currenciesList = [
'AUD',
'BRL',
'CAD',
'CNY',
'EUR',
];
DropdownButton
小部件的 item
属性需要一个列表。因此,我想通过使用列表理解来清理代码。我编写了以下函数来根据给定的字符串创建 DropdownMenuItem
:
DropdownMenuItem makeDropdownMenuItem (String currency) {
DropdownMenuItem item = DropdownMenuItem(
child: Text(currency),
value: currency,
);
return item;
}
不幸的是,当我使用我发现 here 的列表理解语法时,我得到一个错误:
child: DropdownButton<String>(
value: selectedCurrency,
items: currenciesList.map((currency) => makeDropdownMenuItem(currency)).toList(),
onChanged: (value) {
setState(() {
selectedCurrency = value;
});
},
type 'List<DropdownMenuItem>' is not a subtype of type 'List<DropdownMenuItem>?'
谁能帮我解决这个问题?非常感谢!
DropdownMenuItem 是泛型 class,因此您必须在 makeDropdownMenuItem 函数中明确指定实际类型:
DropdownMenuItem<String> makeDropdownMenuItem(String currency) {
final item = DropdownMenuItem(
child: Text(currency),
value: currency,
);
return item;
}
首先,
Unfortunately, when I use the list comprehension syntax I found, I get an error:
这不是新的列表理解。这是:
child: DropdownButton<String>(
value: selectedCurrency,
onChanged: (value) => setState(() => selectedCurrency = value),
items: [
for (final currency in currenciesList)
makeDropdownMenuItem(currency)
],
)
我发现它更简洁,您也可以添加 if
或嵌套 for
循环。
然后,正如@Midhun 所说,您需要将函数标记为返回 DropdownMenuItem<String>
。或者,您可以继续使用您的列表理解:
child: DropdownButton<String>(
value: selectedCurrency,
onChanged: (value) => setState(() => selectedCurrency = value),
items: [
for (final currency in currenciesList) DropdownMenuItem(
child: Text(currency),
value: currency,
);
],
)