2

我对 Dart 和 Flutter 都是新手,所以如果这离题了,请多多包涵。但是我已经用尽了我的 Googlefu 并且无法找到答案。

语境

我正在运行 Dart 2.10.4 和 Flutter 1.22.5。在这一点上,我只是从 Github 克隆了一堆示例应用程序并在本地运行它们

  • 跑步flutter pub get
  • 然后在 Android Studio 中点击 Run

我熟悉其他语言的包管理,并阅读过有关与 Dart 的潜在差异的文档,特别是

pub get 尽可能使用锁定在其中的依赖项的版本(pubspec.lock)

“如果可能”告诉我pubspec.lock文件并不总是得到尊重。我熟悉的行为是“如果不可能”引发错误。

我应该提一下,我克隆的所有存储库都不是非常新的。它们都有一年多的历史,但都有最近的更新。

发生了什么

所有的项目中,做一个flutter pub get 改变 pubspec.lock。这些更改都是将依赖项升级到一个nullsafety版本。例如boolean_selector1.0.52.1.0-nullsafety.1。起初这让我很困惑。深入pubspec.yaml研究受影响包的文件后发现,我的 Dart 版本确实可以满足 SDK 约束,例如boolean_selector。由于required关键字,这些版本更改破坏了所有代码库。

问题 1

据我了解,Null-Safety 更改的一部分是@required注释变为required. 据我了解,这些变化要到 Dart 2.12 才会出现。那么这里发生了什么?为什么包要发布nullsafetyDart 2.10 的版本?

问题2

pubspec.lock我当前的 Dart 版本可以满足该文件。再次使用该boolean_selector示例。有问题的 repo 将其锁定为 1.0.5,其 SDK 约束为sdk: '>=2.0.0 <3.0.0'. 我正在运行 Dart 2.10。一切都应该没问题。为什么要pub get强制升级到最新的兼容版本?

问题 3

我认为好的也许required是我们可以为 Dart 2.10 启用的实验性功能。我阅读了有关 NNBD 并dart migrate尝试过的信息。它似乎没有做任何事情required并且总是会出错。我读到dependency_overrides要使用更新版本的analyzer. 我会得到同样的错误。我显然错过了一些东西。如果 Dart 2.10 兼容required(而不是@required),我该如何做到这一点?

4

0 回答 0