Flutter学习之事件循环机制、数据库、网络请求,2024年最新移动端页面开发报价

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

{*\expandedcolortbl;;}
\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\pard\tx566\tx1133\tx1700\tx2083\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0

\f0\fs24 \cf0 I love flutter —>文字内容
\f1 ;}

可以发现,先输出I love Android然后读取文件这种超时的操作会后执行,也就是读取文件内容是将来执行的then接收异步并打印出结果。注意:Future并不是并行执行的

1.2.Future.catchError

当异步任务发生错误,可以在catchError中捕获错误,例子如下:

Future.delayed(new Duration(seconds: 3),(){
throw AssertionError(“This is a Error”);
}).then((data){
//这是成功的逻辑
print(“success”);
}).catchError((e){
//失败会走到这里
print(e);
});

输出结果如下:

Assertion failed

可以发现,在异步任务中抛出了一个异常,then的回调函数不会执行,反而catchError函数被调用,当然并不是只有catchError才能捕获错误,then方法有一个可选的参数onError,可以用它来捕获异常:

Future.delayed(new Duration(seconds: 3),(){
throw AssertionError(“This is a Error”);
}).then((data){
//这是成功的逻辑
print(“success”);
},onError:(e){
print(e);
});

输出结果:

Assertion failed

1.3.Future.whenComplete

有很多时候,当异步任务无论成功或者失败都需要做一些事的场景,如在网络请求前弹出加载进度框,在请求结束后关闭进度框,下面用whenComplete进行回调,例子如下:

Future.delayed(new Duration(seconds: 3),(){
throw AssertionError(“This is a Error”);
}).then((data){
//这是成功的逻辑
print(“success”);
},onError:(e){
//这是失败的逻辑
print(e);
}).whenComplete((){
print(“无论失败,或者成功都会走到这”);
});

}

输出结果如下:

Assertion failed
无论失败,或者成功都会走到这

1.4.Future.wait

有时候,需要等待多个异步任务都执行结束后才进行一些操作,如有一个界面,需要从两个接口获取数据,获取成功后,将两个数据进行处理后显示在UI界面上,这时候,Future.wait派出用上了,它接收一个Future数组参数,只有数组中所有的Future执行成功后,就会触发then回调,当然,只要有一个Future执行失败就会触发错误回调,下面实现一下当两个异步任务都执行成功时,将结果打印出来:

Future.wait([
//3秒后返回结果
Future.delayed(new Duration(seconds: 3),(){
return “Android”;
}),
//4秒后返回结果
Future.delayed(new Duration(seconds: 4),(){
return " And Future";
})
]).then((data){
//成功逻辑
print(data[0] + data[1]);
}).catchError((e){
//捕捉错误
print(e);
});
}

输出结果如下:

Android And Future

可以看到当两个异步任务完成才会回调then函数。

2.Async/await

使用Async/await也是可以实现异步操作,下面直接上例子:

main() {
create();
}
void create(){
String data = getData();
print(data);
print(“I love Future”);
}
getData() async{
return await “I love Android”;
}

运行上面代码,报错了:

type ‘Future’ is not a subtype of type ‘String’

报的是类型不匹配?为什么呢?经过一番搜查,发现getData是一个异步操作函数,它的返回值是一个await延迟执行的结果。在Dart中,有await标记的运算,其结果值是一个Future对象,Future并不是String类型,就报错了。那么怎么才正确获得异步的结果呢?Dart规定async标记的函数,只能由await来调用,下面改成这样:

main() {
create();
}

void create() async{
String data = await getData();
print(data);
print(“I love Future”);

}
getData() async{
return await “I love Android”;
}

下面直接去掉async函数包装,直接在getData方法里对data进行赋值:

String data;

main() {
create();
}

void create(){
getData();
print(“I love Future”);

}
getData() async{
data = await “I love Android”;
print(data);
}

上面输出结果是:

I love Future
I love Android

可以发现,先输出的是I love Future后面再输出I love Android,可以发现当函数被async修饰时,会先去执行下面的操作,当下面的操作执行完,然后再执行被async修饰的方法。async用来表示函数是异步的,定义的函数会返回一个Future对象,await后面是一个Future,表示等待该异步任务完成,异步完成后才会往下走。要注意以下几点:

  1. await关键字必须在async函数内部使用,也就是加await不加async会报错。
  2. 调用async函数必须使用await关键字,如果加async不加await会顺序执行代码。

下面再上例子:

main() {
_startMethod();
_method_C();

}

_startMethod() async{
_method_A();
await _method_B();
print(“start结束”);
}
_method_A(){
print(“A开始执行这个方法~”);

}

_method_B() async {
print(“B开始执行这个方法~”);
await print(“后面执行这句话~”);
print(“继续执行这句哈11111~”);
}

_method_C(){
print(“C开始”);
}

结果如下:

A开始执行这个方法~
B开始执行这个方法~
后面执行这句话~
C开始
继续执行这句哈11111~
start结束

  1. 当使用async作为方法名后缀声明时,说明这个方法的返回值是一个Future
  2. 当执行到该方法代码用await关键字标注时,会暂停该方法其他部分执行;
  3. await关键字引用的Future执行完成,下一行代码会立即执行。

也就是首先执行_startMethod这个方法用async声明了,因为方法里调用了_method_A,所以先输出print(“A开始执行这个方法~”);,后面执行_method_B(),这个方法用await

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值