生成器无法定位尚未迁移到空安全的库

Oma*_* Fd 36 dart flutter dart-null-safety

尝试以下命令时会出现此问题:

flutter pub run build_runner build --delete-conflicting-outputs

错误信息:

[SEVERE] json_serializable:json_serializable on lib/models/shipping_address/shipping_address.dart:

Generator cannot target libraries that have not been migrated to null-safety.
package:deals_and_delivery/models/shipping_address/shipping_address.dart:6:7
  ?
6 ? class ShippingAddress {
  ?       ^^^^^^^^^^^^^^^
  ?
[INFO] Running build completed, took 3.6s

[INFO] Caching finalized dependency graph...
[INFO] Caching finalized dependency graph completed, took 49ms

[SEVERE] Failed after 3.7s
pub finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

pubspec.yaml:

dependencies:
  json_annotation: ^4.0.0
  flutter:
    sdk: flutter
...
dev_dependencies:
  build_runner: ^1.11.5
  json_serializable: ^4.0.2
  flutter_test:
    sdk: flutter
Run Code Online (Sandbox Code Playgroud)

这些是当前的 flutter 和 dart 版本:

[?] Flutter (Channel stable, 2.0.0, on Microsoft Windows [Version
> 10.0.19042.844], locale en-US)
>     • Flutter version 2.0.0 at C:\flutter
>     • Framework revision 60bd88df91 (22 hours ago), 2021-03-03 09:13:17 -0800
>     • Engine revision 40441def69
>     • Dart version 2.12.0
Run Code Online (Sandbox Code Playgroud)

我被困在这一点上,如何解决这个问题。

Oma*_* Fd 53

我发现这json_serializable >=4.0.0取决于json_annotation >=4.0.0 <4.1.0json_annotation: ^4.0.0包括Null Safetyjson_serializable: ^4.0.2 ,所以错误正在发生。

所以我降级了两个包:

json_annotation: 3.1.1
Run Code Online (Sandbox Code Playgroud)

json_serializable: 3.5.1
Run Code Online (Sandbox Code Playgroud)

他们再次正常工作。

  • 使用build_runner:^1.10.9 (5认同)
  • 使用 json_annotation: ^3.0.1, build_runner: ^1.0.0, json_serialized: ^3.3.0 它对我有用。 (2认同)

小智 28

我认为这完全取决于您是否打算升级整个项目以启用空安全。如果您想使用最新的json_serializable包(已启用空安全),则需要在您的环境中指定它。

在您的 pubspec.yaml 中,如果您使用以下内容启用空安全:

environment:
   sdk: ">=2.12.0 <3.0.0"
Run Code Online (Sandbox Code Playgroud)

...那么最新的json_serializable包应该可以正常工作。

参考:幕后:SDK 约束

如果他们给你那个错误,你的“sdk”环境很可能小于 2.12.0。

但是,如果您对为空安全进行更新不感兴趣,那么您可能需要像您提到的那样将关联的json_serializable包降级。


iDe*_*ode 9

在您的pubspec.yaml文件中,较低的 SDK 版本应该是>=2.12.

environment:
  sdk: '>=2.12.0 <3.0.0'
Run Code Online (Sandbox Code Playgroud)

使用以下版本(全部都是空安全的)

json_annotation: ^4.0.1
json_serializable: ^4.1.2
build_runner: ^2.0.3
Run Code Online (Sandbox Code Playgroud)

之后,运行:

flutter pub get
flutter pub run build_runner build --delete-conflicting-outputs
Run Code Online (Sandbox Code Playgroud)


小智 6

尝试设置:

sdk: '>=2.12.0 <3.0.0'
Run Code Online (Sandbox Code Playgroud)

json_serializable: ^4.0.1当我使用和时它对我有用json_anotation: ^4.0.1