生成器无法针对未迁移到空安全的库进行操作。

43

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

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

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

这是当前的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
我卡在这一点上了,如何解决这个问题。
6个回答

62

我发现json_serializable >=4.0.0依赖于json_annotation >=4.0.0 <4.1.0,而json_annotation: ^4.0.0包含了Null Safety,但是json_serializable: ^4.0.2没有,所以错误就出现了。

所以我将这两个包都降级:

json_annotation: 3.1.1

json_serializable: 3.5.1

它们现在正常工作。


1
我被奇怪的依赖地狱困住了。依赖于build_runner 1.12.2和json_serializable 3.5.1,版本解决失败。 - Oliver Dixon
8
使用 build_runner: ^1.10.9。 - zavora
3
我使用了 json_annotation: ^3.0.1, build_runner: ^1.0.0, json_serializable: ^3.3.0 这些库,它们对我有用。 - Abhitesh khatri

30

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

在您的pubspec.yaml中,如果您使用以下方式启用null safety:

environment:
   sdk: ">=2.12.0 <3.0.0"

如果您的“sdk”环境小于2.12.0,那么最新的json_serializable包可能会出现问题。

参考:幕后故事:SDK约束

但是,如果您不想更新以支持空安全(null safety),则需要像您提到的那样将相关的json_serializable软件包降级。


9
在您的pubspec.yaml文件中,较低的SDK版本应为>=2.12
environment:
  sdk: '>=2.12.0 <3.0.0'

使用以下版本(均支持null-safe)

json_annotation: ^4.0.1
json_serializable: ^4.1.2
build_runner: ^2.0.3

之后执行:

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

6

尝试设置:

sdk: '>=2.12.0 <3.0.0'

当我使用 json_serializable: ^4.0.1json_annotation: ^4.0.1 时,它对我起作用。


0

升级您的 pubspec 文件,

  sdk: '>=2.12.0 <3.0.0'

  json_annotation: ^4.0.1
  json_serializable: ^4.1.0
  build_runner: ^1.12.2

升级软件包后运行此命令:

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

0

我遇到了同样的问题,并通过以下步骤解决:

  1. 设置 sdk: '>=2.12.0 <3.0.0'

  2. json_serializablejson_annotation 版本更改为 ^4.0.0 (不是 4.1.0)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接