Flutter学习总结(八、Dart的异步操作)

Dart的异步操作

一起从0开始学习Flutter!

我们经常在开发的时候面临上传下载等耗时操作,这时候需要请我们的异步模块出场了,使用异步的目的是为了在我们在执行一段耗时代码的时候不至于UI卡主用户无法操作。
首先我们可以使用Future来帮助我们创建一个简单的异步请求。

  Future<String> getData(){
    return Future<String>((){//返回一个Future实例。
      sleep(Duration(seconds: 3));//这是是用到了延时操作,让程序睡3秒。
      return "获取到了数据";
    });
  }

在我们拿到这个Future之后就可以使用then方法来获取到里面的值。

  print("testSyn start");
  getData().then((value){ //这里调用getData()获取到的是Future对象,需要通过then方法来获取里面的值
    print("value is $value");//打印获取到的值
  });
  print("testSyn end");
  /*输出结果
    testSyn start
    testSyn end
    value is 获取到了数据*/

这是一个简单的异步操作,如果在异步操作中出现了异常,我们还需要用catchError方法来捕获产生的异常,然后会异常进行处理操作。

 Future<String> getNetData(){
    return Future<String>((){
      sleep(Duration(seconds: 3));
      throw Exception("timeout exception");//过了三秒钟之后抛出一个连接超时的异常。
    });
  }

在调用出我们需要捕捉该异常:

print("testSyn start");
getNetData().then((value){
    print("value is $value");
  }).catchError((error){//在then方法后面直接抓取异常
    print("error is $error");
  });
print("testSyn end");

Future可以使用链式,每一次都是返回的一个Future来让后面的方法进行调用。

  getData().then((value){
    print("value is $value");
    return "return future first";
  }).then((value){
    print("value is $value");
    return "return future second";
  }).then((value){
    print("result is $value");
  }).catchError((error){
    print("error is $error");
  });
  print("testSyn end");
  /*运行结果
  value is 获取到了数据
  value is return future first
  result is return future second  */

在我们日常使用中我们异步的调用需要使用await、async这两个关键字,这两个关键字都是同时出现的,在调用了await的方法上需要加上async关键字。

 Future<String> getNetworkData() async {
    var response = await getData();//去调用的getData方法并获取到了里面返回的值。
    return "response is $response"; 
  }

我们在main函数里的调用:

  getNetworkData().then((value){
    print(value);//response is 获取到了数据
  });

再附上一段官网的示例,我们可以从中学到更多的用法:

void printOrderMessage () async {
  print('Awaiting user order...');
  var order = await fetchUserOrder();
  print('Your order is: $order');
}

Future<String> fetchUserOrder() {
  // Imagine that this function is more complex and slow.
  return Future.delayed(Duration(seconds: 4), () => 'Large Latte');
}

Future<void>main() async {
  countSeconds(4);
  await printOrderMessage();
}

// You can ignore this function - it's here to visualize delay time in this example.
void countSeconds(s) {
  for( var i = 1 ; i <= s; i++ ) {
      Future.delayed(Duration(seconds: i), () => print(i));
   }
}
/**运行结果为:
Awaiting user order...
1
2
3
4
Your order is: Large Latte
*/

Dart 的基础知识差不多就介绍完了,遗漏的部分可以在以后Flutter的学习中慢慢的再加入进来。又可以回到我们的Flutter的学习了。

接下来一起学习Flutter的基本控件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值