【问题标题】:Cannot run with sound null safety because dependencies don't support null safety由于依赖项不支持 null 安全性,因此无法以可靠的 null 安全性运行
【发布时间】:2021-03-03 04:15:02
【问题描述】:

我已经关注 "Enabling null safety" on dart.devmigrated 我的整个 Flutter 应用程序,以实现 null 安全性。

现在,我正在尝试使用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",但我现在想使用non-nullable by default (NNBD)。

我该怎么做?

【问题讨论】:

    标签: flutter dart dart-null-safety


    【解决方案1】:

    将您的库版本更新到最新版本。现在大部分图书馆都支持。

    【讨论】:

      【解决方案2】:

      添加到creativecreatorormaybenot's answer:

      如果您正在构建您的 APK 文件或 AAB 文件而没有可靠的 null 安全性:

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

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

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

      【讨论】:

        【解决方案3】:

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

        • 使用Android Studio IDE

          复制: --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
          

        【讨论】:

        • 我已经在 5 月 16 日发布了这个解决方案,但是由于其中一位版主的误解,它被删除了。我已经标记了该帖子,它处于待处理状态,并且可以在该状态下保持一个月左右。
        【解决方案4】:

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

        这应该可行。

        【讨论】:

          【解决方案5】:

          出现问题是因为 Flutter 框架(版本 2.2.0 及更高版本)现在支持开箱即用的健全的 null 安全性,但 pub.dev 上的大量包和插件不支持已迁移到 null 安全性,因此每当您运行 buildrun 命令时都会引发错误。

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

          例子:

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

          目标参数:

          对于安卓:

          "apk" or "appbundle"
          

          对于 iOS:

          "ipa"
          

          【讨论】:

          • 一个更多的例子,这对我有用:flutter build apk --release --no-sound-null-safety
          【解决方案6】:

          运行

          dart pub outdated --mode=null-safety
          

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

          这可能会有所帮助。

          【讨论】:

            【解决方案7】:

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

            • 菜单文件首选项设置

            • 搜索“Flutter 运行附加参数”

            • 然后点击添加项目

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

            • 点击确定

            【讨论】:

              【解决方案8】:
              1. 在终端执行以下命令接受所有SDK包许可

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

                flutter doctor
                

                输出:

                医生总结(要查看所有详细信息,请运行flutter doctor -v):

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

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

                [√] Chrome - 为网络开发

                [√]Android Studio(4.1.0版)

                [√] Visual Studio Code(版本 1.55.2)

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

                • 未发现任何问题!

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

                flutter run --no-sound-null-safety
                

              【讨论】:

                【解决方案9】:

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

                // @dart=2.9

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

                【讨论】:

                • 就我而言,我添加了“ // @dart=2.9”;但是,在 TEST\main.dart
                【解决方案10】:

                如果使用 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"
                                            ]
                                }
                        ]
                }
                

                【讨论】:

                  【解决方案11】:

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

                  flutter run --no-sound-null-safety
                  

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

                  文档现已更新以包含此内容。见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 测试附加参数”。

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

                  【讨论】:

                  • @ChiragArora 您可以将其添加到运行配置中的其他参数中(单击设备旁边显示main.dart 的下拉菜单,然后单击“编辑配置”)。
                  • 是否可以使用no-sound-null-safety 参数添加fastlane build? @creativecreatorormaybenot
                  • 在构建 ios 包时不适用于 Flutter 2.2.x @creativecreatorormaybenot stackoverflow.com/questions/67914266/…
                  • 用 VSCode 技巧挽救了我的生命——还设置了 Flutter 测试附加参数(注意“测试”!!)——这使得单元测试工作。谢谢!
                  【解决方案12】:

                  如果您使用 Visual Studio Code 并在 单元测试 中遇到它。

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

                  【讨论】:

                  • 如果是 Flutter Test,那将是一个正确的答案。但是如果你在运行时遇到错误,你应该为 Flutter Run 添加 Additional Args。所以在 Settings 中搜索 Flutter Run。然后像上面一样添加。
                  【解决方案13】:

                  在 Android Studio 中:

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

                  【讨论】:

                  • 在 Flutter 2.2.x 中构建 ios 时是否有效? @issac stackoverflow.com/questions/67914266/…
                  • 感谢为我工作
                  • 这不起作用" dC:\src\flutter\flutter\flutter>flutter run --no-sound-null-safety 正在下载 Web SDK... 120.8s 错误:没有 pubspec.yaml找到文件。这个命令应该从你的 Flutter 项目的根目录运行。但配置有效:运行 --> 编辑配置 --> 添加附加运行参数 --> --no-sound-null-safety
                  猜你喜欢
                  • 2021-05-25
                  • 1970-01-01
                  • 2021-09-02
                  • 2021-10-23
                  • 2021-09-29
                  • 2021-11-19
                  • 2021-09-18
                  • 1970-01-01
                  相关资源
                  最近更新 更多