flutter中事件傳遞:禁止用戶交互 獲取點擊事件

可能有時候會需要這種需求

 

比如文本框可以響應點擊事件但是禁止用戶輸入

直接粗暴的設置

TextField(enabled: false,)

這樣就無法得知ontap事件了,

當然你可以用

enableInteractiveSelection: false

配合ontap 收鍵盤來達到目的

但是 不夠優雅

記錄一下 flutter提供的兩個組件AbsorbPointer  和 IgnorePointer

Column(
        children: <Widget>[
          Text('AbsorbPointer'),
          GestureDetector(
            onTap: () {
              print('AbsorbPointer');
            },
            child: AbsorbPointer(
              absorbing: true,
              child: Row(
                children: <Widget>[
                  TextField(enabled: false,),
                  RaisedButton(
                    onPressed: () {
                      print('onPressed');
                    },
                  ),
                  RaisedButton(
                    onPressed: () {
                      print('onPressed');
                    },
                  ),
                  RaisedButton(
                    onPressed: () {
                      print('onPressed');
                    },
                  ),
                  RaisedButton(
                    onPressed: () {
                      print('onPressed');
                    },
                  ),
                ],
              ),
            ),
          ),
          Text('IgnorePointer'),
          GestureDetector(
            onTap: () {
              print('IgnorePointer');
            },
            child: IgnorePointer(
              ignoring: true,
              child: Row(
                children: <Widget>[
                  RaisedButton(
                    onPressed: () {
                      print('onPressed');
                    },
                  ),
                  RaisedButton(
                    onPressed: () {
                      print('onPressed');
                    },
                  ),
                  RaisedButton(
                    onPressed: () {
                      print('onPressed');
                    },
                  ),
                  RaisedButton(
                    onPressed: () {
                      print('onPressed');
                    },
                  ),
                ],
              ),
            ),
          )
        ],
      )

區別:

IgnorePointer和AbsorbPointer,這兩個Widget都能阻止子樹接收指針事件,不同的是AbsorbPointer本身是可以接收指針事件的(但其子樹不行),而IgnorePointer本身就不可以接收指針事件

都是true到時候點擊

此時只有

AbsorbPointer可以響應 而IgnorePointer則沒有反應
 

檔都是false的時候

 

可以看到下邊的事件都可以響應

 

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