【问题标题】:Flutter project build_runner issuesFlutter 项目 build_runner 问题
【发布时间】:2021-12-16 07:03:21
【问题描述】:

目前我正在尝试运行一个自动生成响应文件的项目。但是我在运行 build_runner cmd 时遇到了一些错误。

自动生成文件的命令:

flutter pub run build_runner build

以下是我得到的错误:

Bad state: Unexpected diagnostics:
/Users/user/development/flutter/bin/cache/dart-sdk/lib/internal/internal.dart:691:16 - This requires the 'non-nullable' language feature to be enabled.
[SEVERE] json_serializable:json_serializable on lib/database/database_helper.dart:

Bad state: Unexpected diagnostics:
/Users/user/development/flutter/bin/cache/dart-sdk/lib/internal/internal.dart:691:16 - This requires the 'non-nullable' language feature to be enabled.
[INFO] 1.7s elapsed, 1/17 actions completed.
[INFO] 2.8s elapsed, 1/17 actions completed.
[INFO] 3.9s elapsed, 1/17 actions completed.
[INFO] 5.0s elapsed, 1/17 actions completed.
[INFO] 6.0s elapsed, 1/17 actions completed.


这仍然是无限循环,永远不会结束。

为什么会发生这种情况?

环境改成sdk: ">=2.12.0 <3.0.0"

但这是我在运行命令时遇到的错误:

[SEVERE] Failed to snapshot build script .dart_tool/build/entrypoint/build.dart.
This is likely caused by a misconfigured builder definition.
[SEVERE] .dart_tool/build/entrypoint/build.dart:27:3: Warning: Operand of null-aware operation '?.' has type 'SendPort' which excludes null. - 'SendPort' is from 'dart:isolate'.  sendPort?.send(result);  ^Error: Cannot run with sound null safety, because the following dependenciesdon't support null safety: - package:build_runner_core - package:json_serializable - package:retrofit_generator - package:source_gen - package:build_config - package:build_runner - package:build - package:json_annotation - package:glob - package:crypto - package:logging - package:watcher - package:build_resolvers - package:timing - package:graphs - package:package_config - package:yaml - package:analyzer - package:built_collection - package:code_builder - package:dart_style - package:dio - package:tuple - package:retrofit - package:checked_yaml - package:pubspec_parse - package:build_daemon - package:args - package:io - package:convert - package:pub_semver - package:quiver - package:_fe_analyzer_shared - package:built_value - package:http_parser - package:http_multi_server - package:shelf - package:stream_transform - package:mime - package:shelf_web_socket - package:web_socket_channel - package:cli_util - package:fixnumFor solutions, see https://dart.dev/go/unsound-null-safety.dart_tool/build/entrypoint/build.dart:25:44: Error: The parameter 'sendPort' can't have a value of 'null' because of its type 'SendPort', but the implicit default value is 'null'. - 'SendPort' is from 'dart:isolate'.Try adding either an explicit non-'null' default value or the 'required' modifier.void main(List<String> args, [_i6.SendPort sendPort]) async {   

【问题讨论】:

  • 你试过this吗?
  • 是的,我每次运行 cmd 时都会这样做。我不认为它 releted 哟这个

标签: flutter dart build-runner


【解决方案1】:

我认为您的问题与健全的 null 安全性有关。

尝试在 pubspec.yaml 中为 null 安全设置环境

environment:
  sdk: ">=2.12.0 <3.0.0"

然后运行flutter cleanflutter pub get

这里的文档:https://dart.dev/null-safety

【讨论】:

  • 我确实改变了环境,但它给了我在最后一个问题中添加的错误。
  • 我之前确实尝试过,但对我没有任何效果。
【解决方案2】:

如果您使用版本sdk: "&gt;=2.12.0 &lt;3.0.0。 pubspec.yaml 中的所有包都将其迁移到null-safety 版本,但如果您不想使用null-safety 包,您可以在终端中尝试flutter run --no-sound-null-safety

【讨论】:

  • 我的一些包不支持空安全。由于构建运行器没有生成文件。你说的 Cmd 会在文件生成后执行吧?
【解决方案3】:

这是一个“缺少空安全”生成的错误,

什么是 Dart 语言中的 null 安全性?

答案:

在面向对象的编程语言中保证没有对象引用将具有 null 或 void 值。

当您选择 null 安全时,代码中的类型默认为不可为 null,这意味着变量不能包含 null,除非您说它们可以。

如何避免空安全错误?

您可以通过两种方式做到这一点:

  • 使用 --no-sound-null-safety 标志禁用声音空安全 dart 或颤振命令:$ dart --no-sound-null-safety run $ 颤振运行--no-sound-null-safety。

  • 或者,在入口点(文件)中设置语言版本 包含 main() 函数 - 到 2.9。

个人建议: 尝试迁移到空安全,因为颤振将仅支持空安全插件 如果您仍然采用旧方式,您将在没有文档的情况下面临很多问题,所以最好的方法是合并到 nullsafety 版本这里是一个关于如何迁移的链接:Migrate to null safety dart.dev

【讨论】:

    【解决方案4】:

    您可以尝试在您的 pubspec.yaml 中将您的包版本设置为 :any。 不推荐,但应该可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-10
      • 2021-10-15
      • 2019-08-01
      • 1970-01-01
      • 2020-08-23
      • 2021-08-14
      • 1970-01-01
      • 2019-11-19
      相关资源
      最近更新 更多