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

How to add a Flutter plugin that does not support Null Safety

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

当我使用该包中的 Link 小部件时,它会显示一条通知

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

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

这样使用

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

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

选项 1 - 检查测试版

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

选项 2 - 检查存储库

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

  • 查看 pubspec.yaml,environment.sdk 键应列出 '>=2.12.0 <3.0.0'(下限可能更高;有些库使用 '>= 2.14.0 <3.0.0' 但空安全需要 2.12.0)。
  • 调查拉取请求并搜索空安全;也许一个已经合并,这表明更改在它合并的分支上
  • 调查问题并寻找空安全;也许一个关闭了,维护者在线程中删除了“完成”或类似的东西,这表明更改在它被合并的分支上

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

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

阅读有关从 git in the pub docs.

引用包的更多信息

选项 3 - 检查存储库的复刻

这是你可能会与选项 2 一起做的事情。当滚动浏览问题和 PR 时,你可能会偶然发现有人说“我在我的叉子上做了这个”或者转换库的人的公开 PR结束(这发生在你的情况下:relevant PR)。如果您找到满足您要求的积极维护的分支,请像以前一样在您的 pubspec 文件中使用 git 引用来引用它。

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

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

选项 5 - 自己动手

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

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

选项 6 - 使用替代方案

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

选项 7 - 删除声音无效安全

如果其他选项中的 none 对您有效,您可以通过 运行 您的应用 --no-sound-null-safety 删除声音无效安全。您可以通过评论使分析器警告静音:

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

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