如何在 Dart 中开启 Enum?

问题描述 投票:0回答:3

我正在观看 The Boring Flutter Development Show,其中其中一集展示了 Bloc 的实现。

现在有这样一段代码,我认为用 Switch 语句替换会更好,你知道,以防将来出现更多情况:

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

...所以我尝试实现它,但它给了我一些错误,说

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

...一切正常,但我想知道是否有另一种方法可以切换 Enum 以及为什么它说当我在这一行中使用它时,未使用局部变量 StoryType 的值:

_storiesTypeController.stream.listen((storyType)

然后我切换它?

flutter dart switch-statement
3个回答
18
投票

您有一个位于外部作用域中的冗余变量:

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

您可以在

Dart 语言之旅
中找到更多关于
switch
case 的信息。


1
投票

打开枚举很容易,例如:

enum ActivityType {
  running,
  climbing,
  hiking,
  cycling,
  ski
}

extension ActivityTypeNumber on ActivityType {
  int get number {
    switch (this) {
      case ActivityType.running:
        return 1;
      case ActivityType.climbing:
        return 2;
      case ActivityType.hiking:
        return 5;
      case ActivityType.cycling:
        return 7;
      case ActivityType.ski:
        return 10;
    }
  }
}

有关枚举以及如何使用其增强版本的更多信息


0
投票

使用枚举和 switch case 很容易。

enum PaymentStatus { accepted, declined, unauthorized }

这是下面的开关正在工作的枚举

switch (paymentStatus) {
      case PaymentStatus.accepted:
        postPaymentHandler.handleSuccesFlow();
      case PaymentStatus.declined:
        postPaymentHandler.handleDeclinedError();
      case PaymentStatus.unauthorized:
        postPaymentHandler.handleUnauthorizedError();
      default:
         globalErrorHandler.handleError()
    }
© www.soinside.com 2019 - 2024. All rights reserved.