Dart流(Stream)与Flutter教程 实时数据处理

Dart流(Stream)与Flutter教程 实时数据处理

3 回复

建议先学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,你还可以对数据进行转换或过滤。

回到顶部