Dart 入门实践
快速上手语言,解锁 Flutter 应用开发技能!
优惠券已抵扣
余额抵扣
还需支付
¥39.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
熊喵先生
现就职于阿里,担任无线开发专家。有丰富的 Kotlin 实际开发经验,此外对 Dart、Flutter 已有多年的研究和开发经验。专注于大前端跨平台技术,并且在技术团队内部积极推广 Flutter 技术在实际项目中落地。
展开
-
导读
为什么要学习 Dart?众所周知,Flutter 在跨平台、性能方面有着得天独厚的优势,然而 Flutter 应用开发离不开 Dart,所以学习好 Dart 技能是掌握 Flutter 应用开发的必备技能!但国内有关 Dart 的文章和资料并不多见,成体系的 Dart 文章更是少之又少。本专栏作者通过阅读了大量国外有关 Dart 的优秀文章以及结合自己积累的 Flutter 开发经验,深入浅出...原创 2020-09-22 11:51:43 · 649 阅读 · 0 评论 -
初探 Dart 语法 01
欢迎来到 Dart 编程的世界,最开始将通过初探 Dart 的基本语法;让你对 Dart 整个语法体系轮廓、Dart 的编程有个大概了解,然后再深入到具体每个语法点细节和使用场景。由于文章篇幅的问题,初探 Dart 语法主要分为上下两篇来介绍。1. Hello Dart这是第一个 Hello Dart 程序,很多程序入口都是从 main 函数开始,所以 Dart 也不例外,一起来看下百变的 m...原创 2020-09-22 11:51:42 · 859 阅读 · 0 评论 -
初探 Dart 语法 02
本篇文章上接初探 Dart 语法上篇,主要涉及一些 Dart 中的运算符、异常、函数、面向对象等。1. 运算符1.1 算术运算符名称运算符例子加+var result = 1 + 1;减-var result = 5 - 1;乘*var result = 3 * 5;除/var result = 3 / 5; //0.6整除~/...原创 2020-09-22 11:51:40 · 382 阅读 · 0 评论 -
掌握如何让函数更好地调用
在上一篇文章中我们从整体过了一遍 Dart 相关的基本语法,相信大家心中对 Dart 有了一个基本的认识。那么这篇文章来深入研究一下 Dart 的另一个重要语法:函数。这篇文章主要会涉及到:函数命名参数、可选参数、参数默认、闭包函数、箭头函数、Function 函数对象源码分析等。1. 函数参数在 Dart 函数参数是一个比较重要的概念,此外它涉及到概念的种类比较多,比如位置参数、命名参数、可...原创 2020-09-22 11:51:38 · 480 阅读 · 0 评论 -
掌握 Dart 集合的使用
我们将继续 Dart 语法的集合,虽然集合在第一篇中已经介绍的差不多,但是在这篇文章中将会更加全面介绍有关 Dart 中的集合,因为之前只是介绍了 dart:core 包中的 List、Set、Map,实际上在 Dart 中还提供一个非常丰富的 dart:collection 包,接下来将会一一介绍。1. List在 Dart 中的 List 集合是具有长度的可索引对象集合。初始化 ...原创 2020-09-22 11:51:37 · 691 阅读 · 0 评论 -
深入分析 Dart 集合源码
本篇文章将继续 Dart 中集合,不过本篇文章将会深入 Dart 集合源码分析。看过集合源码小伙伴都知道 dart:core 包中的集合实际上是委托到 dart:collection 包中实现的,所以下面我也会从源码的角度去把两者联系起来。当然这里也只会选择几个常用的集合作为介绍。1. List在 Dart 中 List 集合,它没有委托 dart:collection 包中集合实现,完全由内...原创 2020-09-22 11:51:35 · 658 阅读 · 0 评论 -
掌握 Dart 集合操作符函数使用
在上一篇文章中,我们全面地分析了常用集合的使用以及集合部分源码的分析。那么这一节讲点更实用的内容,绝对可以提高你的 Flutter 开发效率的函数,那就是集合中常用的操作符函数。这次说的内容的比较简单就是怎么用,以及源码内部是怎么实现的。1. Iterable<E>在 Dart 中几乎所有集合拥有的操作符函数(例如:map、every、where、reduce 等)都是因为继承或者...原创 2020-09-22 11:51:34 · 488 阅读 · 0 评论 -
深入分析 Dart 集合操作符源码
上篇文章我们详细介绍了有关 Dart 集合操作符函数的基本使用,那么这篇文章将会从源码角度,分析其内部原理。通过它你将会理解什么是惰性迭代器。1. forEach 函数源码解析 void forEach(void f(E element)) { //可以看到在 forEach 内部实际上就是利用 for-in 迭代,每迭代一次就执行一次 f 函数, //并把当前 elemen...原创 2020-09-22 11:51:32 · 406 阅读 · 0 评论 -
掌握 Dart 的面向对象基础
我们知道在 Dart 中一切都是对象,所以面向对象在 Dart 开发中是非常重要的。此外它还和其他有点不一样的地方,比如多继承 mixin、构造器不能被重载、setter 和 getter 的访问器函数等。1. 属性访问器(accessor)函数 setter 和 getter在 Dart 类的属性中有一种为了方便访问它的值特殊函数,那就是 setter、getter 属性访问器函数。实际上...原创 2020-09-22 11:51:30 · 361 阅读 · 0 评论 -
深入理解 Dart 中的继承和 Minxins
上一篇文章中我们详细地介绍了 Dart 中的面向对象的基础,这一篇文章中我们继续探索 Dart 中面向对象的重点和难点(继承和 Mixins)。Mixins(混合)特性是很多语言中都是没有的。这篇文章主要涉及到 Dart 中的普通继承、Mixins 多继承的形式(实际上本质并不是真正意义的多继承)、Mixins 线性化分析、Mixins 类型、Mixins 使用场景等。1. 类的单继承1.1 ...原创 2020-09-22 11:51:29 · 650 阅读 · 0 评论 -
深入理解 Dart 中的类型系统和泛型
Dart 中的类型系统不够严格,这当然和它的历史原因有关。在 Dart 最开始诞生之初,它的定位是一门像 JavaScript 一样的动态语言,动态语言的类型系统是比较松散的,所以在 Dart 类型也是可选的。然后动态语言类型系统松散对开发者并不是一件好事,程序逻辑一旦复杂,松散的类型可能就变得混乱,分析起来非常痛苦,但是有静态类型检查可以在编译的时候就快速定位问题所在。其实,Dart 类型系统...原创 2020-09-22 11:51:27 · 582 阅读 · 0 评论 -
掌握 Dart 中库 library 的使用
在 Dart 中import和library指令可以帮助你创建模块化且可共享的代码库。库不仅仅构成了 dart 程序的模块化单元,而且还是访问权限可见的单元,比如我们都知道在 dart 使用_下划线开头标识符表示仅仅库内访问权限可见。每个 Dart 应用程序默认都是一个library,只是没有使用library指令显示声明。其实这个就不得不引出一个概念那就是:“顶层” 的概念,比如前面文章提到过顶...原创 2020-09-22 11:51:25 · 1722 阅读 · 0 评论 -
尝鲜 Dart 2.7 最新语法之可空与非空类型
从这篇文章开始将进入 Dart 2.7 新特性的世界。我特别想用 Dart 官方一句话来描述 Dart 2.7: A safer, more expressive Dart.(更安全,更具表现力的 Dart)因为在 Dart 2.7 添加了对扩展方法的支持,以及一个用于处理带有特殊字符的 characters package(preview)。此外,在 DartPad 中更新了对空安全(...原创 2020-09-22 11:51:24 · 9640 阅读 · 0 评论 -
尝鲜 Dart 2.7 最新语法之扩展方法
上篇文章我们深入分析了 Dart 2.7 中可空与非空类型,非常符合 Dart 2.7 官方所说的更安全的 Dart。但是令人有点小遗憾的是,它还处于 experiemntal 中,所以还不能立即运用于实际项目开发中。除了官方所提到的更安全的 Dart,其实还有一个非常非常重要的特性那就是“扩展方法”。它使得 Dart 更具有表现力,因为意味着可以任意扩展你想要扩展类的方法,该语法特性已经是稳定...原创 2020-09-22 11:51:22 · 606 阅读 · 0 评论 -
尝鲜 Dart 2.7 最新语法之泛型强化:声明处型变
这篇将带领大家探讨一个有意义的东西——泛型型变,可能有点深奥,但是确实是一个很重要的语法点。有关 Dart 泛型的知识,如果对 Dart 泛型没有深入了解过,强烈建议先把该专栏的第 11 篇内容学习下。如果你有过 Kotlin、C#、Java 的开发经验,对泛型协变、逆变、不变或许不陌生。如果你仅仅熟悉目前 Dart 的泛型,也许你会有点陌生,因为在目前 Dart 版本中默认都是泛型协变的。默...原创 2020-09-22 11:51:21 · 501 阅读 · 0 评论 -
异步编程之 EventLoop
从这篇文章开始,我们将正式进入 Dart 中的异步编程,异步编程属于 Dart、Flutter 开发中的重点和难点。这一系列文章不仅仅需要学会如何使用 Dart 中异步 API,更重要的是需要去理解其背后的原理。我们都知道,Dart 语言和 Javascript 一样都是单线程模型的,而不是像类似 Java、C# 多线程模型。同时也就意味着 Dart 不存在像 Java 多线程线程安全以及锁竞争情...原创 2020-09-22 11:51:19 · 577 阅读 · 0 评论 -
异步编程之 Isolate
继续 Dart 异步编程系列的第二篇,上一篇我们说到了 Dart 中的 EventLoop(事件循环)。我们知道了 Dart 是单线程模型,也就是实现异步需要借助 EventLoop 来进行事件驱动。所以 Dart 只有一个主线程,其实在 Dart 中并不是叫 Thread,而是有个专门名词叫 isolate(隔离)。其实在 Dart 也会遇到一些耗时计算的任务,不建议把任务放在主 isolat...原创 2020-09-22 11:51:18 · 1380 阅读 · 0 评论 -
异步编程之 Future
继续 Dart 异步系列的第三篇 Future, 关于 Future 可以说是在 Dart 异步编程中随处可见,比如一个网络请求返回的是 Future 对象,或者访问一个 SharedPreferences 返回一个 Future 对象等等。异步操作可以让你的程序在等待一个操作完成时继续处理其它的工作。而 Dart 使用 Future 对象来表示异步操作的结果。我们通过前面文章都知道 Dart ...原创 2020-09-22 11:51:16 · 410 阅读 · 0 评论 -
异步编程之 Streams
继续 Dart 异步系列的第四篇 Stream,Stream 是构成了 Dart 响应式流编程重要组成部分。相比上篇文章中的 Future,每个 Future 代表单一的值,可以异步传送数据或异常。而 Stream 的异步工作方式和 Future 类似,只是 Stream 代表的是一系列的事件,那么就可能传递任意数据值,可能是多个值也可以是异常。比如从磁盘中读取一个文件,那么这里返回的就是一个 ...原创 2020-09-22 11:51:14 · 471 阅读 · 0 评论 -
异步编程之 async 和 await
继续 Dart 异步编程的第五篇 async 和 await。async 和 await 是 Dart 异步编程用于简化异步 API 操作的两个关键字。它的作用就是能够将异步的代码使用同步的代码结构实现。相信学习过之前的 Future 和 Stream 的文章就知道,对于最终返回的值或者是异常都是采用“异步回调方式”。然而 async-await 就是为了简化这些异步回调的方式,通过语法糖的...原创 2020-09-22 11:51:12 · 333 阅读 · 0 评论 -
异步编程之同步异步生成器函数
继续 Dart 异步编程系列的最后一篇生成器函数。生成器函数可能比较陌生,在平时开发中使用的不是特别频繁,但是因为它也是 Dart 异步编程的不可缺少的一部分,所以这里还是展开讲解分析,力求做到 Dart 异步编程系列文章更完整和全面。生成器函数是一种用于延迟生成值序列的函数,并且在 Dart 中生成器函数主要分为两种:同步生成器函数和异步生成器函数。我们知道,比如 int 类型变量(同步)...原创 2020-09-22 11:51:11 · 347 阅读 · 0 评论 -
Dart 与 C 的互相调用
从这篇文章开始将一起来研究 Dart 2.5 之后推出一个新的特性,就是 Dart 与 C(或 C++)的互操作。这就意味着在 Dart 可以做一些类似 JNI 操作。Dart 与 C 的互操作主要是借助 dart:ffi 库,ffi 全称为 foreign function interface(外部函数接口)。目前 dart:ffi 库还是处于 beta 中,不建议现在直接投入生产环境中,可能...原创 2020-09-22 11:51:09 · 2174 阅读 · 0 评论 -
Dart 虚拟机运行原理
这篇文章将一起来了解 Dart 虚拟机的运行原理,Dart VM 是一种为 Dart 语言提供执行环境虚拟机。我们知道 Dart VM 既可以支持JIT(Just in time),边解释执行边编译的编译模式;同时也支持AOT(Ahead of time),管道将 Dart 源码直接编译成机器码的编译模式。然后运行在预编译运行时(precompiled runtime)环境,但是这种环境不包含任何...原创 2020-09-22 11:51:08 · 2240 阅读 · 0 评论 -
Flutter 实现高仿开眼 APP 的页面开发 01
通过前面一系列有关 Dart 基础知识、Dart 进阶知识以及 Dart 核心异步编程的学习。终于迎来了 Dart 的实战篇,理论终将要服务实践。之前很多小伙伴一开始上来就非常看重实战开发,对基础知识一带而过。如果你是有认真一步一步看着我的基础文章过来的,那么接下来的实战对非常简单,非常容易上手。因为我会列举出之前我们有详细分析过的知识点,真正感受到学过理论是怎么运用于真正的实际项目中的。如果前...原创 2020-09-22 11:51:06 · 605 阅读 · 0 评论 -
Flutter 实现高仿开眼 APP 的页面开发 02
上一篇实战文章铺垫,本篇文章功能实现起来就会变得更加简单,此外上篇文章并没有涉及到任何的网络请求。这篇文章将会使用网络请求,并且对现有网络请求进行一些封装,在使用的时候会变得更加简单,避免一些模板代码的编写。此外这篇文章还会涉及到一些 UI 组件封装和使用,比如下拉刷新和上拉加载的实现。1. 静态资源的导入关于静态资源主要就是一些外部字体、JSON 文件、配置文件、图标和图片(JPEG、We...原创 2020-09-22 11:51:05 · 382 阅读 · 0 评论 -
Flutter 实现高仿开眼 APP 的页面开发 03
这是本实战系列的最后一篇文章了,也是本专栏的最后一篇文章。这篇文章将继续上一篇的文章,把剩余的发现页面和社区页面进行开发。以及抽离了一些可复用的业务组件,并且新增加了图片轮播组件、九宫格布局组件等等。1. 可复用的业务组件抽离根据开发业务需要把原来一些可复用的业务组件抽离,抽离到 bizmodule 目录下的 bizwidget 中。1.1 圆角图片封面组件class CoverIm...原创 2020-09-22 11:51:03 · 293 阅读 · 0 评论