最全的Flutter中pubspec.yaml及其yaml 语法的使用说明

前言

我们知道在Flutter项目中,依赖版本管理是通过pubspec.yaml的形式,因此了解yaml的一些简单语法和如何配置使用pubspec.yaml 也是相当的重要,下文会对yaml的使用进行简单介绍

什么是yaml

YAML(YAML Ain’t Markup Language)是一种易于阅读的、用于表示结构化数据的序列化格式。因为其语法简洁且可读性强,常用于配置文件和数据交换应用程序中。我们的flutter便是其使用的场景之一

相比较其他方式的配置文件的特点如下

  • 可读性强: YAML 的设计目标之一就是提高可读性,相比于 JSON 和 XML,其格式更接近于日常书写的文本,简单明了。
  • 缩进表示结构: YAML 使用缩进来表示数据的层级结构,而不是像 JSON 那样使用大括号和方括号,因此更清晰
  • 数据表示: YAML 和json 类似也可以表示多种数据结构,如标量(字符串、数值)、列表(数组)、字典(键值对)等。
  • 使用范围之广: YAML 被广泛应用于多种编程语言和框架中,特别是在配置文件中,如 Python 的 PyYAML、Ruby 的 Psych 和 Java 的 SnakeYAML,以及Flutter 的pubspec.yaml

pubspec.yaml 中常见字段使用

pubspec.yaml 是 Dart 和 Flutter 项目的配置文件,其中定义了项目的名称、版本、依赖项、环境等信息。虽然它本身是一个静态的配置文件,不支持像编程语言那样的“内部方法”,但其格式和配置选项本身可以视为“方法”,用于有效地管理项目配置。
1. 项目元数据
name: 指定项目名称,通常是小写字母和下划线。用于在 Dart 和 Flutter 生态系统中标识项目。

name: my_project

description: 项目的描述信息,帮助其他开发者理解项目的用途。

description: A new Flutter project.

version: 项目的版本号,格式为 x.y.z+build。其中 x.y.z 是语义化版本号,+build 是可选的构建号。

version: 1.0.0+1

2. 环境配置
environment: 指定项目所需的 Dart SDK 版本范围,以确保项目在兼容的 SDK 上运行。

environment:sdk: ">=2.12.0 < 3.0.0"

3. 依赖项管理
dependencies: 列出项目的运行时依赖项,包括第三方库和 Flutter SDK。

dependencies:flutter:sdk: fluttercupertino_icons: ^1.0.2

dev_dependencies: 列出开发环境所需的依赖项,通常用于测试、构建工具等。

dev_dependencies:flutter_test:sdk: fluttermocktail: ^0.3.0  

4. Flutter 特定配置
flutter: 包含 Flutter 项目特定的配置选项。

flutter:uses-material-design: true # uses-material-design: 指定项目是否使用 Material Design 组件。

5. 资源和资产
assets: 指定项目中需要包含的资源文件,如图像、音频等。

assets:- assets/images/- assets/audio/

fonts: 配置自定义字体,定义字体家族及其对应的字体文件路径。

fonts:- family: Ralewayfonts:- asset: fonts/Raleway-Regular.ttf- asset: fonts/Raleway-Italic.ttfstyle: italic

pubspec.yaml中更多字段说明

1. homepage
说明: 指定项目的主页 URL。
用途: 提供项目的更多信息链接,通常指向项目的官方网站或代码仓库。

homepage: https://example.com

2. repository
说明: 项目源代码的仓库 URL。
用途: 对于开源项目,提供代码仓库的位置。

repository: https://github.com/username/project

3. issue_tracker

说明: 项目的问题跟踪器 URL。
用途: 指向项目的错误报告或问题跟踪页面。

issue_tracker: https://github.com/username/project/issues

4. documentation
说明: 项目的文档 URL。
用途: 指向项目的文档页面,帮助开发者更好地使用和理解项目。

documentation: https://example.com/docs

5. publish_to
说明: 指定包发布的目标。
用途: 如果设置为 “none”,表示该包不应发布到 pub.dev。

publish_to: none

6. dependency_overrides
说明: 用于临时覆盖依赖项的版本。
用途: 在特定情况下需要调整依赖版本时使用,不建议长期使用。

dependency_overrides:some_package: 1.2.3

7. executables
说明: 定义要作为可执行文件导出的 Dart 脚本。
用途: 在 Dart 项目中,指定哪些脚本可以作为命令行工具使用。

executables:my_tool: bin/my_tool.dart

如何使用
激活包: 在项目根目录下运行以下命令,激活你的包。

pub global activate --source path .

运行命令: 激活后,你可以在命令行中使用 my_tool 命令。

my_tool # 可以当成dart脚本使用

8. transformers
说明: 定义项目中使用的编译器转换器。
用途: 在构建过程中,应用指定的代码转换器。

transformers:- some_transformer

9. platforms
说明: 指定支持的平台。
用途: 定义包或项目支持的平台类型,如 flutter, web, vm。

platforms:flutter:web:vm:

yaml基本语法

YAML 也是有自己的基本语法的,并且相比较json它更灵活,掌握其一些简单的语法才可以在pubspec.yaml 灵活运用
1. 标量
标量是 YAML 中最基本的数据类型,可以是字符串、布尔值、整数、浮点数等。

name: smile
age: 18
is_student: true

其类似json如下格式

{
"name":"smile",
"age":18,
"is_student":true
}

2. 列表
使用连字符 - 表示列表(数组)。

fruits:- apple- banana- pear

其类似json如下格式

 {"fruits":["apple","banana","pear"]
}

3. 字典
字典使用键值对表示(Map)

people:name: smileage: 18sex: boy

其类似json如下格式

{
"people":{
"name":"smile",
"age":18,
"sex":boy
}
}

4.其他语法
但是yaml比json更强大比如下面场景:
多行字符串
多行字符串可以使用 | 或 > 来表示。| 保留换行符,而 > 将换行符替换为空格。

# 可以用来做注释
description: |This is a multi-linestring that preservesline breaks.short_description: >This is a multi-linestring that folds lines.

锚点和引用
YAML 中的引用和锚点是一种很好用的功能,可以避免重复定义相同的数据结构。它们允许你在 YAML 文档中定义一个数据块,并在其他地方引用这个数据块。这对于复杂的配置文件特别有用,因为它可以减少冗余和维护成本,同时也提高配置文件的可读性

锚点和引用的基础用法
锚点 (&): 用于定义一个数据块,并为它指定一个名称,也可以叫做别名
引用 (*): 用于引用之前定义的锚点。
他们配合使用如下:

default_settings: &defaulthost: localhostport: 3306user: admindevelopment:<<: *defaultdatabase: dev_dbproduction:<<: *default host: prod.example.comdatabase: prod_db

其中 <<: 为yaml的合并键其作用就是将我们定义的default_settings合并到development下面类似这样,如果是相同的key 则合并后会被覆盖掉:

development:host: localhostport: 3306user: admindatabase: dev_db

复杂键
yaml中还存在复杂键,这种使用场景非常少可以了解下,类似三元运算

? - key1- key2
: "value"

数组作为键: 如果数组 [key1, key2] 被用作键,其对应的值是 “value”。

? name: complextype: object
: "This is a complex key"

对象作为键: 如果一个对象 {name: complex, type: object} 被用作键,对应的值是 “This is a complex key”。

end

以上基本上把flutter中的pubspec.yaml使用方法和yaml语法基本讲完了,看完这篇博客,基本上就可以上手开发配置了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Rust实现命令模式】

Rust实现命令模式 什么是命令模式命令模式的应用场景命令模式的在Rust中的关系图Rust中的命令模式代码示例运行结果总结 什么是命令模式 命令模式,即通过统一接口,如C#interface,亦或C中的抽象类的0方法,通过定义统一的接口,在定义不同的对象,为之接口实现具体的方法逻辑,再通…

golang 结构体作为形参传参

在 Go 中&#xff0c;BannerModel{} 这种写法是创建一个 BannerModel 结构体的实例&#xff08;空实例&#xff09;。这里有几个关键点需要理解&#xff1a; 基本语法解释&#xff1a; // 定义结构体 type BannerModel struct {ID intName string// ... 其他字段 }// 创建实…

使用UDP协议传输视频流!(分片、缓存)

背景 最近在开发工作中遇到需要两台本地设备之间进行视频流的传输的情况。但是团队一来没有这方面的专业人才&#xff0c;二来视频流的传续数据量很大&#xff0c;针对TCP和UDP的具体选择也不明确。 本文是在上诉背景之下进行的研究和开发工作。 目录 背景 UDP和TCP协议的…

【学术论文投稿】React全攻略:构建高性能前端应用的黄金法则

第六届国际科技创新学术交流大会暨管理科学信息化与经济创新发展学术会议&#xff08;MSIEID 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 1. React简介 2. React的三大核心概念 2.1 JSX 2.2…

鸿蒙应用App测试-专项测试(DevEco Testing)

注意&#xff1a;大家记得先学通用测试在学专项测试 鸿蒙应用App测试-通用测试-CSDN博客 注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&am…

【Android】Gradle 7.0+ 渠道打包配置

声明 该配置主要解决打包apk/aab需要动态修改渠道字段,方便区分渠道上架国内商店。 暂不支持批量打包(7.4版本无法通过只修改outputFileName的形式批量处理) 因为构建时需要拷贝/创建Output,然后修改outputFileName才能处理批量打包,但拷贝/创建在高版本中失效了。 目前的…

AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。

2024-10-31&#xff0c;由清华大学和北京大学共同创建的AndroidLab数据集&#xff0c;为安卓自主代理的训练和评估提供了一个包含操作环境、行动空间和可复现基准的系统框架&#xff0c;这对于推动安卓代理技术的发展具有重要意义。 数据集地址&#xff1a;Android Instruct|A…

HTTP请求和请求体Body

HTTP 请求体&#xff08;Request Body&#xff09;是 HTTP 请求的一个重要组成部分&#xff0c;它位于请求头&#xff08;Headers&#xff09;之后&#xff0c;用于向服务器发送数据。请求体通常用于 POST 和 PUT 请求中&#xff0c;但在某些情况下也可以用于其他类型的请求&am…

如何在算家云搭建Aatrox-Bert-VITS2(音频生成)

一、模型介绍 ‌ Aatrox - Bert -VITS2 模型是一种基于深度学习的语音合成系统&#xff0c;结合了 BERT 的预训练能力和 VITS2 的微调技术&#xff0c;旨在实现高质量的个性化语音合成。 二、模型搭建流程 1. 创建容器实例 进入算家云的“应用社区”&#xff0c;点击搜索找到…

OpenEuler 使用ffmpeg x11grab捕获屏幕流,rtsp推流,并用vlc播放

环境准备 安装x11grab(用于捕获屏幕流)和libx264(用于编码) # 基础开发环境&x11grab sudo dnf install -y \autoconf \automake \bzip2 \bzip2-devel \cmake \freetype-devel \gcc \gcc-c \git \libtool \make \mercurial \pkgconfig \zlib-devel \libX11-devel \libXext…

深度学习:Masked Self-Attention 详解

Masked Self-Attention 详解 Masked Self-Attention 是 Transformer 架构中解码器的关键组件&#xff0c;特别用于处理自回归任务&#xff0c;如文本生成。该机制确保模型在生成一个序列的每个元素时只能利用之前元素的信息&#xff0c;防止未来信息的泄露。以下是对 Masked S…

QCustomPlot添加自定义的图例,实现隐藏、删除功能(二)

文章目录 QCustomPlot初识和基本效果图实现步骤:详细代码示例:实现原理和解释:使用方法:其他参考要实现一个支持复选框来控制曲线显示和隐藏的自定义 QCPLegend 类,可以通过继承 QCPLegend 并重写绘制和事件处理方法来实现,同时发出信号通知曲线的状态变更。 QCustomPl…

聊一聊Elasticsearch的基本原理与形成机制

1、搜索引擎的基本原理 通常搜索引擎包括&#xff1a;数据采集、文本分析、索引存储、搜索等模块&#xff0c;它们之间的协作流程如下图&#xff1a; 数据采集模块负责采集需要搜索的数据源。 文本分析模块是将结构化数据中的长文本切分成有实际意义的词&#xff0c;这样用户…

《AI 大模型重塑软件开发:机遇与挑战》

《AI 大模型重塑软件开发&#xff1a;机遇与挑战》 在当今科技飞速发展的时代&#xff0c;AI 技术的不断进步正深刻地改变着各个领域&#xff0c;软件开发行业也不例外。AI 大模型的出现&#xff0c;正在重塑软件开发流程&#xff0c;为软件开发者、企业以及整个产业链带来了深…

PyCharm 导入本地包目录

PyCharm 是最新版 声明一下是野路子 现在我工程目录下有个 gen-py 文件夹&#xff0c;这是我 thrift 编译出来的 Python 依赖包 使用的话&#xff0c;我们可以在代码里加入系统路径 sys.path.append("./gen-py/") 但是这样写&#xff0c;PyCharm 没有提示&#…

80端口被进程 System PID=4 IIS导致的解决方法

是因为80端口被IIS占用。解决办法打开IIS管理器&#xff0c;然后停止&#xff1a;

Linux 有名管道

有名管道&#xff08;Named Pipe&#xff09;&#xff0c;也称为FIFO&#xff08;First In, First Out&#xff09;&#xff0c;是一种特殊的文件系统对象&#xff0c;它允许不相关的进程之间的通信。与无名管道不同&#xff0c;有名管道在文件系统中有一个路径名&#xff0c;因…

异步4位计数器(Quartus与Modelsim联合仿真)

异步计数器&#xff08;也称为ripple-through counter&#xff09;的特点是每一位触发器的输出作为下一位触发器的时钟输入&#xff0c;因此计数速度会因为级联触发器的传播延迟而受到限制。这种计数器的最大工作频率通常低于同步计数器。 一、电路符号 输入信号&#xff1a;时…

PS-基础学习(常用快捷键1.2-1.3)

常用快捷键 钢笔操作功能Alt 选择工具使用选择工具放到锚点上&#xff0c;按下alt&#xff0c;然后放到调整曲度的上面&#xff0c;可以修改一边的曲度可以修改出不平滑的转折点选择工具放到锚点上进行拖拽可以移动锚点的位置ctrl 选择工具使用选择工具&#xff0c;按住ctrl…

若依cloud版集成微信扫码登录-绑定篇

前言 集成微信扫码登录的话&#xff0c;需要把项目的账号和微信账号进行绑定&#xff0c;然后才可以进行扫码登录 本篇内容是项目绑定微信 还需要申请一个微信开放平台账号 微信公众平台申请&#xff08;测试平台&#xff09;-CSDN博客 平台的项目回调接口可以先不写&…