i6x*_*x86 10 switch-statement dart flutter
我正在观看 The Boring Flutter Development Show,在其中一集中他们展示了 Bloc 的实现。
现在有这块代码,我认为最好用 Switch 语句替换,以防将来出现更多情况:
_storiesTypeController.stream.listen((storiesType) {
if (storiesType == StoriesType.newStories) {
_getArticlesAndUpdate(_newIds);
} else {
_getArticlesAndUpdate(_topIds);
}
});
Run Code Online (Sandbox Code Playgroud)
...所以我试图实现它,但它给了我一些错误说
switch 表达式的类型 'Type' 不能分配给 case 表达式的类型 'Stories Type'。
所以我想出了这个解决方法:
final storyType = StoriesType.newStories;
_storiesTypeController.stream.listen((storyType) {
switch (storyType) {
case StoriesType.newStories: {
_getArticlesAndUpdate(_newIds);
}
break;
case StoriesType.topStories: {
_getArticlesAndUpdate(_topIds);
}
break;
default: {
print('default');
}
}
});
Run Code Online (Sandbox Code Playgroud)
...一切正常,但我想知道是否有另一种方法可以切换 Enum 以及为什么当我在这一行中使用它时,它说未使用局部变量 storyType 的值:
_storiesTypeController.stream.listen((storyType)
Run Code Online (Sandbox Code Playgroud)
然后我切换过来?
cre*_*not 10
您有一个位于外部作用域中的冗余变量:
final storyType = StoriesType.newStories;
Run Code Online (Sandbox Code Playgroud)
由于 for 的回调_storiesTypeController.stream.listen定义了一个名为 的新变量storyType,因此不使用外部作用域中的变量。
您可以简单地删除冗余行:
final storyType = StoriesType.newStories;
Run Code Online (Sandbox Code Playgroud)
删除后,不应该有任何警告。
此外,您不需要在 -switch语句中使用大括号。调整后的代码如下所示:
_storiesTypeController.stream.listen((storyType) {
switch (storyType) {
case StoriesType.newStories:
_getArticlesAndUpdate(_newIds);
break;
case StoriesType.topStories:
_getArticlesAndUpdate(_topIds);
break;
default:
print('default');
}
});
Run Code Online (Sandbox Code Playgroud)
您可以在Dart 的语言之旅 中找到更多关于switch和的信息。case
| 归档时间: |
|
| 查看次数: |
9990 次 |
| 最近记录: |