Flutter使用Packages

使用 Flutter Packages

Flutter 支持使用其他开发者在Flutter和Dart生态系统中共享的包。这可以使你快速的构建一个应用而不必从头开发一切。这篇文章我来介绍一下如何使用已经发布的packages。

查找包

使用一个包之前,首先得找到这个包,我们可以访问pub.dev来查找你需要的包。

添加一个包到项目中

添加 css_colors 包到一个项目中有如下步骤:

  • 添加依赖: 打开pubspec.yaml文件,在dependencies下面添加css_colors
  • 安装依赖:使用终端 cd 到你的项目目录下执行flutter pub get命令,或者在pubspec.yaml顶部点击Packegets get
  • 导入你添加的包:在你的Dart代码中添加一个正确的 import 语句。
  • 如果需要的话,重启或者停止你的应用:因为热重载和热重启只作用于Dart代码,不会作用于平台特定代码。在使用包的时候做一个重启应用可以有效的避免以下错误。

冲突解决

试想一下,如果你在一个应用中想使用 some_package 和 another_package两个包,而这两个包都依赖于url_launcher的不同版本。这就会造成包的版本依赖冲突。那么这种情况我们该如何解决呢?最好的方法来避免这个问题就是在指定依赖的时候使用版本范围而不是一个指定的版本。

1
2
3
dependencies:
url_launcher:^0.4.2 # 任意的0.4.x版本,当x>=2时都生效。
image_picker:‘0.1.1’ # 只有0.1.1版本生效。

如果some_package声明了上面的依赖项,而另一个_package声明了一个兼容的url_launcher依赖项,比如’0.4.5’或^0.4.0,那么Pub会自动解决这个问题。平台对Gradle模块和/或CocoaPods的特定依赖也以类似的方式解决。

即使some_package和another_package声明url_launcher的版本不兼容,它们实际上可能以兼容的方式使用url_launcher。在这种情况下,可以通过在应用程序的pubspec.yaml文件中添加依赖项覆盖声明来解决冲突,强制使用特定的版本。

强制使用url_launcher 0.4.3 版本修改如下代码:

1
2
3
4
5
dependencies:
some_package:
another_package:
dependency_overrides:
url_launcher: '0.4.3'

开发新包

如果现有的包满足不了你的特定需求,你可以开发一个自定义的包。下篇文章我们会讲述如何开发一个新包和插件。

管理包依赖和版本

为了是冲突的风险最低,我们可以在pubspec.yaml中指定一个版本范围。
为了确保应用在包更新时不会中断,我们可以使用以下方式来指定包版本范围:

  • 指定最小和最大的版本的范围约束:

    1
    2
    dependencies:
    url_launcher: '>=0.1.2 <0.2.0'
  • 使用插入符号语法的范围约束:

    1
    2
    dependencies:
    collection: '^0.1.2'

更新包依赖

当你添加完包以后,第一次使用flutter pub get的时候,Flutter 保存了具体的包版本号在pubspec.lock 文件中。这个确保你和你的团队成员在执行flutter pub get 命令时可以得到同样版本的包。

升级一个包的新版本,例如要使用一个包的新特性,执行flutter pub upgrade来获取pubspec.yaml中版本约束中允许的最高可用版本的包。

依赖没有发布的包

没有发布到pub.dev的包也可以用。对于私有的插件,或者没有准备好发布的包,可以使用附加的依赖项选项:

  • Path dependency: 一个Flutter 应用可以通过一个文件系统路径依赖一个插件,路径可以是相对的或者绝对的。例如要依赖一个位于应用统计目录的插件plugin1,可以使用如下语法:

    1
    2
    3
    dependencies:
    plugin1:
    path: ../plugin1/
  • Git dependency:你也可以使用一个存储在git版本库中的包,如果包位于repo的根目录,使用如下语法:

    1
    2
    3
    4
    dependencies:
    plugin1:
    git:
    url: git://github.com/flutter/plugin1.git
  • Git dependency on a package in a folder:Pub假定包在Git存储仓库的根目录中,如果不是的话,使用path参数来指定路径,例如:

    1
    2
    3
    4
    5
    dependencies:
    package1:
    git:
    url: git://github.com/flutter/packages.git
    path: packages/package1

最后,可以使用ref 参数将依赖项固定到特定的git提交,分支或者tag。

到这里,关于Flutter包的使用已经介绍完了,为了方便理解呢,我还是附上一个例子:
Flutter包的使用

谢谢您的支持!