import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:math'; void main()=>runApp(MyApp()); class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
} class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
} class _HomePageState extends State<HomePage> {
StreamController<String> _streamController;
StreamSubscription _streamSubscription;
StreamSink _streamSink;
@override
void dispose() {
// TODO: implement dispose
_streamController.close();
super.dispose();
}
@override
void initState() {
// TODO: implement initState
_streamController=StreamController<String>.broadcast();
_streamSink=_streamController.sink;
_streamSubscription=_streamController.stream.listen(onData,onError: onError, onDone: onDone);
super.initState();
}
void addDataToStream()async{
print('begin to add data to stream');
String data=await(fetchData());
_streamSink.add(data);
print('Endding of data to stream');
} pauseStream(){
_streamSubscription.pause();
}
cancelStrem(){
_streamSubscription.cancel();
}
resumeStream(){
_streamSubscription.resume();
} onData(value){print('$value');}
onError(Error){print('$Error');}
onDone(){print('done');} Future<String> fetchData()async{
int _index=0;
List<String> _listStream=['anounce','Bond','Country','Document','Effect','feel','Glove','Hover','Indent','Jack','Kick','Log','Moon','New','Opertiunity','Post','Queen'];
await Future.delayed(Duration(seconds:1));
_index=Random().nextInt(16);
return _listStream[_index];
} @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Hello World'),),
body: Center(
child: Column(
children: <Widget>[
StreamBuilder(
stream: _streamController.stream,
initialData: '...',
builder:(BuildContext context,snapshot){
return Text('${snapshot.data}');
},
),
RaisedButton(
child: Icon(Icons.add),
onPressed:addDataToStream,
),
RaisedButton(
child: Text('Cancel'),
onPressed:cancelStrem,
),
RaisedButton(
child: Text('Pause'),
onPressed:pauseStream,
),
RaisedButton(
child: Text('Resume'),
onPressed:resumeStream,
),
],
),
),
);
}
}

Stream02的更多相关文章

  1. 乐字节-Java8新特性之Stream流(上)

    上一篇文章,小乐给大家介绍了<Java8新特性之方法引用>,下面接下来小乐将会给大家介绍Java8新特性之Stream,称之为流,本篇文章为上半部分. 1.什么是流? Java Se中对于 ...

  2. Flink中的算子操作

    一.Connect DataStream,DataStream ->  ConnectedStream,连接两个保持他们类型的数据流,两个数据流被Connect之后,只是被放在了同一个流中,内部 ...

  3. IO ——字节流

    什么是流? 概念:内存与存储设备之间传输数据的通道.程序运行后保存在内存,文件一般在硬盘中,在程序中读写文件,需要在内存和存储设备中建立通道.数据借助流传输 流的分类: 按流向: 输入流:将存储设备中 ...

随机推荐

  1. ASP.NET Core使用Jaeger实现分布式追踪

    前言 最近我们公司的部分.NET Core的项目接入了Jaeger,也算是稍微完善了一下.NET团队的技术栈. 至于为什么选择Jaeger而不是Skywalking,这个问题我只能回答,大佬们说了算. ...

  2. [Luogu4705] 玩游戏

    Description 给定两个长度分别为 \(n\) 和 \(m\) 的序列 \(a\) 和 \(b\).要从这两个序列中分别随机一个数,设为 \(a_x,b_y\),定义该次游戏的 \(k\) 次 ...

  3. [PHP] strpos stripos strrpos strripos的区别

    stripos — 查找字符串首次出现的位置(不区分大小写),应使用 === 运算符来测试此函数的返回值 strpos 左边开始字符出现的第一个位置,区分大小写stripos 和上面一样,不区分大小写 ...

  4. Java开发笔记(七十九)利用反射技术操作私有属性

    早在介绍多态的时候,曾经提到公鸡实例的性别属性可能被篡改为雌性,不过面向对象的三大特性包含了封装.继承和多态,只要把性别属性设置为private私有级别,也不提供setSex这样的性别修改方法,那么性 ...

  5. Java 学习笔记 使用并发包ReentrantLock简化生产者消费者模式代码

    说明 ReentrantLock是java官方的一个线程锁类,ReentarntLock实现了Lock的接口 我们只需要使用这个,就可以不用使用synchronized同步关键字以及对应的notify ...

  6. .NET平台下使用MongoDB入门教程

    适合人群:完全没有接触MongoDB或对MongoDB有一点了解的C#开发人员.因为本文是一篇入门级的文章. 一.了解MongoDB  MongoDB是一个基于分布式文件存储的数据库.由C++语言编写 ...

  7. 第五课 Css3旋转放大属性,正六边形的绘制

    ---恢复内容开始--- 一.效果 二.知识点 1.background-color: rgba(0,0,0,.4);   (红色.绿色.蓝色.透明度(0-1)) 2.position: absolu ...

  8. Dynamics 365支持的语言(中文语言名/英文语言名)列表

    本人微信和易信公众号:微软动态CRM专家罗勇 ,回复277或者20180803可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...

  9. 为你揭秘知乎是如何搞AI的——窥大厂 | 数智方法论第1期

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 数智物语(公众号ID:decision_engine)出品 策划.编写:卷毛雅各布 「我们相信,在垃圾 ...

  10. ios手机录屏软件哪个好

    苹果手机中的airplay镜像,是苹果手机系统的一大特色,可以轻松把手机屏幕投射电脑,这个功能使苹果手机相较安卓手机投屏会更加轻松,那么如何实现苹果手机投射电脑屏幕?下面小编便来分享ios手机录屏软件 ...