Как включить Enum в Dart? - PullRequest
       48

Как включить Enum в Dart?

0 голосов
/ 02 июля 2019

Я смотрю Шоу Развития Скучного Флаттера, где в одном из эпизодов они показывают реализацию Блока.

Теперь есть кусок кода, который, я подумал, лучше заменить на оператор Switch, знаете, на случай, если в будущем появится больше случаев:

_storiesTypeController.stream.listen((storiesType) {
       if (storiesType == StoriesType.newStories) {
         _getArticlesAndUpdate(_newIds);
       } else {
         _getArticlesAndUpdate(_topIds);
       }
     });

... поэтому я попытался реализовать это, но это дало мне ошибку, сказав, что

Тип «Тип» выражения переключения не может быть назначен типу «Тип историй» выражений регистра.

Итак, я нашел этот обходной путь:

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');
      }
    }
  });

... и все работает нормально, но мне интересно, есть ли другой способ переключения Enum и почему он говорит, что значение локальной переменной storyType не используется, когда я использую его в этой строке:

_storiesTypeController.stream.listen((storyType)

а я это переключаю?

1 Ответ

1 голос
/ 02 июля 2019

У вас есть избыточная переменная, которая находится во внешней области:

final storyType = StoriesType.newStories;

Поскольку обратный вызов для _storiesTypeController.stream.listen определяет новую переменную с именем storyType, переменная из внешней области не используется.
Вы можете просто отбросить лишнюю строку:

final storyType = StoriesType.newStories;

После удаления не должно быть никаких предупреждений.
Кроме того, вам не нужны фигурные скобки в switch -заявление.Скорректированный код будет выглядеть так:

_storiesTypeController.stream.listen((storyType) {
    switch (storyType) {
      case StoriesType.newStories:
        _getArticlesAndUpdate(_newIds);
        break;
      case StoriesType.topStories:
        _getArticlesAndUpdate(_topIds);
        break;
      default:
        print('default');
    }
  });

Вы можете узнать больше о switch и case в Языковой тур Дарт .

...