flutter知识点---future与stream

本文详细介绍了Flutter/Dart中的Future和Stream两种异步编程模型,包括它们的原理、特点、应用场景及区别。Future适用于一次性任务和延迟执行,而Stream适合实时数据流和事件驱动编程。
摘要由CSDN通过智能技术生成

Future in Flutter/Dart

原理与特点:

Future 在 Flutter/Dart 中是用来表示异步操作结果的对象。它代表的是一个尚未完成但将来会完成的单个计算结果。当异步操作(如网络请求、文件读写、数据库查询等)完成后,Future 会持有其最终的结果(成功时的数据)或异常(失败时的错误信息)。Future 的核心特点是:

  1. 异步非阻塞:使用 Future 进行异步编程时,不会阻塞当前线程,使得程序能够继续执行其他任务,直到异步操作完成。

  2. 单次结果:每个 Future 对象只能对应一个异步操作的结果。一旦该操作完成(成功或失败),结果就确定下来,无法再改变。

  3. 链式调用:Future 提供了 .then().catchError().whenComplete() 等方法,可以方便地通过链式调用来处理异步操作完成后得到的数据或异常。

  4. 组合与等待:多个 Future 可以通过 Future.wait() 组合在一起,等待所有 Future 完成后再进行下一步操作。此外,还可以使用 asyncawait 关键字简化异步代码的编写,使其看起来更接近同步代码。

应用场景:

Future 主要适用于以下场景:

  • 一次性异步任务:如发起网络请求获取数据、读取本地文件内容、执行数据库查询等,这些操作只需执行一次,且只需要关心最终的结果。

  • 延迟执行:当需要在一定时间后执行某个操作时,可以使用 Future.delayed() 创建一个定时 Future。

  • 异步编程:在编写需要异步处理逻辑的代码时,如用户登录验证、数据预加载、一次性数据更新等,常使用 Future 结构化处理异步流程。


Stream in Flutter/Dart

原理与特点:

Stream 是 Dart 中用于处理异步数据流的抽象,它代表的是一个可变的、持续产生的、按顺序到达的事件序列。Stream 可以发送多个数据项,甚至可以持续无限期。其核心特点包括:

  1. 连续数据流:Stream 能够产生一系列的数据或事件,而非单一结果。这些数据项可以是连续到达的,也可以是按照某种特定时间间隔或条件触发的。

  2. 实时响应:当新的数据项通过 Stream 发出时,订阅者可以立即得到通知并作出反应,非常适合实时更新的场景。

  3. 事件处理:Stream 提供了多种事件处理器,如 listen()where()map()asyncMap()transform() 等,用于过滤、转换、聚合数据流中的事件。

  4. 错误与完成:除了数据事件外,Stream 还可以发送错误事件(通过 onError 处理)和完成事件(通过 onDone 处理),用于标识流的异常终止或正常结束。

应用场景:

Stream 主要应用于以下场景:

  • 实时数据更新:如监听用户输入(键盘、触摸屏)、WebSocket 接收服务器推送的消息、传感器数据变化、数据库实时查询结果等。

  • 事件驱动编程:处理系统事件、网络事件、文件系统变动通知等,这些事件通常以 Stream 形式提供。

  • 后台任务进度报告:长时间运行的任务(如文件上传、下载)可以通过 Stream 发送进度更新,让 UI 能够实时显示进度条。

  • 多数据项处理:当需要处理一系列不确定数量的数据项时,如轮询 API 获取实时数据列表、逐帧处理视频流等。


Future 与 Stream 的区别

  1. 结果性质:Future 表示的是单个异步操作的结果,而 Stream 表示的是一个可变的、连续的数据流。

  2. 完成次数:Future 完成后即表示其对应的异步操作结束,结果不可变;Stream 可以多次发出数据,甚至持续不断地产生数据。

  3. 处理方式:Future 通常通过 .then() 链式调用或 async/await 语法处理结果;Stream 则通过订阅(listen())并提供事件处理器来处理数据、错误和完成事件。

  4. 适用场景:Future 适用于一次性异步操作和延迟任务;Stream 更适合处理实时数据流、事件驱动编程和多数据项的连续处理。

总结来说,Future 与 Stream 分别应对不同的异步编程需求。Future 专注于处理单个异步任务的完成情况,而 Stream 专精于处理连续的、实时变化的数据流。在 Flutter 开发中,根据具体需求选择合适的异步模型(Future 或 Stream),可以有效地构建响应式、高效的用户界面和后台逻辑。

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值