不能 运行 具有良好的空安全性,因为依赖项不支持空安全

Cannot run with sound null safety because dependencies don't support null safety

我已经"Enabling null safety" on dart.dev and also migrated 我的整个 Flutter 应用程序都遵循了空安全。

现在,我正在尝试 运行 使用 flutter run。但是,由于以下错误,它不会启动:

Error: Cannot run with sound null safety, because the following dependencies
don't support null safety:

 - package:cloud_firestore_web
 - package:firebase_core_web
 - package:shared_preferences
 - package:url_launcher_web
 - package:firebase_auth
 - package:http
 - package:provider
...

For solutions, see https://dart.dev/go/unsound-null-safety
Failed to compile application.

URL 的指南说我现在应该 "wait for dependencies to migrate before you migrate your package", but I want to use (NNBD)。

我该怎么做?

首先,您应该通读 understand unsound null safety 的指南。如果您确定要 运行 您的应用程序具有不健全的空安全性,您可以使用以下命令:

flutter run --no-sound-null-safety

文章中没有记录 --no-sound-null-safety 选项,但是,在过去的几个月里我没有遇到任何问题(尤其是因为整个 Flutter 框架已经迁移到 null safety) .

文档现已更新以包含此内容。参见 Testing or running mixed-version programs

IDE 运行 arguments/configuration

要在您选择的 IDE 中进行设置,您可以使用:

  • IntelliJ/Android Studio 中:“编辑配置”(在您的 运行配置)→“额外的运行参数”。
  • Visual Studio代码中:在您的用户设置中搜索“Flutter 运行 additional args”。

在这两种情况下,添加 --no-sound-null-safety

测试配置

对于测试,您需要做同样的事情:

  • IntelliJ/Android Studio 中:“编辑配置”(在您的 运行 配置)→ “附加参数”。
  • Visual Studio代码中:在您的用户设置中搜索“Flutter test additional args”。

在这两种情况下,添加 --no-sound-null-safety

在 Android 工作室中:

运行 → 编辑配置添加额外的 运行 args--无声空安全

以防您使用 Visual Studio 代码 并在 单元测试 中遇到它。

Visual Studio代码→首选项设置搜索设置,输入“flutter test” Dart:Flutter 测试附加参数,添加项目添加“--no-sound-null-safety"

如果使用Visual Studio代码,在项目根目录下创建文件.vscode/launch.json并添加:

"args": [
         "--no-sound-null-safety"
        ]

完整代码:

{
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
                {
                        "name": "YOUR_PROJECT_NAME",
                        "program": "lib/main.dart",
                        "request": "launch",
                        "type": "dart",
                        "args": [
                                "--no-sound-null-safety"
                            ]
                }
        ]
}

如果您想要 运行 您的项目 --no-sound-null-safety,您可以将此行添加到 main.dart 文件的顶部(第一行)并添加注释...

// @dart=2.9

然后你的项目 运行s --no-sound-null-safety...

  1. 在终端执行以下命令接受所有SDK包许可

    flutter doctor --android-licenses
    
  2. 运行在终端中执行以下命令检查是否有平台依赖完成设置:

    flutter doctor
    

    输出:

    医生总结(查看全部详情,运行flutter doctor -v):

    [√] Flutter(频道开发,2.2.0-10.1.pre,在 Microsoft Windows [版本 10.0.19042.928],区域设置 en-US)

    [√] Android 工具链 - 为 Android 设备开发(Android SDK 版本 30.0.3)

    [√] Chrome - 为网络开发

    [√] Android Studio(4.1.0 版)

    [√] Visual Studio代码(1.55.2版本)

    [√] 已连接设备(可用 3 个)

    • 未发现问题!

  3. 如果发现没有问题则执行以下命令来构建具有不健全的空安全性的应用程序

    flutter run --no-sound-null-safety
    

如果您使用的是 Visual Studio Code,请转到:

  • 菜单文件首选项设置

  • 搜索 "Flutter 运行 附加参数"

  • 然后点击添加项目

  • 现在输入--no-sound-null-safety

  • 单击确定

运行

dart pub outdated --mode=null-safety

在终端中,如果有开发依赖更新,则更新依赖。

这可能会有帮助。

问题的发生是因为 Flutter 框架(2.2.0 及以上版本)现在支持开箱即用的声音空安全,但是 pub.dev 上有很多包和插件 尚未迁移到空安全,因此每当您 运行 buildrun 命令时都会引发错误。

要解决此问题,请在命令中添加标志 --no-sound-null-safety

示例:

flutter build [Target] --no-sound-null-safety

目标参数:

对于Android:

"apk" or "appbundle"

对于iOS:

"ipa"

如果您的代码未完全迁移到 null-safety,您 运行 会遇到此错误。您可以 运行 您的“混合版本”代码:

  • 使用Android StudioIDE

    复制: --no-sound-null-safety

  • 在Dart文件中

    main.dart 文件的顶部添加 // @dart=2.9,并使用播放 ► 图标 运行 应用程序。

    // @dart=2.9
    import 'package:flutter/material.dart';
    
    void main() {
      //...
    }
    
  • 使用命令行

    flutter run --no-sound-null-safety
    

    或者具体一点(在 Chrome 中说)

    flutter run -d chrome --no-sound-null-safety
    

打开一个终端 → 使用这个命令 → flutter run -d chrome --no-sound-null-safety.

这应该有效。

添加到 :

如果您构建的 APK file or AAB 文件没有可靠的空安全性:

只需在您的终端上执行此操作

flutter build apk --split-per-abi --no-sound-null-safety

flutter build apk --release --no-sound-null-safety

将您的库版本更新到最新版本。现在大多数图书馆支持。

假设,以防万一,有人收到此错误 flutter_html: ^0.8.2

将以下内容添加到您的 pubspec.yaml 文件中:

dependencies:
  flutter_html: ^3.0.0-alpha.2

所以,证明在项目中使用任何依赖都必须是包含null-safety机制的最新版本。

因此,在使用"--no-sound-null-safety"解决方案之前,请尝试搜索并使用您的依赖项的升级版本。

对于 VSCode 用户,将下面添加到 settings.json

"dart.flutterRunAdditionalArgs": [
    "--no-sound-null-safety"
],