Stream 異步學習

  1. 可以通過 await for 循環來讀取 stream 的數據,在循環結束時也是stream關閉的時候,反之亦然。
  2. 在一個stream 方法中,通過 yield 向await for 傳遞消息
  3. stream 可以通過 listen 方法來監聽
  4. 通過對函數聲明 async* 表示該函數是一個stream,參考代碼1
  5. listen方法會返回 StreamSubscription 對象,可以通過返回的對象設置 onData onDone onError 方法
  6. StreamSubscription 有 callback 、cencal、pause、resume 方法,可以接收數據、取消監聽、暫停監聽、恢復監聽
  7. 對於 onDone 方法,如果訂閱方主動取消監聽,是無法觸發的
  8. Stream 可以單次訂閱和廣播訂閱
  9. stream 可以通過 transform 方法對數據進行加工,然後再傳遞給 listen 方法處理, 需要通過 StreamTransformer 創建 transform
  10. streamController 入口叫做 sink,出口就是 stream
  11. 可以通過 Stream<T>.periodic 來執行一個循環定時的輸出流,參考代碼2
  12. 可以通過 Stream 中的 skip 方法跳過流,通過 where 方法過濾流, 通過 transform 方法轉換流

 

代碼1:

Stream s = streamTest();

s.listen((v){
  print(v);
});

Stream<int> streamTest() async * {


  for(var i = 0;i<=10;i++){
     yield i;
  }

}
    

代碼2:

 

Stream x = Stream<String>.periodic(Duration(seconds: 1),timePer);

x.listen((v){
    print(v);
});

String timePer(int x)  {

  // ignore: omit_local_variable_types
  x+=1;

  return 'run in ${x.toString()} times';

}

學習資料:

1、http://www.flutterj.com/?post=103

2、https://juejin.im/post/5d3a91d1e51d457778117479#heading-18

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章