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. 开源库Magicodes.Storage正式发布

    说明 Magicodes.Storage,是心莱科技团队提供的统一存储库,相关库均使用.NET标准库(netstandard2.0)编写,支持.NET Framework以及.NET Core. 我们 ...

  2. javascript中filter的用法

    filter filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素. 和map()类似,Array的filter()也接收一个函数.和map()不同的是,filter ...

  3. Perl IO:IO重定向

    文件句柄和文件描述符的关系 文件描述符是操作系统的资源,对于实体文件来说,每打开一次文件,操作系统都会为该进程分配一个文件描述符来关联(指向)这个文件,以后操作文件数据都根据这个文件描述符来操作,而不 ...

  4. Linux文件权限与属性详解 之 SUID、SGID & SBIT

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  5. Android破解学习之路(八)—— 进化之地内购破解

    最近在TapTap闲逛,看到了进化之地这款游戏,TapTap上有两个进化之地,一个是在TapTap直接购买的,另外一个则是试玩版,玩到中间就会有个购买完整版. 试玩版连接:https://www.ta ...

  6. 开源介绍·新款简约、实用与大气的Hexo新主题:BMW

    这是一个简约.大气.实用的Hexo新主题:BMW

  7. vue生成二维码插件qrcodejs2

    1.页面 <div id="qrCode" ref="qrCodeDiv"></div> 2.导入插件 import QRCode fr ...

  8. html iframe高度自适应

    想到的一种办法是,在父页面里获取子页面的高度,在父页面onlod里把获取到子页面的高度赋值给父页面iframe标签,不过这种方法感觉不是很好,因为浏览器兼容性不好,获取不到高度 这种方法有两种写法 & ...

  9. 使用ip开头的工具,而不是只会ifconfig

    结论: 1.使用ip 开头的工具,比ifconfig显示的信息更多,并且支持的功能更强大. 2.常用的功能有: 显示接口基本信息: ip link show dev eth0 设置端口up/down: ...

  10. JAVA forname classnotfoundexception 错误

    今日在使用Class.forName方法的时候报了错误: JAVA forname classnotfoundexception 原因是Class.forName(className);里面的clas ...