Flutter 学习二
今天继续学习Flutter,环境搭建完成了今天先总结一下Dret语言的一些内容。(参考书籍:《Flutter实战·第二版》)
Ver: 这个相信大家都不陌生,dret里变量都可以用这个声明,但是有一点要注意声明完进行赋值之后变量类型就不允许改变了。
dynamic :这个变量声明会在编译器阶段绕过编译检查,它和Object差不多作用,但是他是object
的子类。至于他和object的区别大家自行百度吧,或者以后遇到问题再补充。
final、const :这两兄弟依然是常量的声明,final是程序初始化时候指定常量,const则是编译阶段直接翻译成常量,这两兄弟在dret中是不需要指定变量类型的,比如在java中 final int a = 1 而dret中直接使用 final a = 1 就可以,他会自动判断类型。
空安全和late:
这里面引用了空安全,(万恶的空指针~) 在这里面你需要对定义的变量进行赋值或者允许为空,不然就会报错,ver a ;会报错,ver a = 1 就正常,要么就在定义的时候定义为 ver?a; late这个东西一般用在 late ver a; 代表说这这个变量我会稍后再赋值。然后我们直接 a = 1 这样就正常了。 a! 这玩意是告诉编译器,我的a已经不是空的了,不要再给我报错了。 还有一个 fun?.demo(),这个表示这个fun不为空时候才会调用demo()的方法。
函数:
这里面函数是可以作为参数传递的,函数如果不指定返回类型,则会默认为返回dynamic 类型。
bool isNoble (int atomicNumber)=> true ; 这个适用于函数只有一个表达式
var say = (str){
print(str);
};
say("hi world");
变量函数↑
//----------------------------------
void execute(var callback) {
callback();
}
execute(() => print("xxx"))
函数作为参数↑ 给 execute 函数传递了一个上面说的只有一个表达式的函数()=> print(“xxx”)。
//--------------------------------------------
String say(String from, String msg, [String device]) {
var result = '$from says $msg';
if (device != null) {
result = '$result with a $device';
}
return result;
}
可选参数[xxx],用这个中括号括起来了,类似于c里面的缺省参数,又不太一样。顾名思义就是这个参数可以传过来也可以不传。
继承:
直接上代码啦
class A{
public AA{}
mixin public BB{}
mixin public CC{}
}
class B extends A with CC,BB{
}
异步操作:
Future.delayed(Duration(seconds: 2),(){
//return "hi world!";
throw AssertionError("Error");
}).then((data){
//执行成功会走到这里
print("success");
}).catchError((e){
//执行失败会走到这里
print(e);
});
就是Future.then 和Future.catchError
下面这个whenComplete 类似于异常捕获中的finally(),就是一定会走的一个方法。
Future.delayed(Duration(seconds: 2),(){
//return "hi world!";
throw AssertionError("Error");
}).then((data){
//执行成功会走到这里
print(data);
}).catchError((e){
//执行失败会走到这里
print(e);
}).whenComplete((){
//无论成功或失败都会走到这里
});
Future.wait这个函数意思就是一定会等里面的方法都执行完才会回调,任何一个出错就抛出异常:
Future.wait([
// 2秒后返回结果
Future.delayed(Duration(seconds: 2), () {
return "hello";
}),
// 4秒后返回结果
Future.delayed(Duration(seconds: 4), () {
return " world";
})
]).then((results){
print(results[0]+results[1]);
}).catchError((e){
print(e);
});
Async/await:和java里面一样
//-----------------------------
Stream : 接受所有的异步结果过,无论成功失败。
Stream.fromFutures([
// 1秒后返回结果
Future.delayed(Duration(seconds: 1), () {
return "hello 1";
}),
// 抛出一个异常
Future.delayed(Duration(seconds: 2),(){
throw AssertionError("Error");
}),
// 3秒后返回结果
Future.delayed(Duration(seconds: 3), () {
return "hello 3";
})
]).listen((data){
print(data);
}, onError: (e){
print(e.message);
},onDone: (){
});
结果:
I/flutter (17666): hello 1
I/flutter (17666): Error
I/flutter (17666): hello 3
大概看的内容就这些,目测今天还能继续学习下去~