如何添加不支持 Null Safety 的 Flutter 插件

Posted

技术标签:

【中文标题】如何添加不支持 Null Safety 的 Flutter 插件【英文标题】:How to add a Flutter plugin that does not support Null Safety 【发布时间】:2021-11-25 15:37:09 【问题描述】:

嘿,我想制作一个包含文本超链接的“隐私政策复选框”,我在 pub.dev 中找到了我想要使用的 Link Plugin,但不幸的是它不支持 Null Safety。我正在 Flutter 2.5.1 中运行。

当我使用该包中的链接小部件时,它会显示通知

the library 'package:link/link.dart' is legacy, and should not be imported into a null safe library

我不能再热重载我的项目了。还有什么其他方法可以在颤动中显示超链接文本?

【问题讨论】:

你不能使用这个库,因为它已经过时了,寻找其他库或实现代码来归档你的功能 - create hyperlink flutter 像这样使用它的链接:git: url:github.com/phansier/link 网址是github.com/phansier/link.git 【参考方案1】:

我将把它作为一个更长的答案,而不仅仅是专门针对您的确切库,因为这是一个我可以看到更经常发生的问题。以下选项可能不适用于您的用例,但也适用于其他情况。

选项 1 - 检查 beta 版本

有时迁移已完成,但尚未稳定发布。您可以查看 pub 上的“版本”选项卡,看看其中一个预发布版本是否标有 Null Safety 徽章:

选项 2 - 检查存储库

有时迁移已完成,但尚未在 pub 上发布。有几种检查方法:

查看 pubspec.yaml,environment.sdk 键应列出 '>=2.12.0 =2.14.0 查看拉取请求并搜索 null 安全性;也许一个已经合并,这表明更改在它合并的分支上 调查问题并寻找零安全性;也许一个已经关闭,维护者在线程中删除了“完成”或类似的东西,这表明更改在它被合并的分支上

如果您确实发现存储库所在的版本是 null 安全的,则可以在 pubspec 文件中使用 git 引用:

  link:
    git:
      url: https://github.com/galonsos/link
      ref: master

阅读更多关于从 git in the pub docs 引用包的信息。

选项 3 - 检查存储库的分叉

这是您可能会与选项 2 一起执行的操作。在滚动浏览问题和 PR 时,您可能会偶然发现有人说“我在我的 fork 上做了这个”,或者有人将库转换为 (这发生在您的案例中:relevant PR)。如果您发现一个积极维护的分支满足您的要求,请像以前一样在您的 pubspec 文件中使用 git 引用来引用它。

选项 4 - 打开一个问题并等待(如果尚不存在)

这显然取决于包的作者是否仍然活跃在某个地方,或者您是否有时间等待。无论哪种方式,为一个问题打开一个问题从来都不是一个坏主意。

选项 5 - 自己动手

将库迁移到空安全可能会很耗时,具体取决于其大小和复杂性。无论如何,如果您不想从头开始重写一个非常具体的库,那么它可能是您唯一的选择,这是一个很好的练习,可以更好地理解库和飞镖本身。

如果您很好,请成为您希望在您之前找到的人,并在完成后打开原始存储库的 PR,这样其他人已经获得了选项 3 的帮助 :) 当然,使用 git参考使用您新升级的软件包。

选项 6 - 使用替代方法

这可能并不总是有效,但可能比自己执行 null 安全迁移更快。通常有其他包以稍微不同的方式做类似的事情。即使没有,您有时也可以自己构建一个快速的替代方案。例如,可以使用一些 GestureDetector 或 InkWell 和 url_launcher 包(与 used in the link package 相同的设置)快速构建链接。

选项 7 - 丢弃声音零安全

如果没有其他选项对您有效,您可以通过使用 --no-sound-null-safety 运行您的应用程序来降低声音空值安全性。您可以通过注释使分析器警告静音:

// ignore: import_of_legacy_library_into_null_safe
import 'package:link/link.dart';

不过,我不确定这会如何影响热重载,在此之前尝试使用其他选项之一是个好主意。

【讨论】:

谢谢,现在我知道它是如何工作的并且我正在尝试使用选项 6,并且在我安装 url_launcher 包(即支持空安全性)之后,它具有相同的问题通知。 The plugin 'url_launcher' doesn't have a main class defined in。所以,我尝试用flutter pub chance repair修复pub机会,终于成功了。【参考方案2】:

这样使用

   link:
       git:
         url: https://github.com/phansier/link.git

【讨论】:

但是为什么要依赖 library 呢,什么时候可以使用 RichText 轻松存档。链接库没有官方更新为空安全,也不保证未来git版本会提供支持,甚至有v2嵌入android 是的,可能无法保证链接库是否已正式更新为空安全,git版本将来是否会提供支持,但我只是建议他如何使用它他想要。 Android 参数的 v2 嵌入没有实际意义,因为 link 是一个纯 dart 库。此 URL 指向的分支已更新为空安全,并且可以作为有效依赖项工作。当然不能保证它会保持最新(考虑到它的简单性,我也不确定是否需要它)但这似乎是一个有效的答案(尽管有一个外部参考和几句话说明为什么会这样作品将是对它的改进)。

以上是关于如何添加不支持 Null Safety 的 Flutter 插件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中启用 Null-Safety?

SpringSpring 中的Null-Safety

Spring 中的Null-Safety

关闭之前 Flutter 项目的 Null Safety?

如何在 <Offsets> 列表中添加空值? null 不能添加,因为颤振 null 安全

Dart Null-Safety - 执行 dart 迁移以升级到新的 null 安全性时出现范围错误