第二百零五回 分享一个好用的三方包

文章目录

  • [1. 概念介绍](#1. 概念介绍)
  • [2. 使用方法](#2. 使用方法)
    • [2.1 async和awit配合使用](#2.1 async和awit配合使用)
    • [2.2 Future类单独使用](#2.2 Future类单独使用)
  • [3. 示例代码](#3. 示例代码)

我们在上一章回中介绍url_launcher包相关的内容,本章回中将介绍如何Flutter中的异步操作.闲话休提,让我们一起Talk Flutter吧。

1. 概念介绍

异步操作是程序中不可缺少的内容,大部分面向对象语言和编程框架都提供了异步操作,一些三方公司也推出了异步库,比如我们在Android专栏中介绍的Rxjava库.

Flutter也提供了异步操作,实现异步操作会用到Future和Stream类,以及Dart语言中的async和await关键字。本章回中将介绍异步操作相关的用法。

2. 使用方法

2.1 async和awit配合使用

async关键字通常在方法名后面,表示该方法是异步方法。在方法体中使用await关键字修饰某个操作,表示等待该操作完成后再执行该操作后面的其它程序语句。稍后

我们将在示例代码中演示它们的用法。注意:这两个关键字必须配合在一起使用,不能单独使用。async关键字修饰的方法默认返回Future类型的对象。

2.2 Future类单独使用

Future类提供了很多静态方法来实现异步操作,比如延时操作,等待操作等,而且这些操作支持链式调用,使用起来十分方便。它和我们前面介绍的RxJava框架十分类

似,如果大家了解RxJava的话,很快就能上手Future类相关的操作。下面是常用的静态方法与功能:

  • wait方法:表示执行等待操作,等当前操作完成后才会去运行其它的操作;
  • delayed方法:表示延时执行某个任务,时间通过参数来指定;
  • then方法:表示接着执行某个操作,它通常位于wait方法后面;
  • catchError方法:如果执行异步操作过程中发生错误,那么会回调此方法;
  • whenComplete方法:异步操作执行完成后会回调此方法

3. 示例代码

dart 复制代码
//async和await关键字示例代码
_syncFun() async {
  await do one 
  do two //只有do noe操作完成后才执行该操作
}

//Future类示例代码
_syncLaunch() {
  print("func start");
  Future.wait([
    Future.delayed(Duration(seconds: 3),() {
      print("launch url");
      launchUrl(Uri.parse('https://pub.dev'));
    })
  ])
  .then((value) => print("then running"))
  .catchError((e){
    print("error: "+e.toString());
  })
  .whenComplete(() => print("complete running"));
  print("func end");
}

上面的代码中,async和await关键字的示例程序是伪代码,大家明白其中的运行过程就可以。Future操作的代码可以运行,下面是程序的运行结果,从运行结果中可以看到,start和end很快就运行完成了,异步操作需要等待3秒后才可以运行,先是运行wait方法中加载url的操作,然后是then方法中的操作,最后是whenComplete方法中的操作。因为整个运行过程没有发生异常,所以没有执行catchError方法中的程序。

flutter: func start

flutter: func end

flutter: launch url

flutter: then running

flutter: complete running

Future可以实现异步,但是它不是多线程。这点和java不一样。Future实现异步是通过消息队列实现的,详细的细节先不看。Future.delay()就是把事件放到消息

队列中,还有一个比消息队列优先级高的队列microtask.Futuere会优先执行这里的事件,这里没有事件后才去消息队列中拿事件。我们可以通过microtask()这个

静态方法把事件添加到这个队列中。注意:并不是所有Future相关的内容都是异步执行,比如Future.vaule()就是马上执行,但是构造方法创建的Future对象是异

步执行。

看官们,关于"Flutter中异步操作"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

相关推荐
talk_83 个月前
通过相机来获取图片
数码相机·移动开发flutter
talk_87 个月前
第四百四十二回 再谈flutter_launcher_icons包
移动开发flutter·launcher_icon·修改桌面图标
talk_88 个月前
第二百二十三回
移动开发flutter
talk_88 个月前
第四百一十五回
移动开发flutter
talk_88 个月前
第四百一十回
移动开发flutter
talk_88 个月前
第三百九十九回
移动开发flutter
talk_88 个月前
第三百八十九回
移动开发flutter
talk_88 个月前
第三百八十五回
移动开发flutter
talk_89 个月前
第二百九十六回
前端·移动开发flutter
talk_89 个月前
第二百九十回
数码相机·移动开发flutter