大多数widget会提供一种禁止输入的方法。
例如,如果您将RaisedButton的onPressed回调设置为空值,则它将被禁用。
RaisedButton(
color: Colors.blue,
child: Text('Click me!'),
onPressed: null,
)
并且您可以使用NeverScrollableScrollPhysics告诉ListView在用户拖动时不要滚动。
但是如果你有一个复杂的widget子树,并且只需要一个简单的方法,来阻止它们接触到触摸事件,请尝试使用AbsorbPointer!
只需将它放在您要阻止的窗口widget子树的最顶端,即使您看不到它,它也会使触摸事件无法访问下面的所有窗口widgets。
class MyHomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AbsorbPointer(
child: AbunchOfWidgets(),
);
}
}
、
您可以使用absorbing属性,快速打开和关闭AbsorbPointer,
class MyHomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AbsorbPointer(
absorbing: false,
child: AbunchOfWidgets(),
);
}
}
而ignoringSemantics属性可让您控制屏幕阅读器和其他功能是否会忽略被阻止的widget。
class MyHomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AbsorbPointer(
ignoringSemantics: false,
child: AbunchOfWidgets(),
);
}
}
如果想了解有关AbsorbPointer的内容,或者关于Flutter的其他功能,请访问flutter.io
原文翻译自视频:视频地址