Flutter 环境搭建注意事项

国内无法访问谷歌的服务,所以参考这篇 Using Flutter in China 官方的文档,进行配置

Flutter的中文社区为: https://flutter.cn

SDK下载

使用 https://storage.flutter-io.cn/ 代替 https://storage.googleapis.com/ ,下载对应的SDK,例如

或者使用迅雷下载,迅雷P2P加速可以绕过(迅雷11内测版下载)

Android Studio

Jetbrains 的下载工具已经支持下载 Android Studio, 可以通过它下载

Android SDK 现在似乎不被屏蔽了。。。

使用镜像

Flutter 依赖于 Dart 的依赖环境,在国内需要通过镜像访问。所以在在运行Fltter命令之前,需要设置两个环境变量:PUB_HOSTORD_URLFALTER_STORKER_BASE_URL

MacOS/Linux 用户

1
2
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

Windows 用户

电脑 -> 属性 -> 高级系统设置 -> 高级 -> 环境变量 中修改

下载 Gradle

Gradle 没被墙,但是下载很慢,如果不手动下载,可能长时间卡在这一步

当你创建一个新项目时,会生成一些文件,其中有个${project}/android/gradle/wrapper/gradle-wrapper.properties

1
2
3
4
5
6
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip

这个文件描述了 Gradle 下载的位置,以及它的分发地址(我这需要下载bin归档,不知道是我环境问题还是什么,即https://services.gradle.org/distributions/gradle-5.6.2-bin.zip)

存放的位置很奇怪,是${GRADLE_USER_HOME}/wrapper/dists/gradle-S{version}-all/${sha}/,比较简单的方法是先运行下,再去找这个目录,把已经下好的 gradle 归档文件直接丢进去,不需要减压或重命名

暂时就这些,如果还有以后补充

Hexo 5.0.0 正式发布

Node.js 上最快的静态站点生成器 Hexo 发布了 5.0.0 版本。作为 Hexo 核心团队成员,让我为大家介绍一下 Hexo 5.0.0 中的新特性,以及如何从 Hexo 4.x 版本升级到 Hexo 5.0.0。

Gradle 初探

第一次接触 Gradle 是在数年前做android开发的时候,然而后来我的工作都是 Maven 做web开发,所以 Gradle 也就忘得差不多了(其实本来就没学多少)

我相信每个看到这篇文章的人,都是用过 Maven 的, 想学习 Gradle,但在开始前,我们应该弄清楚为什么要学它,它能带来怎样的益处(相对于 Maven)?

Why

如果你问 Gradle 优于 Maven 么? 答案必定是不一定

在 Maven 中有完善的依赖管理以及成熟的构建流程,在绝大多数的项目中都能很好的运行。但也是那一套流程,使的 Maven 十分死板。而且 Maven 是只属于 Java 的项目构建工具

在 Gradle 中就灵活的多,你可以随意的定义流程,但一个大型的项目规范是十分重要的,即便是构建流程,也要有规范,也是要统一的,试问假如我要构建一个普通的Web应用,自己定的构建流程又怎么能比过这么长时间积累下来的 Maven 的流程的? 但我的项目是个缝合怪呢,有java有node,那么 Gradle 就能同时组织它们。 Gradle 是 Java 环境下的构建工具, 它不是 Java 项目构建工具, 就如 node 里的 Gulp

新网址!

netlify免费版的网络真的太差了(跟1年多前刚使用的时候比,差太多),所以原本打算迁移到github pages

看对比,github pages整体比netlify稳定的多,但github不支持重定向。而腾讯云的解析服务,重定向需要备案,所以dnocm只好保持不动,选择新增了一个部署

同时也尝试了coding,但在国外的ping不理想,所以干脆一次性部署了多个

假如,你在访问当前地址时,感觉卡,可以试试前往我的其他域名下

造了套自己的 Promise

Promise 很火,没看源码,仅参考平时的使用,造了一个小轮子(有时间再去看源码把)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class PromiseT {
constructor() {
this.status = 'running';
this.val = null;
this.pendingList = [];
}
then(...list) {
this.pendingList.push(...list);
return this.run();
}
resolve(val) {
this.status = 'running';
if (val !== undefined) {
this.val = val;
}
return this.run();
}
pending() {
this.status = 'pending';
}
run() {
if (this.status === 'pending') {
return this;
}
const cal = this.pendingList.shift();
if (cal === undefined) {
return this;
}
const result = cal(this.val, this);
if (result === undefined) {
return this.run();
}
if (result.constructor === PromiseT) {
return result.then(...this.pendingList);
}
this.val = result;
return this.run();
}
}

测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
new PromiseT()
.resolve(5)
.then(x => x + 1)
.then(x => new PromiseT().resolve(2).then(a => x / a))
.then(x => console.log(x))
.then((x, p) => {
p.pending();
setTimeout(() => {
p.resolve(x - 3);
}, 2000);
})
.then(x => console.log(x));

// 输出 3
// 等待 2s
// 输出 0

毕竟是小轮子,catch() finally() 这些没写。。。

发布 npm 包到 GitHub Packages

GitHub Packages在半年前尝试过,那时候存在些问题

  1. 不能使用yarn安装(这个已经修复了)
  2. 必须认证授权才能使用,即便你的包是开源的,很不方便

但不管怎样,GitHub Packages始终是个不错的备选方案

JUnit 5 教程

JUnit 5 作为新一代的 Java 单元测试框架,提供很多改进。例如对比 JUnit4JUnit5 的官网,JUnit5 的设计更加简约与时尚,至少不会抗拒阅读的程度了(像破烂一样的网站,看了整个人都难受,不影响效率?不存在的)

而且,除此外,他的文档使用了 Asciidoc, 相对于markdown复杂,主要是它还支持具有包含另一个文件内容,这对于写API文档来说挺重要的,有兴趣可以了解下~

Okay, 结束吐槽,让我来看看 JUnit5 到底带来了哪些变化吧

Intersection Observer 简介

Intersection Observer API提供了一种异步观察目标元素与祖先元素或顶级文档viewport的交集中的变化的方法。这使得以往较难实现的功能,更加简单,例如,监听图片元素,在适当的时候懒加载图片。