Dart流(Stream)与Flutter教程 实时数据处理
Dart流(Stream)与Flutter教程 实时数据处理
建议先学Dart基础,再看官方Stream文档,配合Flutter实战教程,多写代码实践。
更多关于Dart流(Stream)与Flutter教程 实时数据处理的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
建议先学Dart基础,再看Stream原理,最后结合Flutter实践,多写代码例子。
在Flutter中,Stream
是一种用于处理异步数据流的强大工具。它允许你监听和响应来自数据源的事件,例如网络请求、文件读取或用户输入。Stream
特别适合处理实时数据,因为它可以在数据到达时立即进行处理,而不需要等待所有数据都准备好。
1. 创建 Stream
你可以使用 StreamController
来创建一个 Stream
,并通过 sink
添加数据。
import 'dart:async';
void main() {
// 创建一个 StreamController
StreamController<int> controller = StreamController<int>();
// 监听 Stream
controller.stream.listen((data) {
print('Data received: $data');
});
// 添加数据到 Stream
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
// 关闭 StreamController
controller.close();
}
2. 在 Flutter 中使用 Stream
在 Flutter 中,你可以使用 StreamBuilder
来监听 Stream
并更新 UI。
import 'package:flutter/material.dart';
import 'dart:async';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: StreamExample(),
);
}
}
class StreamExample extends StatefulWidget {
@override
_StreamExampleState createState() => _StreamExampleState();
}
class _StreamExampleState extends State<StreamExample> {
StreamController<int> _controller = StreamController<int>();
int _counter = 0;
void _incrementCounter() {
_counter++;
_controller.sink.add(_counter);
}
@override
void dispose() {
_controller.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Stream Example'),
),
body: Center(
child: StreamBuilder<int>(
stream: _controller.stream,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text('Counter: ${snapshot.data}');
} else {
return Text('No data yet');
}
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
3. 实时数据处理
Stream
非常适合处理实时数据,例如从服务器接收的实时消息或传感器数据。你可以使用 Stream
来监听这些数据源,并在数据到达时立即更新 UI。
4. 使用 StreamTransformer
StreamTransformer
允许你对 Stream
中的数据进行转换或过滤。例如,你可以过滤掉某些数据,或者将数据转换为另一种格式。
import 'dart:async';
void main() {
StreamController<int> controller = StreamController<int>();
// 使用 StreamTransformer 过滤偶数
var transformer = StreamTransformer<int, int>.fromHandlers(
handleData: (data, sink) {
if (data % 2 == 0) {
sink.add(data);
}
},
);
// 应用 Transformer
controller.stream.transform(transformer).listen((data) {
print('Filtered data: $data');
});
// 添加数据到 Stream
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
controller.sink.add(4);
// 关闭 StreamController
controller.close();
}
总结
Stream
是处理异步数据流的强大工具,特别适合处理实时数据。在 Flutter 中,你可以使用 StreamBuilder
来监听 Stream
并更新 UI。通过 StreamTransformer
,你还可以对数据进行转换或过滤。