Flutter 中如何监听 Stream?

推荐答案

在 Flutter 中,可以通过 Stream.listen() 方法来监听 Stream 中的数据流。以下是一个简单的示例:

-- -------------------- ---- -------
----------- -------- - --------------------------------- --- --- -- ---

---- ---------------- -
  ----------------------- ------------ - ----------------
    ------ -
      ----------- ---- ------- --------
    --
    -------- ------- -
      ------------- ---------
    --
    ------- -- -
      ------------- -- -------
    --
    -------------- ------
  --

  -- ----
  ----------------------
-

本题详细解读

1. Stream 的基本概念

Stream 是 Dart 中用于处理异步数据流的工具。它可以发出多个数据项,并且可以在数据项可用时通知监听器。Stream 通常用于处理诸如网络请求、文件 I/O、用户输入等异步操作。

2. 监听 Stream 的方法

在 Flutter 中,监听 Stream 的主要方法是使用 Stream.listen()。这个方法允许你指定一个回调函数来处理 Stream 发出的数据项。

  • onData: 当 Stream 发出数据项时,会调用这个回调函数。
  • onError: 当 Stream 发生错误时,会调用这个回调函数。
  • onDone: 当 Stream 完成时,会调用这个回调函数。
  • cancelOnError: 如果设置为 true,当发生错误时,监听器会自动取消订阅。

3. StreamSubscription

Stream.listen() 方法返回一个 StreamSubscription 对象,它代表了对 Stream 的订阅。你可以通过这个对象来取消订阅,或者暂停和恢复监听。

  • cancel(): 取消订阅,停止监听 Stream
  • pause(): 暂停监听,直到调用 resume()
  • resume(): 恢复监听。

4. 示例代码解析

在示例代码中,我们创建了一个每秒发出一个整数的 Stream,并通过 listen() 方法监听它。当 Stream 发出数据时,onData 回调函数会被调用,并打印出数据。如果 Stream 发生错误,onError 回调函数会被调用。当 Stream 完成时,onDone 回调函数会被调用。最后,我们通过 subscription.cancel() 取消了订阅。

5. 注意事项

  • 如果你不再需要监听 Stream,务必调用 cancel() 方法取消订阅,以避免内存泄漏。
  • cancelOnError 参数可以根据需要设置为 truefalse,以决定是否在发生错误时自动取消订阅。
纠错
反馈