Flutter使用Dart作为开发语言,在开发理念上也是偏向于网页开发的(虽然我没开发过网页)。

应用的基础构成

Flutter的执行起点为main()函数,然后通过runApp()方法启动页面。

目前Flutter提供了两个App类,分别为安卓风格的MaterialApp和IOS风格的CupertinoApp,一般runApp()函数都是传入这两个App类的实例。

App类有点像Android中的Application,但它承载了更多的功能,比如设置应用主题、应用在后台列表中的颜色、名称等。值得一提的是,App类也属于Widget,所以按Widget的理念去理解即可。

More...

最近有一个需求,用一个八宫格显示图片,后台不断发送图片过来,每个格子的图片定时刷新,同时做渐变切换的效果。

同事用RecyclerView+自定义渐变效果的ItemAnimator实现这个效果,具体来说就是每次要切换图片时,调用notifyItemChanged()对应的格子。

但是效果不如预期,经常会出现前一张图片没有完全变成0透明度,导致两张图片看起来像是透明叠加在一起。

More...

说到Dart中的并发,这里需要先介绍一下Dart中的异步机制,以下内容转自Dart异步任务与消息循环机制

Dart与消息循环机制

翻译自https://www.dartlang.org/articles/event-loop/

异步任务在Dart中随处可见,例如许多库的方法调用都会返回Future对象来实现异步处理,我们也可以注册Handler来响应一些事件,如:鼠标点击事件,I/O流结束和定时器到期。

这篇文章主要介绍了Dart中与异步任务相关的消息循环机制,阅读完这篇文章后相信你可写出更赞的异步执行代码。你也能学习到如何调度Future任务并且预测他们的执行顺序。

在阅读这篇文章之前,你最好先要了解一下基本的Future用法。

More...

Dart中没有线程这种概念,或者说对线程进行了包装,调用者无法对线程进行直接的操作。所以Dart为异步操作提供了一些对应的API和关键字,分别有:

  • asyncawait关键字
  • Async*sync*yield*关键字和Stream的API
  • Future的API

细分下来还是挺多内容的,尤其像Stream这种流式操作,网上相关的资料都叙述得不够详细。

More...

Dart中除了最基本的类型对象外,还提供了很多不同功能的库或类,比如一些异步操作、IO操作等等,这些都被一一封装到Dart的SDK中,由一个个独立的.dart文件承载着。

More...

Dart中提供的集合容器分别是我们常见的ListMapSet,但它也只有这三种类型的集合,并不像其他语言会细分到ArrayListLinkedList之类的。

More...

最近用AudioTrack播放PCM数据时,在某台手机上播放出现了卡顿、噪音现象。经排查,发现是设置播放的Buffer Size出问题了。

一般使用AudioTrack,会使用AudioTrack.getMinBufferSize来获取一个最小的buffer size值,用于创建AudioTrack的实例;同时,会用这个size值来创建一个byte数组的buffer,用于从文件读取数据,这个buffer的大小一般取size/4。

但是size/4有可能会得出一个不能被2整除的数字,如果用这个数字创建了一个byte数组来读取文件并传入AudioTrack,就会产生卡顿、噪音等。所以创建buffer时需要确保把size/4的值转换成可被2整除的数

前面说到Dart中一切皆为对象。而所有对象都是类的实例,并且所有类都为Object的子类。

和其他语言一样,类也是用class关键字作为声明。

1
2
3
class TestClass{
...
}

More...

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×