Dart
官方教程https://www.dartlang.org/guides/language/language-tour
官方在线编译器https://dartpad.dartlang.org/
语言方面
感觉就是提供动态类型的静态类型、既能AOT也能JIT的javascript...
- 所有类型均继承于
Object,包括int这种基本类型 - 所有类型默认初始值为
null var自动推导类型,dynamic才是动态类型const和final的区别就是一个编译前一个运行中- 整除是
~/ is!是is not,有意思as这个关键字就更niub了,就是一个强制类型转换
if (emp is Person) {
// Type check
emp.firstName = 'Bob';
}等价于
(emp as Person).firstName = 'Bob';若emp不是Person,就会抛出错误
expr1 ?? expr2的??操作符niub,等价于expr1 != null ? expr1 : expr2..操作符,更niub了,你见过这样的写法吗?
querySelector('#confirm') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));等价于
var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));酷炫
?.操作符,若foo == null,foo.bar会抛出错误,但foo?.bar则返回null- 字符串format的例子
void main() {
int a = 1;
int aa = 2;
print('$a');
print('$aa');
print('${a}a');
}
/* 输出
1
2
1a
*/- 支持这样的
switch写法
var command = 'CLOSED';
switch (command) {
case 'CLOSED': // Empty case falls through.
case 'NOW_CLOSED':
// Runs for both CLOSED and NOW_CLOSED.
executeNowClosed();
break;
}Dart 2之后,new关键字是可选项,可写可不写- 一些类的有趣用法
class Point {
num x, y;
Point(this.x); // 语法糖
}
void main() {
var a = Point(1);
print(a.x);
print(a.y);
print(a.runtimeType); // 每个类都有
print(a.runtimeType == Point);
}
/* 输出
1
null
Point
true
*/- 重载一般的运算符就和c++差不多,但要注意重载
==的时候不太一样,详细请看官网文档
Flutter
docker image
可以用cirrusci/flutter。但要注意的是,这玩意locale没有支持utf8。。。。所以要是你的gitlab的用户名有非ascii的字符,就会爆炸。。。
Flutter package get被墙
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cnGradle被墙
参见这篇文章
一些库
- OpenFlutter/fluwx,获取
access_token需要看官方文档 - lishuhao/sy_flutter_wechat