How to switch on Enum in Dart?
You have a redundant variable that lives in the outer scope:
final storyType = StoriesType.newStories;
Since the callback for _storiesTypeController.stream.listen
defines a new variable named storyType
, the variable from the outer scope is not used.
You can simply drop the redundant line:
final storyType = StoriesType.newStories;
After you have removed it, there should not be any warnings.
Additionally, you do not need curly braces in a switch
-statement. The adjusted code would look like this:
_storiesTypeController.stream.listen((storyType) {
switch (storyType) {
case StoriesType.newStories:
_getArticlesAndUpdate(_newIds);
break;
case StoriesType.topStories:
_getArticlesAndUpdate(_topIds);
break;
default:
print('default');
}
});
You can find out more about switch
and case
in Dart's language tour.
Comments
-
i6x86 almost 2 years
I'm watching The Boring Flutter Development Show where in one of the episodes they're showing the implementation of Bloc.
Now there's this chunk of code that I thought would be better replace with Switch statement, you know, in case there appears more cases in the future:
_storiesTypeController.stream.listen((storiesType) { if (storiesType == StoriesType.newStories) { _getArticlesAndUpdate(_newIds); } else { _getArticlesAndUpdate(_topIds); } });
... so I tried to implement it but it gave me some error saying that
Type 'Type' of the switch expression isn't assignable to the type 'Stories Type' of case expressions.
So I came up with this workaround:
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'); } } });
... and everything works fine but I wonder if there's another way to switch Enum and why it says the value of local variable storyType isn't used, when I use it in this line:
_storiesTypeController.stream.listen((storyType)
and I switch over it?