<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 參考資料 [Flutter完整開發實戰詳解(十一、全面深入理解Stream)](https://juejin.im/post/5cc2acf86fb9a0321f042041) [異步UI更新(FutureBuilder、StreamBuilder)](https://book.flutterchina.club/chapter7/futurebuilder_and_streambuilder.html) ## Dart中的Stream `Stream`就是事件流或者管道,事件流相信大家并不陌生,簡單的說就是:**基于事件流驅動設計代碼,然后監聽訂閱事件,并針對事件變換處理響應**。 在 Flutter 中,整個`Stream`設計外部暴露的對象主要如下圖,主要包含了`StreamController`、`Sink`、`Stream`、`StreamSubscription`四個對象。 ![](https://img.kancloud.cn/5c/a7/5ca7af90859fb81ec04391fe48f6dbce_1240x635.png) ~~~ class DataBloc{ ///控制器 StreamController<List<String>> _dataController = StreamController<List<String>>(); ///事件的入口 StreamSink<List<String>> get _dataSink => _dataController.sink; ///獲取 Stream 用于監聽 Stream<List<String>> get _dataStream => _dataController.stream; ///事件訂閱對象 StreamSubscription _dataSubscription; init(){ ///監聽事件 _dataSubscription = _dataStream.listen((value){ print(value); }); _dataSink.add(["first", "second", "three", "more"]); } close() { ///關閉 _dataSubscription.cancel(); _dataController.close(); } } ~~~ 個人理解: StreamController:一個大管家 StreamSink:用于發送事件 Stream\StreamSubscription:用于監聽,StreamSubscription是Stream產生的 ## Flutter中的Stream 在 Flutter 中通過`StreamBuilder``StreamBuilder`配合`Stream`來展示流上事件(數據)變化的UI組件。下面看一下`StreamBuilder`的默認構造函數: ~~~ StreamBuilder({ Key key, this.initialData, Stream<T> stream, @required this.builder, }) ~~~ * `stream`:`StreamBuilder`依賴的`stream` * `initialData`:初始數據,用戶設置默認數據。 * `builder`:Widget構建器;該構建器會在`Future`執行的不同階段被多次調用,構建器簽名如下: ~~~ Function (BuildContext context, AsyncSnapshot snapshot) ~~~ `snapshot`會包含當前異步任務的狀態信息及結果信息 ,比如我們可以通過`snapshot.connectionState`獲取異步任務的狀態信息、通過`snapshot.hasError`判斷異步任務是否有錯誤等等,完整的定義讀者可以查看`AsyncSnapshot`類定義。 另外,`FutureBuilder`的`builder`函數簽名和`StreamBuilder`的`builder`是相同的。 例子: ~~~ Widget buildStreanBuilder() { return StreamBuilder<List<String>>( stream: _dataStream, initialData: ["none"], ///這里的 snapshot 是數據快照的意思 builder: (BuildContext context, AsyncSnapshot<List<String>> snapshot) { ///獲取到數據,為所欲為的更新 UI var data = snapshot.data; return new Text(data.toString()); }); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看