使用'is'的Dart 2.1.0 Smart Cast无法正常工作

时间:2019-06-26 03:02:31

标签: flutter dart

我正在使用Bloc模式,并具有以下代码来定义我的状态:

import 'package:meta/meta.dart'

@immutable
abstract class UiState {}

class Loading extends UiState {}

class Success extends UiState {
  Success(this.message);

  final String message;
}

class Failure extends UiState {}

我尝试如下使用UiState

class MyWidget extends StatelessWidget {
  const MyWidget({
    Key key,
    @required this.uiState,
  }) : super(key: key);

  final UiState uiState;

  Widget build(BuildContext context) {
    if (uiState is Success) {
      return Text(uiState.message);
    }
    ...
  }
}

但是VSCode告诉我,“未为类'UiState'定义getter'消息'”。

我以前使用过智能铸模,但它们确实起作用。但是在这种情况下,我无法弄清为什么它不起作用。

我的pubspec具有以下内容:

environment:
  sdk: ">=2.1.0 <3.0.0"

所以,我认为我的飞镖版本至少是2.1.0。

1 个答案:

答案 0 :(得分:1)

is仅对局部变量执行隐式类型提升。对于非局部变量,类型升级不是自动的,因为它们可能是getter函数的结果,该函数从一次访问返回另一次访问会返回不同的值。

参考文献: