我对 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_selector
从1.0.5
到2.1.0-nullsafety.1
。起初这让我很困惑。深入pubspec.yaml
研究受影响包的文件后发现,我的 Dart 版本确实可以满足 SDK 约束,例如boolean_selector。由于required
关键字,这些版本更改破坏了所有代码库。
问题 1
据我了解,Null-Safety 更改的一部分是@required
注释变为required
. 据我了解,这些变化要到 Dart 2.12 才会出现。那么这里发生了什么?为什么包要发布nullsafety
Dart 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
),我该如何做到这一点?