因为依赖项不支持空安全,所以无法使用声音空安全运行。

213
我已经按照dart.dev上的"启用空安全"并且迁移了整个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中的指南称我应该“在迁移您的软件包之前等待依赖项迁移”,但我现在想立即使用默认情况下不可为空(NNBD)。
我该如何做呢?
17个回答

343

首先,您应该阅读 了解不安全的空安全性 指南。如果您确定想要在应用程序中使用不安全的空安全性,请使用以下命令:

flutter run --no-sound-null-safety

--no-sound-null-safety选项在文章中没有详细说明,但是在过去几个月中我并没有遇到任何问题(尤其是整个Flutter框架都已迁移到null safety后)。该文档现已更新以包括此内容。请查看Testing or running mixed-version programs

IDE运行参数/配置

要在所选择的IDE中设置,请使用以下方法:

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

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

测试配置

对于测试,您将想要执行相同的操作:

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

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


1
@ChiragArora 你可以将它添加到运行配置的附加参数中(单击设备旁边显示“main.dart”的下拉菜单,然后单击“编辑配置”)。 - creativecreatorormaybenot
1
是否可以使用 no-sound-null-safety 参数添加 fastlane 构建?@creativecreatorormaybenot - Dolphin
在构建 iOS 包时,Flutter 2.2.x 中的 sound null safety 参数似乎不起作用。@creativecreatorormaybenot 在 Stack Overflow 上提出了相关问题:https://stackoverflow.com/questions/67914266/seems-no-sound-null-safety-parameter-not-work-in-flutter-2-2-1 - Dolphin
通过VSCode提示,我挽救了我的生命 - 还设置了Flutter测试的附加参数(注意“test”!!)- 这使得单元测试起作用了。谢谢! - n13

155

在Android Studio中:

运行 → 编辑配置添加额外的运行参数--no-sound-null-safety

在这里输入图片描述


在Flutter 2.2.x中,构建iOS时是否可以正常工作? @issac https://stackoverflow.com/questions/67914266/seems-no-sound-null-safety-parameter-not-work-in-flutter-2-2-1 - Dolphin
这个命令没有生效 "dC:\src\flutter\flutter\flutter>flutter run --no-sound-null-safety Downloading Web SDK... 120.8s Error: No pubspec.yaml file found. This command should be run from the root of your Flutter project.",但是通过配置可以解决:Run --> Edit Configurations --> Add Additional Run args --> --no-sound-null-safety。 - Trophy Developers

59

简单解决方案

如果你正在使用Visual Studio Code,请按如下步骤操作:

  • 点击菜单 文件 (File)首选项 (Preferences)设置 (Settings)

  • 搜索"Flutter run additional args"

  • 然后点击 添加 (Add Item)

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

  • 点击 确定 (OK)


54

如果你的代码没有完全迁移到空安全,则会遇到此错误。你可以运行 "混合版本" 代码:

  • 使用Android Studio IDE

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

    Enter image description here

    enter image description here

  • 在 Dart 文件中

    在你的主文件 main.dart 中顶部添加 // @dart=2.9 ,然后使用 Play ► 图标运行应用程序。

// @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
    

  • 50
    如果使用Visual Studio Code,那么请在项目的根目录下创建文件.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"
                                ]
                    }
            ]
    }
    

    18

    如果你正在使用 Visual Studio Code 并且在 单元测试 中遇到了问题。

    Visual Studio Code → 首选项设置搜索设置,输入“flutter test”Dart: Flutter Test Additional Args, 添加项目添加“--no-sound-null-safety

    --no-sound-null-safety 的说明图片


    2
    如果是针对Flutter测试的话,那答案应该是正确的。但如果在运行时遇到错误,您应该为Flutter Run添加附加参数。因此,请在设置中搜索Flutter Run,然后像上面那样添加。 - Ayush Oli

    9

    如果你想使用 --no-sound-null-safety 运行项目,可以在 main.dart 文件的顶部(第一行)添加以下代码(带注释)...

    // @dart=2.9

    这样你的项目就可以使用 --no-sound-null-safety 进行运行了...


    在我的情况下,我已经添加了"//@dart=2.9"; 但是,在TEST\main.dart中。 - GtdDev

    8

    运行

    dart pub outdated --mode=null-safety
    

    在终端中,如果存在开发依赖项的更新,则更新该依赖项。

    这可能会有所帮助。


    7
    问题的原因是Flutter框架(版本2.2.0及以上)现在默认支持空安全(null safety),但是许多pub.dev上的包和插件尚未迁移到空安全,所以每当您运行buildrun命令时就会引发错误。
    为了解决这个问题,在您的命令中添加标志--no-sound-null-safety
    例如:
    flutter build [Target] --no-sound-null-safety
    

    目标参数:

    对于Android:

    "apk" or "appbundle"
    

    iOS系统:

    "ipa"
    

    1
    另外一个例子,这个对我有效: flutter build apk --release --no-sound-null-safety - ege men

    6
    1. Execute the following command in the terminal to accept all SDK package licenses

      flutter doctor --android-licenses
      
    2. Run the following command in the terminal to check if there are any platform dependencies to complete the set up:

      flutter doctor
      

      OUTPUT:

      Doctor summary (to see all details, run flutter doctor -v):

      [√] Flutter (Channel dev, 2.2.0-10.1.pre, on Microsoft Windows [Version 10.0.19042.928], locale en-US)

      [√] Android toolchain - develop for Android devices (Android SDK version 30.0.3)

      [√] Chrome - develop for the web

      [√] Android Studio (version 4.1.0)

      [√] Visual Studio Code (version 1.55.2)

      [√] Connected device (3 available)

      • No issues found!

    3. If no issues are found then execute the following command to build an application with unsound null safety

      flutter run --no-sound-null-safety
      

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