flutter 一些零碎的方法

178 阅读1分钟

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');