一个完整的应用程序往往会依赖很多第三方包,正如在原生开发中,Android使用Gradle来管理依赖,iOS用Cocoapods或Carthage来管理依赖,而Flutter也有自己的依赖管理工具,本节我们主要介绍一下flutter如何使用配置文件pubspec.yaml(位于项目根目录)来管理第三方依赖包。

YAML是一种直观、可读性高并且容易被人类阅读的文件格式,它和xml或Json相比,它语法简单并非常容易解析,所以YAML常用于配置文件,Flutter也是用yaml文件作为其配置文件,Flutter项目默认的配置文件是pubspec.yaml,我们看一个简单的示例:

name: flutter_in_action
description: First Flutter application.version: 1.0.0+1dependencies:flutter:sdk: fluttercupertino_icons: ^0.1.2dev_dependencies:flutter_test:sdk: flutterflutter:uses-material-design: true

下面,我们逐一解释一下各个字段的意义:

  • name:应用或包名称。
  • description: 应用或包的描述、简介。
  • version:应用或包的版本号。
  • dependencies:应用或包依赖的其它包或插件。
  • dev_dependencies:开发环境依赖的工具包(而不是flutter应用本身依赖的包)。
  • flutter:flutter相关的配置选项。

如果我们的Flutter应用本身依赖某个包,我们需要将所依赖的包添加到dependencies 下,接下来我们通过一个例子来演示一下如何依赖、下载并使用第三方包。

Pub仓库

Pub(https://pub.dartlang.org/ )是Google官方的Dart Packages仓库,类似于node中的npm仓库,android中的jcenter,我们可以在上面查找我们需要的包和插件,也可以向pub发布我们的包和插件。我们将在后面的章节中介绍如何向pub发布我们的包和插件。

示例

接下来,我们实现一个显示随机字符串的widget。有一个名为“english_words”的开源软件包,其中包含数千个常用的英文单词以及一些实用功能。我们首先在pub上找到english_words这个包,确定其最新的版本号和是否支持Flutter。

我们看到“english_words”包最新的版本是3.1.3,并且支持flutter,接下来:

  1. 将english_words(3.1.3版本)添加到依赖项列表,如下:

    dependencies:flutter:sdk: fluttercupertino_icons: ^0.1.0# 新添加的依赖english_words: ^3.1.3
    
  2. 下载包

    在Android Studio的编辑器视图中查看pubspec.yaml时,单击右上角的 Packages get 。

这会将依赖包安装到您的项目。您可以在控制台中看到以下内容:

   flutter packages getRunning "flutter packages get" in flutter_in_action...Process finished with exit code 0

你也可以在控制台,定位到当前工程目录,然后手动运行flutter packages get 命令来下载依赖包。

  1. 引入english_words包。

    import 'package:english_words/english_words.dart';
    

    在输入时,Android Studio会自动提供有关库导入的建议选项。导入后该行代码将会显示为灰色,表示导入的库尚未使用。

  2. 使用english_words包来生成随机字符串。

    class RandomWordsWidget extends StatelessWidget {@overrideWidget build(BuildContext context) {// 生成随机字符串final wordPair = new WordPair.random();return Padding(padding: const EdgeInsets.all(8.0),child: new Text(wordPair.toString()),);}
    }
    

    我们将RandomWordsWidget 添加到"计数器"示例的首页MyHomePage 的Column的子widget中。

  3. 如果应用程序正在运行,请使用热重载按钮 () 更新正在运行的应用程序。每次单击热重载或保存项目时,都会在正在运行的应用程序中随机选择不同的单词对。 这是因为单词对是在 build 方法内部生成的。每次热更新时,build方法都会被执行。

其它依赖方式

上文所述的依赖方式是依赖pub仓库的。但我们还可以依赖本地包和git仓库。

  • 依赖本地包

    如果我们正在本地开发一个包,包名为pkg1,我们可以通过下面方式依赖:

    dependencies:pkg1:path: ../../code/pkg1
    

    路径可以是相对的,也可以是绝对的。

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

    dependencies:pkg1:git:url: git://github.com/xxx/pkg1.git
    

    上面假定包位于Git存储库的根目录中。如果不是这种情况,可以使用path参数指定相对位置,例如:

    dependencies:package1:git:url: git://github.com/flutter/packages.gitpath: packages/package1

flutter之包管理相关推荐

  1. 【Flutter】包管理(14)Flutter 日期时间处理库 Jiffy 的深入理解和应用

    文章目录 一. 前言 二. 版本信息 三. Jiffy 的高级使用 1. 使用 Jiffy 进行日期查询 2. 使用 Jiffy 进行日期比较 3. 使用 Jiffy 进行日期范围的设定 四. Jif ...

  2. Flutter Provider状态管理-Consumer

    前言 如果对Consumer很了解的同学可以继续学习 Flutter Provider状态管理 - Selector 个人觉得Flutter的学习有三个很重要的阶段 widget的学习和使用 数据以及 ...

  3. Flutter - flutter_bloc状态管理

    继上一篇写了Flutter - GetX状态管理,会发现其实Flutter的状态管理的框架还是比较多的,用的比较多的有flutter_bloc.MobX.GetX等,今天我就来谈一谈我学习Flutte ...

  4. Python 精选笔试面试习题—类继承、方法对象、包管理、闭包、可变类型作为默认参数、列表引用、sort与sorted、 append 和 extend、深拷贝和浅拷贝

    1. 类继承 如下代码 class A(object):def show(self):print 'This is calss A'class B(A):def show(self):print 'T ...

  5. C/C++包管理工具Conan简介

        Conan是一个开源的.跨平台的.去中心化的C和C++包管理器,它的源码在https://github.com/conan-io/conan ,License为MIT,最新发布版本为1.38. ...

  6. Python包管理工具Distribute的安装

    Python包管理工具Distribute的安装 Python的包管理工具常见的有easy_install, setuptools, 还有pip, distribute,那麽这几个工具有什么关系呢,看 ...

  7. javascript原理_JavaScript程序包管理器工作原理简介

    javascript原理 by Shubheksha 通过Shubheksha JavaScript程序包管理器工作原理简介 (An introduction to how JavaScript pa ...

  8. pip包管理工具-install执行流程简单查看

    pip概述 pip是python提供的包管理工具,该工具提供了对python包的查找.下载.安装与卸载等功能的工具,当前是python中比较主流的管理工具. pip下载安装包的概述 pip工具的本质通 ...

  9. Linux包管理器apt/apt-get发现远程代码执行漏洞

    研究人员Max Justicz日前发现了知名Linux包管理器apt/apt-get中的远程代码执行漏洞,该漏洞允许外部进行中间人攻击并获取root权限以执行任何代码.该漏洞已在最新版本apt修复,如 ...

最新文章

  1. ML之分类预测之ElasticNet之PLoR:在二分类数据集上调用Glmnet库训练PLoR模型(T2)
  2. rpc 调用webservice怎样传递参数_五分钟让你了解RPC原理详解
  3. weed mount 之后出现文件删除不掉
  4. solrcloud线上创建collection,修改默认配置
  5. js 创建多行字符串
  6. RPC原来就是Socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化...
  7. Android【报错】java.lang.RuntimeException: Unable to start activity Activity无法打开的问题
  8. C#继承(初始化基类,重写,重载)
  9. Cohesity扩大云软件产品组合 目标直指云未来
  10. 学校计算机教室自查报告,学校专用教室自查报告范文
  11. 小说PHP最新源码,2019最新PTCMS小说精美多风格四套全新版源码+模板
  12. Centos6.4升级glibc_2.14
  13. 怎么装办公系统服务器,怎么安装oa系统教程
  14. java读取json格式数据_Java解析JSON格式数据
  15. 病痰饮者不能率以温药和之
  16. XML文档类型定义---XML Schema
  17. MTK平台ota升级后不删除u盘的update.zip
  18. PHP上传图片至OSS
  19. 无法像唐骏一样地成功
  20. hdu6172(Array Challenge)-Berlekamp-Massey算法

热门文章

  1. 我们都忽略了Html5的力量,如果只看成一种技术就大错特错了!
  2. 分享一些酷酷的特效,希望你也能够喜欢
  3. 干货 | 查资料利器:线上图书馆
  4. 天邑ty1208z海思3798刷版本_陕西电信天邑ty1208z_s905m-b盒子刷安卓系统教程
  5. python同时打开两个文件_在python中使用with打开多个文件的方法
  6. 「视频」VR购物有望解决现有二维网购模式的掣肘?
  7. 华为云服务-运维篇-弹性负载均衡
  8. KeyLife富翁笔记
  9. python高级练习题:多米诺平铺 - 5×2N局【难度:4级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
  10. mysql数据类型、字段类型