Flutter Widget 之AbsorbPointer

499 阅读1分钟

大多数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

原文翻译自视频:视频地址