【问题标题】:This requires non-nullable language feature to be enabled — Dart non-nullable syntax error这需要启用不可为空的语言功能 - Dart 不可为空的语法错误
【发布时间】:2020-11-18 02:00:57
【问题描述】:

我在pubspec.yaml 文件中激活了 Dart 不可为空的语法实验:

name: tests
description: A new Flutter application.

publish_to: 'none'
version: 1.0.0+1

environment:
  sdk: ">=2.9.0-21.0.dev.flutter <3.0.0"

analyzer:
  enable-experiment:
    - non-nullable

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.3

dev_dependencies:
  flutter_test:
    sdk: flutter
flutter:
  uses-material-design: true

所以,现在在运行 flutter pub get 之后,我正在尝试使用不可为空的语法创建一个类:

class Component_Decorator_A extends Component_Decorator {
  Component_Decorator_A([Component? component]) : super(component);

  @override
  operation() {
    component?.operation();
    print('Component_Decorator_A.Operation()');
  }
}

令人惊讶的是,Android Studio 中的语法分析器说:

This requires non-nullable language feature to be enabled. Try updating your pubspec.yaml to set the minimum SDK constraint to 2.9.9 or higher, and running pub get.

好的,我无法按照建议将最低 SDK 版本设置为 2.9.0,只要我每次尝试在我的 pubspec.yaml 中设置 environment: sdk: "&gt;=2.9.0 &lt;3.0.0",随后的 flutter pub get导致下一个版本解决我无法解决的错误:

flutter pub get
Running "flutter pub get" in master000... 

The current Dart SDK version is 2.9.0-21.0.dev.flutter-2e05e6c94a.

Because patterns_experiments_and_tests requires SDK version >=2.9.0 <3.0.0, version solving failed.
---- Log transcript ----
FINE: Pub 2.9.0-21.0.dev.flutter-2e05e6c94a
MSG : Resolving dependencies...
SLVR: fact: patterns_experiments_and_tests is 1.0.0+1
SLVR: derived: patterns_experiments_and_tests
SLVR: fact: patterns_experiments_and_tests requires SDK version >=2.9.0 <3.0.0
SLVR: conflict: patterns_experiments_and_tests requires SDK version >=2.9.0 <3.0.0
SLVR: Version solving took 0:00:00.060030 seconds.
    | Tried 1 solutions.
FINE: Resolving dependencies finished (0.1s).
ERR : The current Dart SDK version is 2.9.0-21.0.dev.flutter-2e05e6c94a.
    | 
    | Because patterns_experiments_and_tests requires SDK version >=2.9.0 <3.0.0, version solving failed.
FINE: Exception type: SolveFailure
FINE: package:pub/src/solver/version_solver.dart 312:5   VersionSolver._resolveConflict
    | package:pub/src/solver/version_solver.dart 133:27  VersionSolver._propagate
    | package:pub/src/solver/version_solver.dart 97:11   VersionSolver.solve.<fn>
    | ===== asynchronous gap ===========================
    | dart:async                                         Future.catchError
    | package:pub/src/utils.dart 113:52                  captureErrors.wrappedCallback
    | package:stack_trace                                Chain.capture
    | package:pub/src/utils.dart 126:11                  captureErrors
    | package:pub/src/command_runner.dart 193:13         PubCommandRunner.runCommand
---- End log transcript ----

pub get failed (1; ---- End log transcript ----)
Process finished with exit code 1

这里应该注意flutter doctor -v 报告项目中的一切都非常“OK”:

[✓] Flutter (Channel master, 1.21.0-5.0.pre, on Mac OS X 10.15.5 19F101, locale ru-RU)
    • Flutter version 1.21.0-5.0.pre at /Applications/flutter
    • Framework revision 2a063fc6c0 (11 дней назад), 2020-07-17 12:51:01 -0400
    • Engine revision 1493883bf0
    • Dart version 2.9.0 (build 2.9.0-21.0.dev 2e05e6c94a)
 
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
    • Android SDK at /Users/sergeglushenko/Library/Android/sdk
    • Platform android-30, build-tools 30.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 11.5)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.5, Build version 11E608c
    • CocoaPods version 1.8.4

[✓] Android Studio (version 4.0)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 47.1.2
    • Dart plugin version 193.7361
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)

[✓] Connected device (1 available)
    • macOS (desktop) • macos • darwin-x64 • Mac OS X 10.15.5 19F101

您能否建议我如何使 Dart 不可为空的语法在 Android Studio(最新版本)中稳定可用?

【问题讨论】:

    标签: android-studio flutter dart non-nullable


    【解决方案1】:

    我认为这个问题已经在新版本中得到解决。空安全的迁移指南现已发布,this comment 中提到:

    请阅读https://dart.dev/null-safety/migration-guide。你不能 只需打开零安全。我们有可用的文档和迁移工具 给你!

    如果还是不行,试试here的建议:

    您应该从 sdk 增加您当前的 sdk 版本:">=2.7.0 =2.12.0 dart migrate --apply-changes。我推荐第二个

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-25
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多