Flutter 性能優(yōu)化3

適用于多次數(shù)據(jù)變化

既然有了FutureBuilder 一次性的數(shù)據(jù)變化更新視圖,那就有多次,那就來看看StreamBuilder吧

import 'dart:async';

import 'package:flutter/material.dart';

class StatePage extends StatefulWidget {
  @override
  StatePageState createState() => new StatePageState();
}

class StatePageState extends State<StatePage> {
  StreamController streamController = new StreamController();
  int index = 0;

  @override
  Widget build(BuildContext context) {
    print('test StatePageState build');
    return Scaffold(
        appBar: AppBar(
          title: Text('statPage', style: TextStyle(fontSize: 16)),
          centerTitle: true,
        ),
        body: Align(
          child: Column(
            children: <Widget>[
              StreamBuilder(
                stream: streamController.stream,
                initialData: index,
                builder: (context, snapshot) {
                  print('test FutureBuilder builder');
                  return Text("this number:${snapshot.data}");
                },
              ),
              RaisedButton(
                child: Text('add $index'),
                onPressed: countChange,
              ),
              RaisedButton(
                child: Text('add2'),
                onPressed: add,
              ),
            ],
          ),
        ));
  }

  void countChange() {
    streamController.add(++index);
  }

  void add() {
    setState(() {
      index += 10;
    });
  }

  @override
  void dispose() {
    streamController.close();
    super.dispose();
  }
}

StreamBuilder繼承了StreamBuilderBase解幼,StreamBuilderBase又繼承了StatefulWidget,所以StreamBuilder中的builder中的視圖丟給了一個StatefulWidget崎脉,在這個StatefulWidget中接收外面?zhèn)鬟M來的一個Stream,用于監(jiān)聽數(shù)據(jù)變化更新,可以看_StreamBuilderBaseState中_subscribe代碼

 void _subscribe() {
    if (widget.stream != null) {
      _subscription = widget.stream.listen((T data) {
        setState(() {
          _summary = widget.afterData(_summary, data);
        });
      }, onError: (Object error) {
        setState(() {
          _summary = widget.afterError(_summary, error);
        });
      }, onDone: () {
        setState(() {
          _summary = widget.afterDone(_summary);
        });
      });
      _summary = widget.afterConnected(_summary);
    }
  }

當(dāng)?shù)谝粋€RaisedButton 點擊執(zhí)行countChange更新stream的值后伯顶,_StreamBuilderBaseState中_subscribe方法中widget.stream.listen 會監(jiān)聽到數(shù)據(jù)變化囚灼,執(zhí)行setState更新當(dāng)前StatefulWidget,也就是會調(diào)用我們定義的StreamBuilder中builder方法

但是當(dāng)我們自己setState的時候祭衩,StreamBuilder中的builder方法同樣會被執(zhí)行啦撮,因為這個小部件在我們自己build中,但是這個時候取的snapshot.data并變化汪厨,因為snapshot.data取的是stream中的值,這個stream的值并沒有發(fā)生改變

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末愉择,一起剝皮案震驚了整個濱河市劫乱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锥涕,老刑警劉巖衷戈,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異层坠,居然都是意外死亡殖妇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門破花,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谦趣,“玉大人疲吸,你說我怎么就攤上這事∏岸欤” “怎么了摘悴?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舰绘。 經(jīng)常有香客問我蹂喻,道長,這世上最難降的妖魔是什么捂寿? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任口四,我火速辦了婚禮,結(jié)果婚禮上秦陋,老公的妹妹穿的比我還像新娘蔓彩。我一直安慰自己,他們只是感情好踱侣,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布粪小。 她就那樣靜靜地躺著,像睡著了一般抡句。 火紅的嫁衣襯著肌膚如雪探膊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天待榔,我揣著相機與錄音逞壁,去河邊找鬼。 笑死锐锣,一個胖子當(dāng)著我的面吹牛腌闯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雕憔,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼姿骏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了斤彼?” 一聲冷哼從身側(cè)響起分瘦,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琉苇,沒想到半個月后嘲玫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡并扇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年去团,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡土陪,死狀恐怖昼汗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旺坠,我是刑警寧澤乔遮,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站取刃,受9級特大地震影響蹋肮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜璧疗,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一坯辩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧崩侠,春花似錦漆魔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至系瓢,卻和暖如春阿纤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夷陋。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工欠拾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骗绕。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓藐窄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酬土。 傳聞我的和親對象是個殘疾皇子荆忍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容