AbsorbPointer可以想象成web端的遮罩,众所周知周知,禁止表单的点击时间有disabled
,但是这样一来,如果页面比较复杂,要控制表单元素是否可点那可成了灾难,这时候AbsorbPointer
就可以快速解决这个问题。我们可以把它看成是一个透明的穹顶,一旦打开,从外部是无法到达内部。不过有一点值得注意,如果一个输入框已经获取焦点,然后再打开穹顶,输入框还是可以输入的。
属性
- absorbing 布尔类型,字面意思是吸收,通俗点讲这个属性就是用来控制其child里面的组件是否可以点击,通常用的最多的也是这个属性。
- child Widget类型,可以是任何组件。
- ignoringSemantics 布尔类型,是否忽略语义。经测试没什么影响,一般使用比较少。
实例
代码
import "package:flutter/material.dart";class AbsorbPointerPage extends StatefulWidget { @override _AbsorbPointerPageState createState() => _AbsorbPointerPageState();}class _AbsorbPointerPageState extends State<AbsorbPointerPage> { bool switchValue = false; bool radioValue = false; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Absorbpointer'), centerTitle: true, elevation: 0, ), body: Column( mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[ Row( children: <Widget>[ Text('是否可点击:'), Switch( value: switchValue, onChanged: (bool val) { setState(() { switchValue = val; }); }, ) ], ), Container( child: AbsorbPointer( absorbing: switchValue, child: Column( children: <Widget>[ Radio( value: radioValue, onChanged: (bool val) { setState(() { radioValue = val; }); }, ), MaterialButton( color: Colors.green, child: Text('我是按钮'), onPressed: () {}, ), MaterialButton( color: Colors.green, child: Text('我是按钮'), onPressed: () {}, ), MaterialButton( color: Colors.green, child: Text('我是按钮'), onPressed: () {}, ) ], ), ), ), MaterialButton( color: Colors.green, child: Text('我是外面的按钮,不受影响'), onPressed: () {}, ) ], ), ); }}
未完待续……!