第3节:Package的使用、开发与发布

[TOC]

一、常用的第三方Package

参考文章:

二、第三方库的导入

  • 1、添加依赖:在pubspec.yaml文件中找到dependencies在里面添加要导入的第三方库。

Package使用1.png

注意①:导入的位置要与dependencies下面的flutter上下对齐,不然会不通过。

注意②:一般写在dependencies下面即可,dependencies 与dev_dependencies 分别是代表用户发布环境与本地环境开发。

  • 2、安装依赖:在 terminal中: 运行

    1
    2
    3
    flutter packages get
    或者
    flutter packages upgrade

    或者在IntelliJ等开发工具中点击pubspec.yaml文件顶部的Packages Get即可安装。

  • 3、使用依赖:在您的Dart代码中添加相应的import语句。

分割图1

三、如何依赖未发布的packages

即使未在Pub上发布,软件包也可以使用。对于不用于公开发布的专用插件,或者尚未准备好发布的软件包,可以使用其他依赖项选项。

  • 路径 依赖: 一个Flutter应用可以依赖一个插件通过文件系统的path:依赖。路径可以是相对的,也可以是绝对的。例如,要依赖位于应用相邻目录中的插件’plugin1’,请使用以下语法

    1
    2
    3
    dependencies:
    plugin1:
    path: ../plugin1/
  • Git 依赖: 你也可以依赖存储在Git仓库中的包。如果软件包位于仓库的根目录中,请使用以下语法:

    1
    2
    3
    4
    dependencies:
    plugin1:
    git:
    url: git://github.com/flutter/plugin1.git
  • Git 依赖于文件夹中的包: 默认情况下,Pub假定包位于Git存储库的根目录中。如果不是这种情况,您可以使用path参数指定位置,例如:

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

分割图1

四、开发Packages

Step 1: 创建package工程

要创建Dart包,请使用--template=package 来执行 flutter create,如:

1
flutter create --template=package adapt_cjhelper

image-20190306143736118

这将在adapt_cjhelper/文件夹下创建一个具有以下专用内容的package工程:

image-20190306143536586

Step 2: 实现package功能

对于纯Dart包,只需在主lib/<package name>.dart文件内或lib目录中的文件中添加功能 。

分割图1

五、发布Packages

1、处理pubspec.yaml

image-20190306154221495

问题1:处理包的相互依赖

如果您正在开发一个hello包,它依赖于另一个包,则需要将该依赖包添加到pubspec.yaml文件的dependencies部分

1
2
dependencies:
url_launcher: ^0.4.2

2、验证 packages

运行 dry-run 命令以查看是否都准备OK了:

1
$ flutter packages pub publish --dry-run

image-2019030615434995

3、发布 packages

最后, 运行发布命令:

1
2
3
4
$ flutter packages pub publish --server=https://pub.dev

# 不填的时候默认就是pub.dev,你不用特意的去发布到 https://pub.flutter-io.cn,因为你只要发布到pub.dev,就可以也在pub.flutter-io.cn中使用
$ flutter packages pub publish

3.1、如果你不是第一次上传时候,但又报了如下错 Authentication failed!

image-20230323183430698

则你需要重新登录flutter pub login

3.2、如果是第一次上传

第一次上传,会要求登录谷歌账号。这个时候终端会出现一个url地址,类似这样:

image-20190306155251926

将地址复制出来,在浏览器URL中输入打开这个地址,允许登录谷歌账号就可以了。确认登录后,就会从执行终端将开始连接谷歌并上传我们的插件包。

1
Waiting for your authorization...

变到

1
Authorization received, processing...

如下:

image-20190306160117171

此步有可能会执行失败,提示如下错误,这是因为谷歌被屏蔽而导致的失败。

image-20190306160634807

原因是虽然你网页成功了,但是终端ping google.com还没翻成功。

ping google 1

相关原理详细见:为什么ping不通google.com

此时你去执行curl ip.gs,得到的是不成功的超时结果。

image-20200821151008710

这个时候我们需要设置终端的HTTP代理。查看我们的代理,并在终端中设置对应的值,如下:

image-01903061622041

在终端中执行如下命令配置代理:

1
2
set http_proxy=http://127.0.0.1:1080
set https_proxy=https://127.0.0.1:1080

如果你使用的是ClashX可以直接复制终端命令:

image-20230319165811253

得到的结果会是:

1
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

配置好后重新执行发布命令

1
2
3
flutter packages pub publish --server=https://pub.dev

# 如果不写 --server=https://pub.dev ,你可能发布到其他服务

即可。

分割图1

附:macOS 终端设置http和https代理

1、运行命令 vim ~/.bashrc , 写入如下内容

1
2
3
4
export http_proxy="http://127.0.0.1:4780"
export https_proxy="https://127.0.0.1:4780"
export socket_proxy="socks://127.0.0.1:4781"
export socks_proxy="socks://127.0.0.1:4781"

4780为本地http代理端口,可能会有所偏差,需要查询代理配置。

当通过软件启动代理的时候,其启动按键,会为你的网络设置开启如下三个代理。而上面的代理接口为下:

image-20200821155621945

2、运行命令 vim ~/.bash_profile,写入如下内容

1
source ~/.bashrc

3、重启终端,运行命令curl ip.gs显示当前ip和所属地区查看是否代理成功。成功的话,国家是United States

image-20190306174914736

其他参考文章:终端连代理方法

其他

1、Flutter的pubspec.yaml是本地文件,怎么把路径抽出来

在 Flutter 中,如果你想将 pubspec.yaml 文件中的路径抽出来,可以使用 environmentdefinie 关键字来定义变量。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
environment:
sdk: ">=2.15.0 <3.0.0"

name: my_app
description: My Flutter app

# 抽出路径为变量
$lib_path: lib/

dependencies:
flutter:
sdk: flutter

# 使用抽出的路径变量
my_package:
path: $lib_path/my_package

dev_dependencies:
flutter_test:
sdk: flutter

flutter:
uses-material-design: true

在这个示例中,我们使用 $lib_path 定义了变量,并将 lib/ 赋值给它。然后,在 dependencies 部分中,我们使用 $lib_path 变量来引用 my_package 的路径。

这样做的好处是,如果你想要修改 lib 文件夹的路径,你只需要在 pubspec.yaml 文件中修改 $lib_path 变量的值即可,而不需要在整个文件中搜索和替换路径。