美文网首页Flutter自学教程
【Flutter 1-13】Flutter手把手教程Dart语言

【Flutter 1-13】Flutter手把手教程Dart语言

作者: 弗拉德x | 来源:发表于2020-12-05 20:49 被阅读0次

异步

Dart 代码库中有大量返回FutureStream对象的函数,这些函数都是异步的,它们会在耗时操作执行完毕前直接返回而不会等待耗时操作执行完毕。
asyncawait关键字用于实现异步编程,并且让你的代码看起来就像是同步的一样。

Future

可以通过下面两种方式,获得Future执行完成的结果:

  • 使用asyncawait
  • 使用Future API

使用asyncawait的代码是异步的,但是看起来有点像同步代码。例如,下面的代码使用await等待异步函数的执行结果。

await lookUpVersion();

必须在带有async关键字的异步函数中使用 await

Future checkVersion() async {
  var version = await lookUpVersion();
  // 使用 version 继续处理逻辑
}

尽管异步函数可以处理耗时操作,但是它并不会等待这些耗时操作完成,异步函数执行时会在其遇到第一个 await表达式的时候返回一个Future对象,然后等待await表达式执行完毕后继续执行。

使用trycatch以及finally来处理使用await导致的异常:

try {
  version = await lookUpVersion();
} catch (e) {
  // 无法找到版本时做出的反应
}

你可以在异步函数中多次使用await关键字。例如,下面代码中等待了三次函数结果:

var entrypoint = await findEntrypoint();
var exitCode = await runExecutable(entrypoint, args);
await flushThenExit(exitCode);

await表达式的返回值通常是一个Future对象;
如果不是的话也会自动将其包裹在一个Future对象里。Future对象代表一个"承诺",await表达式会阻塞直到需要的对象返回。

如果在使用await时导致编译错误,请确保await在一个异步函数中使用。例如,如果想在main()函数中使用await,那么main()函数就必须使用async关键字标识。

Future main() async {
  checkVersion();
  print('在 Main 函数中执行:版本是 ${await lookUpVersion()}');
}

声明异步函数

定义异步函数只需在普通方法上加上async关键字即可。
将关键字async添加到函数并让其返回一个Future 对象。假设有如下返回String对象的方法:

String lookUpVersion() => '1.0.0';

将其改为异步函数,返回值是Future

Future<String> lookUpVersion() async => '1.0.0';

注意,函数体不需要使用Future API。如有必要,Dart会创建Future对象。
如果函数没有返回有效值,需要设置其返回类型为 Future<void>

Stream

Stream也是用于接收异步事件数据,和Future不同的是,它可以接收多个异步操作的结果(成功或失败)。 也就是说,在执行异步任务时,可以通过多次触发成功或失败事件来传递结果数据或错误异常。Stream常用于会多次读取数据的异步任务场景,如网络内容下载、文件读写等。举个例子:

Stream.fromFutures([
  // 1秒后返回结果
  Future.delayed(new Duration(seconds: 1), () {
    return "hello 1";
  }),
  // 抛出一个异常
  Future.delayed(new Duration(seconds: 2),(){
    throw AssertionError("Error");
  }),
  // 3秒后返回结果
  Future.delayed(new Duration(seconds: 3), () {
    return "hello 3";
  })
]).listen((data){
   print(data);
}, onError: (e){
   print(e.message);
},onDone: (){

});

上面的代码依次会输出:

hello 1
Error
hello 3

相关文章

  • 【Flutter 1-13】Flutter手把手教程Dart语言

    异步 Dart 代码库中有大量返回Future或Stream对象的函数,这些函数都是异步的,它们会在耗时操作执行完...

  • Flutter教程(二) 了解Dart语言

    在上一篇教程中说了Flutter使用Dart语言开发。本篇教程整体介绍一下Dart语言,注意,本篇不会介绍Dart...

  • Dart语言速览

    我在之前的一篇Flutter安装教程中提到了Flutter采用的语言是Dart,所以要学习Flutter必须要学习...

  • Flutter及Dart入门

    目录 Dart语言下的Flutter Flutter Widget Flutter 布局 Flutter 页面 路...

  • Flutter 学习网址

    一、重要网址: Flutter 中文网 Dart 起步 Flutter 布局 Flutter 教程---很优秀 [...

  • Flutter系列(2)Dart语言基础

    Flutter的开发语言是Dart语言的,这篇文章就说说Dart语言基础 一、Dart 初体验 在flutter项...

  • Dart 基础

    为什么学习dart?谷歌推出了flutter,而flutter是基于dart语言的 dart是函数式编程语言 所有...

  • Dart语言学习第一天

    1.Flutter是基于Dart 语言,使用Flutter框架需要了解Dart语言。 2.Dart官网地址:htt...

  • Dart基础入门

    Flutter应用是采用Dart语言来编写,在学习Flutter之前,我们有必要先学习一下Dart语言。Dart是...

  • AndroidStudio不显示New Flutter Proj

    今天开始学习flutter,按照教程flutter和dart都安装好了,androidStudio里flutter...

网友评论

    本文标题:【Flutter 1-13】Flutter手把手教程Dart语言

    本文链接:https://www.haomeiwen.com/subject/cmfnwktx.html