我正在使用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"

因此,我认为我的dart版本至少为2.1.0。

最佳答案

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

引用文献:

  • https://github.com/dart-lang/sdk/issues/34480
  • https://github.com/dart-lang/sdk/issues/21530
  • 10-06 08:01