首页 > 其他分享 >如何实现异步操作

如何实现异步操作

时间:2024-07-15 22:57:10浏览次数:14  
标签:异步 示例 如何 Future 操作 async 方法

文章目录


我们在上一章回中介绍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. 示例代码

//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

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

标签:异步,示例,如何,Future,操作,async,方法
From: https://blog.csdn.net/talk_8/article/details/140451124

相关文章

  • Franka Robot 如何理解机器人的笛卡尔阻抗运动
    在笛卡尔阻抗模式下,用手将机器人移动到一个新位置后,机器人的行为取决于其控制参数(刚度、阻尼、质量)的设定和外部力的作用。当你将机器人移动到一个新位置并释放它时,以下是可能的情况:高刚度情况下如果机器人的刚度(Stiffness)参数设置较高,意味着机器人对位置偏差有很强的恢复力。当......
  • Java 中如何实现接口和抽象类,它们的主要区别是什么?
    在Java编程中,接口(Interface)和抽象类(AbstractClass)是实现抽象化的两种重要手段,它们帮助我们设计更灵活、可扩展的代码结构。下面,我将从定义、实现方式、主要区别以及应用场景等方面,用平实的语言和示例代码来阐述它们的使用。接口(Interface)定义:接口是一种完全抽象的类型,它只......
  • 什么是 Java 中的静态变量和静态方法?它们在类与对象间的关系是如何体现的?
    在Java编程的世界里,静态变量和静态方法是两个非常基础且重要的概念,它们让我们的代码更加灵活和高效。想象一下,你正在设计一个班级管理系统,每个学生都有姓名和学号,但班级的名称只有一个,对所有人共享。这里的班级名称就可以用静态变量来表示,因为它不属于任何一个特定的学生,而是......
  • 大数据如何推动工业数字化发展
    在全球工业4.0浪潮中,大数据技术作为核心驱动力,正深刻改变着传统工业的面貌。通过数据的采集、分析和应用,工业企业能够实现生产效率的提升、成本的降低以及创新能力的增强。本文将从大数据在工业数字化中的应用场景、技术实现和实际案例等方面,探讨大数据如何推动工业数字化......
  • 网课没有摄像头,手机如何变成电脑摄像头?
    电脑虚拟摄像头是一种可以在电脑上模拟网络摄像头功能的软件,它可以使用多种视频来源作为视频内容,如录制好的视频、图片等。虚拟摄像头有很多,包括常见的金舟虚拟摄像头、OBSStudio、ManyCam、Webcamoid等。​(一)电脑虚拟摄像头分享金舟虚拟摄像头是一款Windows虚拟摄像头软件......
  • 全网最最实用--基于Mac ARM 芯片实现操作系统MIT 6.S081-lab3
    文章目录实验三页表一、代码理解1.对于内存布局定义的理解2.对虚拟内存的理解3.对分配和释放物理内存的理解--删除或者分配物理内存为啥不需更改相应的页表?二、Printapagetable1.题目描述2.题目思考3.提交实验三、Akernelpagetableperprocess1.题目描述2.题目......
  • 数据库:编程(打开、操作(增、删、改、查)、关闭)
    一、需要的头文件sqlite3.h二、编译过程gccxxx-lsqlite3三、编程框架打开数据库==》读写数据库(增,删,改,查)==》关闭数据库3.1打开数据库:sqlite3_openintsqlite3_open(char*path,sqlite3**db);   功能:打开指定path路径+文件名称的数据库,并将打开的地址......
  • 帝国CMS的点击显示验证码如何调用?
    帝国CMS的点击显示验证码如何调用?1、显示页面要加载/e/data/js/ajax.js文件,即加:<scriptsrc="/e/data/js/ajax.js"></script>2、显示验证码用:<divid="V变量名showkey"><ahref="#EmpireCMS"onclick="edoshowkey('V变量名showkey','......
  • Windows 注册表编辑器(regedit)的演变和发展主要是由 Microsoft Windows 操作系统的设计
    Windows注册表编辑器(regedit)的演变和发展主要是由MicrosoftWindows操作系统的设计和需求驱动的。下面是大致的演化过程:需求和设计:在早期的Windows系统中,配置信息分散存储在各种配置文件和INI文件中,管理起来不够方便。为了统一管理系统配置信息,并提高系统的灵活性和可维......
  • Vue3中,使用TSX/JSX编写的父组件,如何向子组件中传递具名插槽(slot)的内容
    子组件(Child)-模板代码:<template><divclass="child-component"><divclass="header-box"><slotname="header"></slot></div><slot></slot></div></tem......