[英]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.