Flutter 学习之路 - 异步任务

实验 Flutter 的异步任务 --- 代码Github地址

Fultter 异步任务试验

Flutter 在很多地方需要用到异步的任务,例如,加载网络数据,任务延迟执行等,所以异步任务是不可避免的问题。本次试验主要试验了下面几种情况:

  • 用 Future, then 实现任务延迟执行
  • 用 async 和 await 实现任务延迟执行
  • 测试调用 async 方法时,代码的执行顺序问题

代码地址

用 Future, then 实现任务延迟执行

Future 可以用来执行未来要执行的方法,例如下面代码,先输出 ”Started“, 调用 Future 以后过了一秒钟,再输出 ”Completed Task1“。

void thenCatch(){mytext="Started";setMyTextState(mytext);// then 用来说明 1 second 后做什么Future.delayed(Duration(seconds: 1)).then((_){// 当运行完成mytext = mytext + "\n" + "Completed Task1";setMyTextState(mytext);}).catchError((e){// 当运行失败mytext=mytext+"\n"+'failed: ${e.toString()}';setMyTextState(mytext);});
}

用 async 和 await 实现任务延迟执行

await 也是 Flutter 中很好的一种执行异步任务的方法。

但是要使用await,必须在有async标记的函数中运行,否则这个await会报错。

下面是一个加了 await 的方法,它的输出是怎么样呢?

Future<void> asyncAwait() async{mytext="Started";setMyTextState(mytext);try{// 这里没有 .then, 要加 await, await 是说在 await 完成前别往下执行await Future.delayed(Duration(seconds: 1));mytext=mytext+"\n"+"Completed Task1";setMyTextState(mytext);await Future.delayed(Duration(seconds: 1));mytext=mytext+"\n"+"Completed Task2";setMyTextState(mytext);}catch(e){print('failed: ${e.toString()}');}
}

答案是:

Started
--- 1 second ---
Completed Task1
--- 2 second ---
Completed Task2

先输出 ”Start“, 然后过一秒,输出 ”Completed Task1“ 再过一秒输出 ”Completed Task2“ 。

如果把方法里的 await 去掉,看看会发生什么呢,结果是,Task1 和 Task2不会等待Future.delayed 完成,会直接执行。

Started
Completed Task1
Completed Task2
--- 1 second ---

测试调用 async 方法时,代码的执行顺序问题

那如果说,代码依次是 Task1, Task2, Task3, Task4, Task2 是一个异步的方法,Task3 , Task4 需要等待 Task2 完成吗?

代码如下:

Future<void> asyncAwaitWithTask() async{mytext="Started";setMyTextState(mytext);try{// 这里没有 .then, 要加 await, await 是说在 await 完成前别往下执行await Future.delayed(Duration(seconds: 1));mytext=mytext+"\n"+"Completed Task1";setMyTextState(mytext);task2();mytext=mytext+"\n"+"Completed Task3";setMyTextState(mytext);mytext=mytext+"\n"+"Completed Task4";setMyTextState(mytext);}catch(e){print('failed: ${e.toString()}');}
}void task2() async{await Future.delayed(Duration(seconds: 1));mytext=mytext+"\n"+"Completed Task2";setMyTextState(mytext);
}

答案是, Task3, Task4 会先于 Task2 执行,最前面的 GIF 图就是在运行的这个场景。

Started
--- 1 second ---
Completed Task1
Completed Task3
Completed Task4
--- 2 second ---
Completed Task2

Flutter 学习之路 Github 地址

github.com/draftbk/flu…

Flutter 学习之路 -- 异步任务相关推荐

  1. iOS程序猿的flutter学习之路

    日常学习Flutter开发的积累 推荐一些平时自己学习Flutter开发当中接触到的优秀文章 -------------------------基础知识 ----------------------- ...

  2. Flutter学习之路(二)

    之前的文章记录了Flutter开发的一小部分基础代码,今天还是要继续记录一个常用的小功能,那就是底部切换栏.做过移动开发的开发者都知道,底部切换栏是大多数应用的必备功能.话不多说,老规矩,直接按步骤上 ...

  3. Flutter学习之路(一)

    作为一名实际开发近10年的Android程序员,对于前端技术不断的更新,有着自己的迷茫,不过身边有人在不断学习和进步,倍感压力. 闲言少叙,开始正题,众所周知flutter是谷歌的移动UI框架,可以快 ...

  4. Flutter学习之路 AspectRatio 组件

    一.Flutter  AspectRatio组件介绍 AspectRatio 的作用是根据设置调整子元素child的宽高比,Flutter提供此组件,就免去了自定义所带来麻烦,AspectRatio适 ...

  5. 前端Vue学习之路(一)-初识Vue

    Vue学习之路 (一) 1.引言 2.更换npm国内镜像源 3.用npm下载Vue 4.Vue全家桶 5.使用命令创建项目 5.推荐插件 6.推荐网站 7.学习扩展 1.引言 先安装node.js环境 ...

  6. Flutter学习指南:文件、存储和网络

    Flutter学习指南 交互.手势和动画 UI布局和控件 熟悉Dart语言 编写第一个应用 开发环境搭建 本篇文章我们先学习 Flutter IO 相关的基础知识,然后在 Flutter学习指南:交互 ...

  7. webpack学习之路

    webpack学习之路 当自己在学习webpack的时候,在网上发现中文的很详细的教程很少,于是便想将自己学习webpack的笔记记录整理下来,便有了这篇文章,希望对大家有所帮助,如果有错误,欢迎大家 ...

  8. AI 学习之路——轻松初探 Python 篇(一)

    喜欢小之的文章的可以关注公众号「WeaponZhi」持续关注动态 这是「AI 学习之路」的第 1 篇,「Python 学习」的第 1 篇 前言 1. Python 篇的组织结构 不管是学习人工智能还是 ...

  9. ros和java通讯_ROS学习之路(二)——通信架构(上)

    1. master&&node mater中文名又称为节点管理器,作为管家管理所需要的进程,其作用有两个: 每个node启动时都要向master注册. 管理node之间的通信. nod ...

  10. FPGA学习之路—接口(1)—URAT Verilog程序设计

    FPGA学习之路--URAT Verilog程序设计 UART(Universal Asynchronous Receiver Transmitter,通用异步收发器)是广泛使用的异步串行数据通信协议 ...

最新文章

  1. AppCompatActivity与toolbar的结合
  2. Qt Creator运行自动测试
  3. shell之引号嵌套引号大全
  4. A轮股权学院:激活股权的力量,弄懂这些就够了
  5. ubuntu学习摘要-ubuntu root用户
  6. Python面向对象编程之Zope.interface安装使用( @implementer)implements
  7. 微信小程序wx.getUserProfile
  8. 全网最全的git命令大全
  9. java 19 -2 异常以及tr...catch()的方法处理异常
  10. python报表自动化系列 - Excel单元格(Cell)索引范围对应的所有单元格
  11. java访问权限的控制
  12. merge规则 python_用Python处理PDF
  13. IntelliJ IDEA使用技巧(七)——常用快捷键Mac篇
  14. [C++]面向对象部分——类
  15. 分享一个不错的个人简历模板下载网站(word文件可编辑的)
  16. linux 1394驱动下载,1394驱动
  17. Mockplus摹客:原型设计工具
  18. mmdetection使用目标检测工具箱训练,测试
  19. helper java_请教问题,helper类在java中的作用。
  20. windows下 lvgl+qt 虚拟环境搭建

热门文章

  1. Flutter 竖线 垂直分割线
  2. html5简单画版,sketchpad-简单的HTML5 Canvas涂鸦画板插件
  3. [C语言入门可读]学习书籍;学习工具、网站;刷题网站推荐
  4. php实现文件下载的几种方式
  5. Unity RPG 黑暗之光 问题记录 上 (1-63 地形场景 角色选择 行走 相机跟随、旋转、缩放 任务系统 面板栏 背包系统 状态系统)
  6. mysql查看sa密码_查询mssql 密码
  7. 直连线和交叉线的区别
  8. android TV for x86,“掌上TV”的第一步,Android TV x86 体验分享
  9. java代码实现乘法口诀表
  10. 基于GA遗传算法的TSP旅行商问题求解