Flutter 学习之路 -- 异步任务
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 学习之路 -- 异步任务相关推荐
- iOS程序猿的flutter学习之路
日常学习Flutter开发的积累 推荐一些平时自己学习Flutter开发当中接触到的优秀文章 -------------------------基础知识 ----------------------- ...
- Flutter学习之路(二)
之前的文章记录了Flutter开发的一小部分基础代码,今天还是要继续记录一个常用的小功能,那就是底部切换栏.做过移动开发的开发者都知道,底部切换栏是大多数应用的必备功能.话不多说,老规矩,直接按步骤上 ...
- Flutter学习之路(一)
作为一名实际开发近10年的Android程序员,对于前端技术不断的更新,有着自己的迷茫,不过身边有人在不断学习和进步,倍感压力. 闲言少叙,开始正题,众所周知flutter是谷歌的移动UI框架,可以快 ...
- Flutter学习之路 AspectRatio 组件
一.Flutter AspectRatio组件介绍 AspectRatio 的作用是根据设置调整子元素child的宽高比,Flutter提供此组件,就免去了自定义所带来麻烦,AspectRatio适 ...
- 前端Vue学习之路(一)-初识Vue
Vue学习之路 (一) 1.引言 2.更换npm国内镜像源 3.用npm下载Vue 4.Vue全家桶 5.使用命令创建项目 5.推荐插件 6.推荐网站 7.学习扩展 1.引言 先安装node.js环境 ...
- Flutter学习指南:文件、存储和网络
Flutter学习指南 交互.手势和动画 UI布局和控件 熟悉Dart语言 编写第一个应用 开发环境搭建 本篇文章我们先学习 Flutter IO 相关的基础知识,然后在 Flutter学习指南:交互 ...
- webpack学习之路
webpack学习之路 当自己在学习webpack的时候,在网上发现中文的很详细的教程很少,于是便想将自己学习webpack的笔记记录整理下来,便有了这篇文章,希望对大家有所帮助,如果有错误,欢迎大家 ...
- AI 学习之路——轻松初探 Python 篇(一)
喜欢小之的文章的可以关注公众号「WeaponZhi」持续关注动态 这是「AI 学习之路」的第 1 篇,「Python 学习」的第 1 篇 前言 1. Python 篇的组织结构 不管是学习人工智能还是 ...
- ros和java通讯_ROS学习之路(二)——通信架构(上)
1. master&&node mater中文名又称为节点管理器,作为管家管理所需要的进程,其作用有两个: 每个node启动时都要向master注册. 管理node之间的通信. nod ...
- FPGA学习之路—接口(1)—URAT Verilog程序设计
FPGA学习之路--URAT Verilog程序设计 UART(Universal Asynchronous Receiver Transmitter,通用异步收发器)是广泛使用的异步串行数据通信协议 ...
最新文章
- AppCompatActivity与toolbar的结合
- Qt Creator运行自动测试
- shell之引号嵌套引号大全
- A轮股权学院:激活股权的力量,弄懂这些就够了
- ubuntu学习摘要-ubuntu root用户
- Python面向对象编程之Zope.interface安装使用( @implementer)implements
- 微信小程序wx.getUserProfile
- 全网最全的git命令大全
- java 19 -2 异常以及tr...catch()的方法处理异常
- python报表自动化系列 - Excel单元格(Cell)索引范围对应的所有单元格
- java访问权限的控制
- merge规则 python_用Python处理PDF
- IntelliJ IDEA使用技巧(七)——常用快捷键Mac篇
- [C++]面向对象部分——类
- 分享一个不错的个人简历模板下载网站(word文件可编辑的)
- linux 1394驱动下载,1394驱动
- Mockplus摹客:原型设计工具
- mmdetection使用目标检测工具箱训练,测试
- helper java_请教问题,helper类在java中的作用。
- windows下 lvgl+qt 虚拟环境搭建
热门文章
- Flutter 竖线 垂直分割线
- html5简单画版,sketchpad-简单的HTML5 Canvas涂鸦画板插件
- [C语言入门可读]学习书籍;学习工具、网站;刷题网站推荐
- php实现文件下载的几种方式
- Unity RPG 黑暗之光 问题记录 上 (1-63 地形场景 角色选择 行走 相机跟随、旋转、缩放 任务系统 面板栏 背包系统 状态系统)
- mysql查看sa密码_查询mssql 密码
- 直连线和交叉线的区别
- android TV for x86,“掌上TV”的第一步,Android TV x86 体验分享
- java代码实现乘法口诀表
- 基于GA遗传算法的TSP旅行商问题求解