[英]C# Yield Return on Dart / Flutter Return List<String> in Loop
我有以下方法:
List<DropdownMenuItem<String>> _buildGitIgnoreTemplateItems() {
var _dropDownMenuItems = List<DropdownMenuItem<String>>();
_gitIgnoreTemplateNames.forEach((templateName) {
_dropDownMenuItems.add(DropdownMenuItem(
child: Text(templateName),
value: templateName,
));
});
return _dropDownMenuItems;
}
我想要實現的是刪除變量_dropDownMenuItems
,例如:
List<DropdownMenuItem<String>> _buildGitIgnoreTemplateItems() {
_gitIgnoreTemplateNames.forEach((templateName) {
**yield return** DropdownMenuItem(
child: Text(templateName),
value: templateName,
);
});
}
您可以看到其他語言的類似實現,例如: C#
C#太早了,但是看起來像同步生成器
Iterable<DropdownMenuItem<String>> _buildGitIgnoreTemplateItems() sync* {
for(var templateName in _gitIgnoreTemplateNames) {
yield DropdownMenuItem(
child: Text(templateName),
value: templateName,
);
}
}
但是也許你只是想要
_gitIgnoreTemplateNames.map((templateName) =>
DropdownMenuItem(
child Text(templateName),
value: templateName)
).toList()
dart中的等效項是Stream
和StreamController
用於異步。 並且可Iterable
進行同步。 您可以手動創建它們,也可以使用帶有async*
或sync*
關鍵字的自定義功能
Iterable<String> foo() sync* {
yield "Hello";
}
Stream<String> foo() async* {
yield "Hello";
}
Dart具有更簡單的語法來實現您想要的:
List<DropdownMenuItem<String>> _buildGitIgnoreTemplateItems() {
return _gitIgnoreTemplateNames
.map((g) => DropdownMenuItem(
child: Text(g),
value: g,
))
.toList();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.