flutter 中 ReceivePort 的 first 和 listen

.first.listen() 在 Dart 的 ReceivePort 中有相似的功能,但它们的行为和使用场景略有不同。

1. .first

  • .first 是一个 Future,它会在接收到 第一个 消息时完成。
  • 一旦接收到第一个消息,它就会关闭 ReceivePort,并且不再监听其他消息。
  • 适用于只关心接收 单个消息 的情况。
dart 复制代码
final result = await receivePort.first;

这种方式是一次性的,接收到第一个消息后,它会自动完成并且不会继续监听更多的消息。

2. .listen()

  • .listen() 是一个持续的监听机制,它会保持监听 ReceivePort 上的消息,直到你主动调用 cancel() 来停止监听。
  • 适用于你需要接收 多个消息 或者在接收到消息后进行其他处理的场景。
  • 它可以持续接收并处理多个消息,适用于长时间运行的任务。
dart 复制代码
receivePort.listen((message) {
  print('Received: $message');
});

对比:

  • .first一次性的 ,适用于接收 单个消息,并且它在接收到该消息后就会停止监听。
  • .listen()持续的,适用于需要接收多个消息,或者在接收到消息后继续进行其他操作的场景。

例子:

使用 .first(接收一个消息):
dart 复制代码
final message = await receivePort.first;
print('Received: $message');
使用 .listen()(接收多个消息):
dart 复制代码
receivePort.listen((message) {
  print('Received: $message');
});

在使用 .first 时,你不需要手动管理流的关闭,而 .listen() 则允许你控制消息接收的过程,例如可以在接收到特定条件的消息时调用 cancel() 来停止监听。

总结:

  • .first:简单且适合一次性的消息接收。
  • .listen():适合长时间监听、接收多个消息的场景。
相关推荐
恋猫de小郭1 天前
你还用 IDE 吗? AI 狂欢时代下 Cursor 慌了, JetBrains 等 IDE 的未来是什么?
前端·flutter·ai编程
TT_Close2 天前
🐟 发布中心进度同步:8 个商店的上传功能开发完毕,正抓紧测试
flutter·npm·visual studio code
RaidenLiu2 天前
Flutter Platform Channel 底层架构解析 —— 从 BinaryMessenger 到跨平台消息通信机制
前端·flutter·前端框架
鹏多多2 天前
Flutter使用screenshot进行截屏和截长图以及分享保存的全流程指南
android·前端·flutter
恋猫de小郭2 天前
什么 AI 写 Android 最好用?官方做了一个基准测试排名
android·前端·flutter
勤劳打代码4 天前
Flutter 架构日记 — 状态管理
flutter·架构·前端框架
比特鹰5 天前
手把手带你用Flutter手搓人生K线
前端·javascript·flutter
火柴就是我5 天前
Flutter限制输入框只能输入中文,iOS拼音打不出来?
flutter
TT_Close5 天前
【Flutter×鸿蒙】debug 包也要签名,这点和 Android 差远了
android·flutter·harmonyos
TT_Close6 天前
【Flutter×鸿蒙】FVM 不认鸿蒙 SDK?4步手动塞进去
flutter·swift·harmonyos