可能有時候會需要這種需求
比如文本框可以響應點擊事件但是禁止用戶輸入
直接粗暴的設置
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到時候點擊
此時只有
檔都是false的時候
可以看到下邊的事件都可以響應