【问题标题】:Non-nullable by default: how to enable the experiment?默认情况下不可为空:如何启用实验?
【发布时间】:2019-08-21 20:32:22
【问题描述】:

我刚刚在 DartPad 中尝试了以下操作:

void main() {
  int? x;
}

并得到以下错误:

Error compiling to JavaScript:
main.dart:2:6:
Error: This requires the 'non-nullable' experiment to be enabled.
  1. 如何启用该实验?我正在使用 Flutter SDK。

  2. 实验是否已经支持零安全静态分析?

【问题讨论】:

    标签: dart


    【解决方案1】:

    将以下行添加到 analysis_options.yaml

    analyzer:
      enable-experiment:
        - non-nullable
    

    【讨论】:

      【解决方案2】:

      通过三个步骤启用不可为空的实验:

      1. 在 pubspec.yaml 中添加 dart-sdk 版本

        environment:
          sdk: '>=2.8.0-dev.0 <2.8.0'
        
      2. 在 analysis_options.yaml 中添加启用不可为空的实验

        analyzer:
          enable-experiment:
            - non-nullable
        
      3. 运行你的 Dart 代码:

        dart --enable-experiment=non-nullable ./bin/hello_dart.dart
        

      【讨论】:

        【解决方案3】:

        对我来说,删除 pubspec.lock 并重新运行可以解决问题。我正在将项目从 Windows 导入到 Mac。

        【讨论】:

          【解决方案4】:

          您可以通过将标志 --enable-experiment=non-nullable 传递给编译器或分析器来启用实验。

          它还不是一个完整的功能,所以没有关于它会做什么的承诺。随意尝试,但不要将标志用于任何严重的事情。

          【讨论】:

          • 我可以启用它。效果很好。但是,它抱怨 Map 的 operator[] 永远不会返回 null 并且我的检查是错误的。是否已经有应用了 nullables 的 Dart SDK?
          • 否,SDK 尚未迁移。
          • 那么我们如何将它也传递给编译器分析器。例如调试?
          • 在这里查看@mikyou 的回答,实验现在被称为“non-nullable”而不是“nnbd”
          【解决方案5】:

          手动删除pubspec.lock 并运行flutter pub get 解决了这个问题。就我而言,这是由于回归。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-12-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-31
            • 1970-01-01
            • 2022-06-23
            相关资源
            最近更新 更多