flutter如何使用stream

在Flutter中如何使用Stream?我想实现一个实时更新数据的功能,但不太清楚如何正确创建和使用Stream。能否提供一个简单的代码示例来说明Stream的基本用法?比如如何创建Stream、监听数据变化以及在Widget中展示流数据?最好能解释一下StreamController和StreamBuilder的作用。

2 回复

Flutter中使用Stream需配合StreamBuilder监听数据流。创建StreamController,通过sink添加数据,stream监听变化。使用async*生成异步数据流,StreamBuilder自动更新UI。

更多关于flutter如何使用stream的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,Stream用于处理异步数据序列。以下是基本使用方法:

1. 创建Stream

// 使用StreamController
final StreamController<String> _controller = StreamController<String>();
Stream<String> get stream => _controller.stream;

// 添加数据
_controller.add('Hello');
_controller.add('World');

2. 监听Stream

StreamSubscription<String> subscription = stream.listen(
  (String data) {
    print('接收到数据: $data');
  },
  onError: (error) {
    print('错误: $error');
  },
  onDone: () {
    print('Stream已关闭');
  },
  cancelOnError: false
);

3. 在Widget中使用StreamBuilder

StreamBuilder<String>(
  stream: stream,
  builder: (context, snapshot) {
    if (snapshot.hasError) {
      return Text('错误: ${snapshot.error}');
    }
    
    if (snapshot.connectionState == ConnectionState.waiting) {
      return CircularProgressIndicator();
    }
    
    return Text('数据: ${snapshot.data}');
  },
)

4. 常用操作

// 转换数据
stream.map((data) => data.toUpperCase());

// 过滤数据
stream.where((data) => data.length > 3);

// 合并多个Stream
StreamGroup.merge([stream1, stream2]);

5. 资源清理

@override
void dispose() {
  subscription.cancel();
  _controller.close();
  super.dispose();
}

记住:使用完成后一定要调用close()cancel()来释放资源,避免内存泄漏。

回到顶部