<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### Notification Notification是Flutter中一個重要的機制,在Widget樹中,每一個節點都可以分發通知,通知會沿著當前節點(context)向上傳遞,所有父節點都可以通過NotificationListener來監聽通知,Flutter中稱這種通知由子向父的傳遞為“通知冒泡”(Notification Bubbling),這個和用戶觸摸事件冒泡是相似的,但有一點不同:通知冒泡可以中止,但用戶觸摸事件不行。 Flutter中很多地方使用了通知,如可滾動(Scrollable) Widget中滑動時就會分發ScrollNotification,而Scrollbar正是通過監聽ScrollNotification來確定滾動條位置的。除了ScrollNotification,Flutter中還有SizeChangedLayoutNotification、KeepAliveNotification 、LayoutChangedNotification等。下面是一個監聽Scrollable Widget滾動通知的例子: ``` NotificationListener( onNotification: (notification){ //print(notification); switch (notification.runtimeType){ case ScrollStartNotification: print("開始滾動"); break; case ScrollUpdateNotification: print("正在滾動"); break; case ScrollEndNotification: print("滾動停止"); break; case OverscrollNotification: print("滾動到邊界"); break; } }, child: ListView.builder( itemCount: 100, itemBuilder: (context, index) { return ListTile(title: Text("$index"),); } ), ); ``` 上例中的滾動通知如ScrollStartNotification、ScrollUpdateNotification等都是繼承自ScrollNotification類,不同類型的通知子類會包含不同的信息,比如ScrollUpdateNotification有一個`scrollDelta`屬性,它記錄了移動的位移,其它通知屬性讀者可以自己查看SDK文檔。 #### 自定義通知 除了Flutter內部通知,我們也可以自定義通知,下面我們看看如何實現自定義通知: 1. 定義一個通知類,要繼承自Notification類; ``` class MyNotification extends Notification { MyNotification(this.msg); final String msg; } ``` 2. 分發通知。 Notification有一個`dispatch(context)`方法,它是用于分發通知的,我們說過context實際上就是操作Element的一個接口,它與Element樹上的節點是對應的,通知會從context對應的Element節點向上冒泡。 下面我們看一個完整的例子: ``` class NotificationRoute extends StatefulWidget { @override NotificationRouteState createState() { return new NotificationRouteState(); } } class NotificationRouteState extends State<NotificationRoute> { String _msg=""; @override Widget build(BuildContext context) { //監聽通知 return NotificationListener<MyNotification>( onNotification: (notification) { setState(() { _msg+=notification.msg+" "; }); }, child: Center( child: Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ // RaisedButton( // onPressed: () => MyNotification("Hi").dispatch(context), // child: Text("Send Notification"), // ), Builder( builder: (context) { return RaisedButton( //按鈕點擊時分發通知 onPressed: () => MyNotification("Hi").dispatch(context), child: Text("Send Notification"), ); }, ), Text(_msg) ], ), ), ); } } class MyNotification extends Notification { MyNotification(this.msg); final String msg; } ``` 上面代碼中,我們每點一次按鈕就會分發一個`MyNotification`類型的通知,我們在Widget根上監聽通知,收到通知后我們將通知通過Text顯示在屏幕上。 > 注意:代碼中注釋的部分是不能正常工作的,因為這個`context`是根Context,而NotificationListener是監聽的子樹,所以我們通過`Builder`來構建RaisedButton,來獲得按鈕位置的context。 運行效果如下: ![](https://box.kancloud.cn/ce4b57e6e6efbfcac5637a6643b6dc74_260x462.png)
                  <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>

                              哎呀哎呀视频在线观看