Flutter Stream简单应用

Stream是什么?

为了将Stream的概念可视化与简单化,可以将它想成是管道(pipe)的两端,它只允许从一端插入数据并通过管道从另外一端流出数据。
在Flutter中,

  • 我们将这样的管道称作Stream
  • 为了控制Stream,我们通常可以使用StreamController来进行管理;
  • 为了向Stream中插入数据,StreamController提供了类型为StreamSink的属性sink作为入口;
  • StreamController提供stream属性作为数据的出口。

在Dart库中,有两种实现异步编程的方式(FutureStream),使用它们只需要在代码中引入dart:async即可。
本文主要介绍Stream的相关概念及利用其异步特性来实现简单的响应式编程。

 

Stream可以传输什么?

任何东西都可以!包括简单的值,事件,对象,集合,map,error或者其他的Stream,任何类型的数据都可以使用Stream来传输。

 

Stream简单应用

3s后打印输出结果。或者是测试异常输出

import 'package:flutter/material.dart';

class StreamDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("StreamDemo"),
        elevation: 0.0,
      ),
      body: StreamDemoHome(),
    );
  }
}

class StreamDemoHome extends StatefulWidget {
  @override
  _StreamDemoHomeState createState() => _StreamDemoHomeState();
}

class _StreamDemoHomeState extends State<StreamDemoHome> {
  void onData(String data) {
    print("$data");
  }

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

    Future<String> fetchData() async {
      await Future.delayed(Duration(seconds: 3));
      throw "Something happend";
      return "hello~";
    }

    void one rror(error) {
      print("onError $error");
    }

    void onDone() {
      print("onDone");
    }

    print("Create a stream.");
    Stream<String> _streamDemo = Stream.fromFuture(fetchData());
    print("Start listening on a stream");
    _streamDemo.listen(onData, one rror: one rror, onDone: onDone);
    print("Initialize completed'");
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

输出

Flutter Stream简单应用

 

 

上一篇:在网页中调用本地的应用程序


下一篇:学习日志