- 博客(166)
- 资源 (24)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 消失了一年,我都干了些什么?
1、写在前面今天是除夕夜,也是2020农历年的最后一天,回顾2020年大家明显感觉到我已经在各大博客平台(CSDN、掘金、知乎、微信公众号)不再更新和分享文章,先向一直默默关注我的小伙伴们说声抱歉。那是不是2020年我放弃一直以来坚持的写作呢,其实并没有,相反2020年我挑战了自己很多的极限,做了很多自己之前没做过的事。我相信2020年对于每个人来说都意义非凡,如果用一句话来形容我的2020年,那就是一切都在变化,学会拥抱变化,努力在变化中成长。回首这一年,可以说是我毕业后变化最多的一年:Change
2021-02-11 14:25:54
1434
2
原创 简单、有趣的Kotlin异步微服务框架(一): 初始Ktor
1. 写在前面继Flutter异步编程相关的系列文章已经讲解完毕后,大概已经两周没有发布文章,因为我又开始在筹划了另一个Kotlin相关的专题: Kotlin微服务框架Ktor。 这次专题主要是介绍Kotlin在服务端应用的一个微服务异步web框架。为什么又开始Kotlin服务端Ktor专题呢?因为之前在2020年度总结文章也说过,后续会主要focus在Kotlin、Flutter、面试三大主题展开一系列文章总结,所以开始Kotlin服务端Ktor专题也是在规划路线之中。不仅会涉及到Kotlin服.
2021-04-25 17:31:34
2461
1
原创 导读
为什么要学习 Dart?众所周知,Flutter 在跨平台、性能方面有着得天独厚的优势,然而 Flutter 应用开发离不开 Dart,所以学习好 Dart 技能是掌握 Flutter 应用开发的必备技能!但国内有关 Dart 的文章和资料并不多见,成体系的 Dart 文章更是少之又少。本专栏作者通过阅读了大量国外有关 Dart 的优秀文章以及结合自己积累的 Flutter 开发经验,深入浅出...
2020-09-22 11:51:43
594
原创 初探 Dart 语法 01
欢迎来到 Dart 编程的世界,最开始将通过初探 Dart 的基本语法;让你对 Dart 整个语法体系轮廓、Dart 的编程有个大概了解,然后再深入到具体每个语法点细节和使用场景。由于文章篇幅的问题,初探 Dart 语法主要分为上下两篇来介绍。1. Hello Dart这是第一个 Hello Dart 程序,很多程序入口都是从 main 函数开始,所以 Dart 也不例外,一起来看下百变的 m...
2020-09-22 11:51:42
808
原创 初探 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
347
原创 掌握如何让函数更好地调用
在上一篇文章中我们从整体过了一遍 Dart 相关的基本语法,相信大家心中对 Dart 有了一个基本的认识。那么这篇文章来深入研究一下 Dart 的另一个重要语法:函数。这篇文章主要会涉及到:函数命名参数、可选参数、参数默认、闭包函数、箭头函数、Function 函数对象源码分析等。1. 函数参数在 Dart 函数参数是一个比较重要的概念,此外它涉及到概念的种类比较多,比如位置参数、命名参数、可...
2020-09-22 11:51:38
443
原创 掌握 Dart 集合的使用
我们将继续 Dart 语法的集合,虽然集合在第一篇中已经介绍的差不多,但是在这篇文章中将会更加全面介绍有关 Dart 中的集合,因为之前只是介绍了 dart:core 包中的 List、Set、Map,实际上在 Dart 中还提供一个非常丰富的 dart:collection 包,接下来将会一一介绍。1. List在 Dart 中的 List 集合是具有长度的可索引对象集合。初始化 ...
2020-09-22 11:51:37
641
原创 深入分析 Dart 集合源码
本篇文章将继续 Dart 中集合,不过本篇文章将会深入 Dart 集合源码分析。看过集合源码小伙伴都知道 dart:core 包中的集合实际上是委托到 dart:collection 包中实现的,所以下面我也会从源码的角度去把两者联系起来。当然这里也只会选择几个常用的集合作为介绍。1. List在 Dart 中 List 集合,它没有委托 dart:collection 包中集合实现,完全由内...
2020-09-22 11:51:35
611
原创 掌握 Dart 集合操作符函数使用
在上一篇文章中,我们全面地分析了常用集合的使用以及集合部分源码的分析。那么这一节讲点更实用的内容,绝对可以提高你的 Flutter 开发效率的函数,那就是集合中常用的操作符函数。这次说的内容的比较简单就是怎么用,以及源码内部是怎么实现的。1. Iterable<E>在 Dart 中几乎所有集合拥有的操作符函数(例如:map、every、where、reduce 等)都是因为继承或者...
2020-09-22 11:51:34
448
原创 深入分析 Dart 集合操作符源码
上篇文章我们详细介绍了有关 Dart 集合操作符函数的基本使用,那么这篇文章将会从源码角度,分析其内部原理。通过它你将会理解什么是惰性迭代器。1. forEach 函数源码解析 void forEach(void f(E element)) { //可以看到在 forEach 内部实际上就是利用 for-in 迭代,每迭代一次就执行一次 f 函数, //并把当前 elemen...
2020-09-22 11:51:32
366
原创 掌握 Dart 的面向对象基础
我们知道在 Dart 中一切都是对象,所以面向对象在 Dart 开发中是非常重要的。此外它还和其他有点不一样的地方,比如多继承 mixin、构造器不能被重载、setter 和 getter 的访问器函数等。1. 属性访问器(accessor)函数 setter 和 getter在 Dart 类的属性中有一种为了方便访问它的值特殊函数,那就是 setter、getter 属性访问器函数。实际上...
2020-09-22 11:51:30
324
原创 深入理解 Dart 中的继承和 Minxins
上一篇文章中我们详细地介绍了 Dart 中的面向对象的基础,这一篇文章中我们继续探索 Dart 中面向对象的重点和难点(继承和 Mixins)。Mixins(混合)特性是很多语言中都是没有的。这篇文章主要涉及到 Dart 中的普通继承、Mixins 多继承的形式(实际上本质并不是真正意义的多继承)、Mixins 线性化分析、Mixins 类型、Mixins 使用场景等。1. 类的单继承1.1 ...
2020-09-22 11:51:29
610
原创 深入理解 Dart 中的类型系统和泛型
Dart 中的类型系统不够严格,这当然和它的历史原因有关。在 Dart 最开始诞生之初,它的定位是一门像 JavaScript 一样的动态语言,动态语言的类型系统是比较松散的,所以在 Dart 类型也是可选的。然后动态语言类型系统松散对开发者并不是一件好事,程序逻辑一旦复杂,松散的类型可能就变得混乱,分析起来非常痛苦,但是有静态类型检查可以在编译的时候就快速定位问题所在。其实,Dart 类型系统...
2020-09-22 11:51:27
535
原创 掌握 Dart 中库 library 的使用
在 Dart 中import和library指令可以帮助你创建模块化且可共享的代码库。库不仅仅构成了 dart 程序的模块化单元,而且还是访问权限可见的单元,比如我们都知道在 dart 使用_下划线开头标识符表示仅仅库内访问权限可见。每个 Dart 应用程序默认都是一个library,只是没有使用library指令显示声明。其实这个就不得不引出一个概念那就是:“顶层” 的概念,比如前面文章提到过顶...
2020-09-22 11:51:25
1674
原创 尝鲜 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
9560
原创 尝鲜 Dart 2.7 最新语法之扩展方法
上篇文章我们深入分析了 Dart 2.7 中可空与非空类型,非常符合 Dart 2.7 官方所说的更安全的 Dart。但是令人有点小遗憾的是,它还处于 experiemntal 中,所以还不能立即运用于实际项目开发中。除了官方所提到的更安全的 Dart,其实还有一个非常非常重要的特性那就是“扩展方法”。它使得 Dart 更具有表现力,因为意味着可以任意扩展你想要扩展类的方法,该语法特性已经是稳定...
2020-09-22 11:51:22
562
原创 尝鲜 Dart 2.7 最新语法之泛型强化:声明处型变
这篇将带领大家探讨一个有意义的东西——泛型型变,可能有点深奥,但是确实是一个很重要的语法点。有关 Dart 泛型的知识,如果对 Dart 泛型没有深入了解过,强烈建议先把该专栏的第 11 篇内容学习下。如果你有过 Kotlin、C#、Java 的开发经验,对泛型协变、逆变、不变或许不陌生。如果你仅仅熟悉目前 Dart 的泛型,也许你会有点陌生,因为在目前 Dart 版本中默认都是泛型协变的。默...
2020-09-22 11:51:21
467
原创 异步编程之 EventLoop
从这篇文章开始,我们将正式进入 Dart 中的异步编程,异步编程属于 Dart、Flutter 开发中的重点和难点。这一系列文章不仅仅需要学会如何使用 Dart 中异步 API,更重要的是需要去理解其背后的原理。我们都知道,Dart 语言和 Javascript 一样都是单线程模型的,而不是像类似 Java、C# 多线程模型。同时也就意味着 Dart 不存在像 Java 多线程线程安全以及锁竞争情...
2020-09-22 11:51:19
540
原创 异步编程之 Isolate
继续 Dart 异步编程系列的第二篇,上一篇我们说到了 Dart 中的 EventLoop(事件循环)。我们知道了 Dart 是单线程模型,也就是实现异步需要借助 EventLoop 来进行事件驱动。所以 Dart 只有一个主线程,其实在 Dart 中并不是叫 Thread,而是有个专门名词叫 isolate(隔离)。其实在 Dart 也会遇到一些耗时计算的任务,不建议把任务放在主 isolat...
2020-09-22 11:51:18
1342
原创 异步编程之 Future
继续 Dart 异步系列的第三篇 Future, 关于 Future 可以说是在 Dart 异步编程中随处可见,比如一个网络请求返回的是 Future 对象,或者访问一个 SharedPreferences 返回一个 Future 对象等等。异步操作可以让你的程序在等待一个操作完成时继续处理其它的工作。而 Dart 使用 Future 对象来表示异步操作的结果。我们通过前面文章都知道 Dart ...
2020-09-22 11:51:16
361
原创 异步编程之 Streams
继续 Dart 异步系列的第四篇 Stream,Stream 是构成了 Dart 响应式流编程重要组成部分。相比上篇文章中的 Future,每个 Future 代表单一的值,可以异步传送数据或异常。而 Stream 的异步工作方式和 Future 类似,只是 Stream 代表的是一系列的事件,那么就可能传递任意数据值,可能是多个值也可以是异常。比如从磁盘中读取一个文件,那么这里返回的就是一个 ...
2020-09-22 11:51:14
445
原创 异步编程之 async 和 await
继续 Dart 异步编程的第五篇 async 和 await。async 和 await 是 Dart 异步编程用于简化异步 API 操作的两个关键字。它的作用就是能够将异步的代码使用同步的代码结构实现。相信学习过之前的 Future 和 Stream 的文章就知道,对于最终返回的值或者是异常都是采用“异步回调方式”。然而 async-await 就是为了简化这些异步回调的方式,通过语法糖的...
2020-09-22 11:51:12
314
原创 异步编程之同步异步生成器函数
继续 Dart 异步编程系列的最后一篇生成器函数。生成器函数可能比较陌生,在平时开发中使用的不是特别频繁,但是因为它也是 Dart 异步编程的不可缺少的一部分,所以这里还是展开讲解分析,力求做到 Dart 异步编程系列文章更完整和全面。生成器函数是一种用于延迟生成值序列的函数,并且在 Dart 中生成器函数主要分为两种:同步生成器函数和异步生成器函数。我们知道,比如 int 类型变量(同步)...
2020-09-22 11:51:11
316
原创 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
2107
原创 Dart 虚拟机运行原理
这篇文章将一起来了解 Dart 虚拟机的运行原理,Dart VM 是一种为 Dart 语言提供执行环境虚拟机。我们知道 Dart VM 既可以支持JIT(Just in time),边解释执行边编译的编译模式;同时也支持AOT(Ahead of time),管道将 Dart 源码直接编译成机器码的编译模式。然后运行在预编译运行时(precompiled runtime)环境,但是这种环境不包含任何...
2020-09-22 11:51:08
2204
原创 Flutter 实现高仿开眼 APP 的页面开发 01
通过前面一系列有关 Dart 基础知识、Dart 进阶知识以及 Dart 核心异步编程的学习。终于迎来了 Dart 的实战篇,理论终将要服务实践。之前很多小伙伴一开始上来就非常看重实战开发,对基础知识一带而过。如果你是有认真一步一步看着我的基础文章过来的,那么接下来的实战对非常简单,非常容易上手。因为我会列举出之前我们有详细分析过的知识点,真正感受到学过理论是怎么运用于真正的实际项目中的。如果前...
2020-09-22 11:51:06
574
原创 Flutter 实现高仿开眼 APP 的页面开发 02
上一篇实战文章铺垫,本篇文章功能实现起来就会变得更加简单,此外上篇文章并没有涉及到任何的网络请求。这篇文章将会使用网络请求,并且对现有网络请求进行一些封装,在使用的时候会变得更加简单,避免一些模板代码的编写。此外这篇文章还会涉及到一些 UI 组件封装和使用,比如下拉刷新和上拉加载的实现。1. 静态资源的导入关于静态资源主要就是一些外部字体、JSON 文件、配置文件、图标和图片(JPEG、We...
2020-09-22 11:51:05
368
原创 Flutter 实现高仿开眼 APP 的页面开发 03
这是本实战系列的最后一篇文章了,也是本专栏的最后一篇文章。这篇文章将继续上一篇的文章,把剩余的发现页面和社区页面进行开发。以及抽离了一些可复用的业务组件,并且新增加了图片轮播组件、九宫格布局组件等等。1. 可复用的业务组件抽离根据开发业务需要把原来一些可复用的业务组件抽离,抽离到 bizmodule 目录下的 bizwidget 中。1.1 圆角图片封面组件class CoverIm...
2020-09-22 11:51:03
277
原创 Dart语法篇之类型系统与泛型(七)
简述:下面开始Dart语法篇的第七篇类型系统和泛型,上一篇我们用了一篇Dart中可空和非空类型译文做了铺垫。实际上,Dart中的类型系统是不够严格,这当然和它的历史原因有关。在dart最开始诞生之初,它的定位是一门像javascript一样的动态语言,动态语言的类型系统是比较松散的,所以在Dart类型也是可选的。然后动态语言类型系统松散对开发者并不是一件好事,程序逻辑一旦复杂,松散的类型可能就变...
2019-11-26 00:09:37
2703
翻译 [译] Dart中可空性语法的定案: a?[b] 或 a?.[b]
简述:这是一篇译文,来自于Dartlang官方在Medium上的一篇文章,文章中说到Dart正在重新设计它的类型系统,并且即将要加入可空类型和非空类型(这一点和Kotlin语言是极其的相似,正因为这种可空和非空的类型系统的严格划分,才能让Kotlin很好地避免NPE的问题)。为什么要翻译一篇这样的文章,算为我们下一篇语法篇Dart类型系统和泛型做一个铺垫。因为当你进入Dart类型系统,你会发现它...
2019-11-17 20:24:04
1298
原创 Dart语法篇之面向对象继承和Mixins(六)
简述:上一篇文章中我们详细地介绍了Dart中的面向对象的基础,这一篇文章中我们继续探索Dart中面向对象的重点和难点(继承和mixins). mixins(混合)特性是很多语言中都是没有的。这篇文章主要涉及到Dart中的普通继承、mixins多继承的形式(实际上本质并不是真正意义的多继承)、mixins线性化分析、mixins类型、mixins使用场景等。一、类的单继承1、基本介绍Dart...
2019-11-15 00:46:04
521
原创 Dart语法篇之面向对象基础(五)
简述:从这篇文章开始,我们继续Dart语法篇的第五讲, dart中的面向对象基础。我们知道在Dart中一切都是对象,所以面向对象在Dart开发中是非常重要的。此外它还和其他有点不一样的地方,比如多继承mixin、构造器不能被重载、setter和getter的访问器函数等。一、属性访问器(accessor)函数setter和getter在Dart类的属性中有一种为了方便访问它的值特殊函数,那就...
2019-11-12 01:21:22
2364
原创 Dart语法篇之函数的使用(四)
简述:在上一篇文章中我们详细地研究了一下集合有关内容,包括集合的操作符的使用甚至我们还深入到源码实现原理,从原理上掌握集合的使用。那么这篇文章来研究一下Dart的另一个重要语法: 函数。这篇主要会涉及到: 函数命名参数、可选参数、参数默认、闭包函数、箭头函数以及函数作为对象使用。一、函数参数在Dart函数参数是一个比较重要的概念,此外它涉及到概念的种类比较多,比如位置参数、命名参数、可选位...
2019-11-08 00:35:13
2575
原创 Dart语法篇之集合操作符函数与源码分析(三)
简述:在上一篇文章中,我们全面地分析了常用集合的使用以及集合部分源码的分析。那么这一节讲点更实用的内容,绝对可以提高你的Flutter开发效率的函数,那就是集合中常用的操作符函数。这次说的内容的比较简单就是怎么用,以及源码内部是怎么实现的。一、Iterable<E>在dart中几乎所有集合拥有的操作符函数(例如: map、every、where、reduce等)都是因为继承或者实...
2019-11-06 00:42:25
1405
原创 Dart语法篇之集合的使用与源码解析(二)
简述:我们将继续Dart语法的第二篇集合,虽然集合在第一篇中已经介绍的差不多,但是在这篇文章中将会更加全面介绍有关Dart中的集合,因为之前只是介绍了dart:core包中的List、Set、Map,实际上在dart中还提供一个非常丰富的dart:collection包, 看过集合源码小伙伴都知道dart:core包中的集合实际上是委托到dart:collection包中实现的,所以下面我也会从...
2019-10-31 00:56:56
1340
翻译 [译]探索Kotlin中隐藏的性能开销-Part 3
翻译说明:原标题# Exploring Kotlin’s hidden costs — Part 3原文地址: https://medium.com/@BladeCoder/exploring-kotlins-hidden-costs-part-2-324a4a50b70原文作者: Christophe Beyls代理属性和Range在发布有关Kotlin编程语言的性能开销系列的前两篇文...
2019-10-27 22:45:43
544
原创 Dart语法篇之基础语法(一)
简述:又是一段新的开始,Dart这门语言相信很多人都是通过Flutter这个框架才了解的,因为Flutter相比Dart更被我们所熟知。很多人迟迟不愿尝试Flutter原因大多数是因为学习成本高,显然摆在面前的是需要去重新学习一门新的语言dart,然后再去学习一个开发框架Flutter,再加上很多莫名奇妙的坑,不说多的就从Github上Flutter项目issue数来看坑是着实不少,所以很多人...
2019-10-24 23:51:01
2098
1
翻译 [译]探索Kotlin中隐藏的性能开销-Part 2
翻译说明:原标题: Exploring Kotlin’s hidden costs — Part 2原文地址: https://medium.com/@BladeCoder/exploring-kotlins-hidden-costs-part-2-324a4a50b70原文作者: Christophe Beyls这是关于探索Kotlin中隐藏的性能开销的第2部分,如果你还没有看到第1部分...
2019-10-20 17:57:53
410
原创 当Kotlin邂逅设计模式之代理模式(二)
简述: 从这篇文章起,我们将继续Kotlin邂逅设计模式系列篇中的第二篇代理模式。代理模式可以说很多初级中级开发者迷惑的设计模式。但是它确实应用很广,不用多说大家非常熟悉的Retrofit框架,内部使用了动态代理设计模式,以注解的方式简化网络请求参数传递,从而实现更高解耦。然而在Kotlin中有天然支持的属性代理语法特性,可以简化Java中代理模式实现的模板代理。一、介绍代理模式(Proxy ...
2019-05-21 21:23:38
783
android中手机联系人字母索引表
2016-07-24
解决Android中ListView和ScrollView嵌套冲突
2016-05-26
android中图片图形变换特效处理Demo
2016-05-17
android中图片色彩特效处理Demo
2016-05-15
高仿百度地图中的公交地图线路查询
2016-04-24
高仿百度地图APP
2016-03-21
学生成绩管理系统
2014-06-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人