Flutter基础 - 异步,延时Widget的区别。

490 阅读2分钟

dynamic和Object:
dynamic与var一样都是关键词,声明的变量可以赋值任意对象。而Object声明的对象只能使用Object的属性与方法, 否则编译器会报错。
dynamic的这个特性与Objective-C中的id作用很像,任意类型。

final和const:
被final或者const修饰的变量,变量类型可以省略。
如://可以省略String这个类型声明 final str = "hi world";

Future:
Future.delayed 创建了一个延时任务,在then中接收异步结果并打印,Future.catchError或onError中捕获异步错误,Future的whenComplete回调用于请求结束后关闭对话框:
Future.delayed(new Duration(seconds: 2),(){
//return "hi world!";
throw AssertionError("Error");
}).then((data){//延时2年后接收
//执行成功会走到这里
print("success");
}).catchError((e){
//执行失败会走到这里
print(e);
}).whenComplete((){
//无论成功或失败都会走到这里
});
或者:
, onError: (e) {
print(e);
});

Stream:
Stream 也是用于接收异步事件数据,和Future 不同的是,它可以接收多个异步操作的结果(成功或失败)。 Stream 常用于会多次读取数据的异步任务场景,如网络内容下载、文件读写等。 Stream.fromFutures([
// 1秒后返回结果
Future.delayed(new Duration(seconds: 1), () {
return "hello 1";
}),
// 抛出一个异常
Future.delayed(new Duration(seconds: 2),(){
throw AssertionError("Error");
}),
// 3秒后返回结果
Future.delayed(new Duration(seconds: 3), () {
return "hello 3";
})
]).listen((data){
print(data);
}, onError: (e){
print(e.message);
},onDone: (){

});
StatelessWidget和StatefulWidget的区别:
Widget就是“控件”、“组件”这样的概念。 两者的区别在于状态的改变,StatelessWidget面向那些始终不变的UI控件,比如标题栏中的标题;而StatefulWidget则是面向可能会改变UI状态的控件,比如有点击反馈的按钮。 StatefulWidget的创建需要指定一个State,在需要更新UI的时候调用setState(VoidCallback fn),并在VoidCallback中改变一些变量数值等,组件会重新build以达到刷新状态也就是刷新UI的效果。