1、GestureDetector点击区域太小
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => print(),
child: Container()
)
2、获取键盘高度
MediaQuery.of(context).viewInsets.bottom
//必要条件, 否则获取上述值一直为0,并可以避免键盘顶起造成的报错
Scaffold(
resizeToAvoidBottomInset: false,
)
3、textField自适应高度
像微信那样,输入框可以输入多行文本,输入框可以随着改变最大高度
/*
1、textField外设置最大最小高度
2、maxLine设置为null
3、keyboardType设置为TextInputType.multiline
*/
return Container(
color: Colors.red,
constraints: BoxConstraints(
maxHeight: 144.0,
maxWidth: _screenWidth(),
minHeight: 48.0,
minWidth: _screenWidth()),
padding: EdgeInsets.only(
left: 16.0, right: 16.0, top: 8.0, bottom: 4.0),
child: TextField(
maxLines: null,
keyboardType: TextInputType.multiline,
decoration: InputDecoration.collapsed(
hintText: "Write a comment",
),
),
);
double _screenWidth() {
return MediaQuery.of(context).size.width;
}
4、设置container的最大/最小、高度/宽度
Container(
constraints:BoxConstraints(
minHeight: 50,
maxHeight: 100,
)
)
5、退出app
SystemNavigator.pop();
6、textField焦点的获取和释放
FocusNode _focusNodeController = FocusNode();
TextField(
focusNode: _focusNodeController,
)
_focusNodeController.unfocus(); //失去焦点
_focusNodeController.hasFocus(); //获取焦点
7、不通过焦点控制,调起/关闭键盘
//通过焦点控制改变键盘状态
//聚焦
FocusScope.of(context).requestFocus(FocusNode());
//切换到下一个textField聚焦
FocusScope.of(context).nextFocus(FocusNode());
//失去焦点
FocusNode.unfocus();
//不通过键盘控制, 直接调用键盘
SystemChannels.textInput.invokeMethod('TextInput.show');
SystemChannels.textInput.invokeMethod('TextInput.hide');
8、子container继承父container的宽高
width: double.infinity;
height: double.infinity;
9、字符串长度补全
//第一位为保留几位,第二位为不足用0补全
toString().padLeft(2, '0');