TextField

作者: Breezes | 来源:发表于2021-11-29 17:14 被阅读0次

    焦点管理

    在Flutter中TextField使用FocusNode管理焦点

    FocusNode focusNode = FocusNode();
    
    TextField(
              focusNode: focusNode,
            )
    

    获取、取消焦点:

    //获取
    focusNode.requestFocus();
    //取消
    focusNode.unfocus();
    

    取消所有焦点

    FocusScope.of(viewService.context).requestFocus(FocusNode());
    

    不使用FocusNode,自动获取焦点

    TextField(
              autofocus: true,
            )
    

    TextEditingController

    TextEditingController继承自ValueNotifier
    TextField的控制器,可以获取TextField的内容、设置TextField的内容。
    也可以直接使用TextFieldonChanged,可以直接获取内容。

    TextField(
              onChanged: (value){
                
              },
             )
    

    文字无法居中的问题

    引用:https://mp.weixin.qq.com/s/2A9THwAFJyQPL7-Jgd-ZjA

    TextField 设置一个高度时,会导致文字不居中,这是因为contentPadding引起的

    image.png

    contentPadding的计算规则:

    (TextField的高度 - 文字高度) / 2

    重新设置contentPadding

    image.png

    计算contentPadding代码如下⬇️

    EdgeInsets _calculateContentPadding(TextStyle style, double height) {
        var textPainter = TextPainter(
          text: TextSpan(
            text:'',
            style: style,
          ),
          textDirection: TextDirection.ltr,
          textWidthBasis: TextWidthBasis.longestLine,
        )..layout();
        return EdgeInsets.symmetric(horizontal: 12,vertical: (height - textPainter.height) / 2);
      }
    
    

    然而我发现当高度比较低时,只是单纯设置contentPadding还是轻微不居中,很细微,看3这个字符就能看出来

    image.png
    我重新设置了一下isCollapsed: true,可以了。
    image.png

    字数统计异常

    https://mp.weixin.qq.com/s/2A9THwAFJyQPL7-Jgd-ZjA

    相关文章

      网友评论

          本文标题:TextField

          本文链接:https://www.haomeiwen.com/subject/xallxrtx.html