Flutter StreamController 的用法和代码演示

43 min read

Flutter StreamController 是Flutter中的一个重要类,它用于向订阅者发送一系列异步事件,在开发中非常实用。下面是StreamController的用法和代码演示:

  1. 创建一个StreamController对象
StreamController controller = StreamController();
  1. 监听流中的值并做出相应的操作
controller.stream.listen((value) {
  // 处理接收到的数据
});
  1. 发送数据到流中
controller.add('Hello World');
  1. 关闭StreamController
controller.close();

完整演示代码:

import 'dart:async';

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  StreamController<String> _streamController = StreamController<String>();
  StreamSubscription<String> _streamSubscription;

  @override
  void initState() {
    super.initState();

    _streamSubscription = _streamController.stream.listen(
      (value) {
        print(value);
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('StreamController Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            RaisedButton(
              child: Text('Add Data To Stream'),
              onPressed: () {
                _streamController.add('Hello World');
              },
            ),
            RaisedButton(
              child: Text('Close Stream'),
              onPressed: () {
                _streamController.close();
              },
            ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();

    _streamSubscription?.cancel();
    _streamController?.close();
  }
}