半亩方塘一鉴开,天光云影共徘徊。
问渠那得清如许?为有源头活水来。

上面这首诗出自宋代朱熹的《观书有感》,其中“问渠那得清如许?为有源头活水来。”经常被我们引用,用来表示想要心灵澄清,就得认真读书,试试补充新知识。

但我们这里的主题是 Flutter,它和这两句诗有什么关系呢?

阅读全文 »

一、前言

从 2015 年接触 Flutter 到现在也有两年多时间,在这期间我并没有正真地去了解这个神奇的框架,只是时不时拉取 master 的最新代码,编一下 flutter_gallery 看看有什么新特性。但随着此次 GDD 的召开,Flutter 被 Google 带到了国内开发者的眼前,相信谷歌是已经准备好让 Flutter 走上移动开发历史的舞台了。

一款好的移动应用该具备什么品质?戳中用户痛点的功能,炫酷的 UI 还是流畅的操作体验?这些都很重要,少了其中任何一点都是得不到用户青睐的。但今天我要说的虽然不是前面这三个中的哪一个,但也是少了它就不行的“应用国际化”。

对于开发者来说,在 Android 和 iOS 开发中使用国际化已经是老掉牙的套路了,那么在 Flutter 中该如何使用国际化呢?是否也想 Android 一样只要多配置一个 xml 就能搞定了呢?

阅读全文 »

最近花了点时间用 C++ 写了一个 GIF 图片的解析程序,在这一过程中我找了许多中文相关的材料,但没有哪一篇是真正能够让读者完全理解 GIF 的文件格式和 LZW 在 GIF 中的应用(解析部分)。在查阅了一些官方文档后我算是顺利的将程序完成了,顺道我就把 GIF 文件的解析在这儿讲讲清除,方便大家学习。

下面这两个网页是我参考的比较权威的资料,大家也可以直接阅读。

http://giflib.sourceforge.net/index.html
https://www.w3.org/Graphics/GIF/spec-gif89a.txt

阅读全文 »

在上一篇《实现一个简单的Retrofit(一)》中使用 java 的动态代理和注解实现的 Retrofit 的大体框架,可以实现一个基本的 url 的 get请求,如下:

1
2
3
4
5
6
7
8
9
10
interface SimpleRequest{
@GET
String goBaidu(@Url String url);
}

SimpleRequest simpleRequest = new Retro.
Builder().
build().
create(SimpleRequest.class);
println(simpleRequest.goBaidu("http://www.baidu.com"));
阅读全文 »

在Android上写过网络请求的小伙伴对Retrofit应该不陌生,这里我们先来简单回顾一下Retrofit。

Retrofit

Retrofit 是由Square公司开源的适用于Android和java的类型安全的Http客户端。

使用方法相当简单,首先将需要的http请求以接口的形式定义出来:

1
2
3
4
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}

接着使用Retrofit生成GitHubService接口的实例。

1
2
3
4
5
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();

GitHubService service = retrofit.create(GitHubService.class);

接着只需要调用对应接口即可:

1
Call<List<Repo>> repos = service.listRepos("octocat");

以上调用会使用get方式请求https://api.github.com/users/octocat/repos

阅读全文 »