在 TextFormField 中检测新行 - Flutter

Posted

技术标签:

【中文标题】在 TextFormField 中检测新行 - Flutter【英文标题】:Detect new line in TextFormField - Flutter 【发布时间】:2021-08-15 14:15:59 【问题描述】:

我有一个Card 小部件,小时候有TextFormField。每次用户进入新行时,我都想增加卡片的高度。卡片包裹在Container 中,我有一个高度变量来确定高度。

如何检测TextFormField 中的新行?每当文本换行到下一行时也是如此。

【问题讨论】:

看看IntrinsicHeight小部件 谢谢!效果很好! 【参考方案1】:

我认为您需要创建一个函数来检查 TextFormField 特定行。

我认为这对你有用“https://***.com/questions/45900387/multi-line-textfield-in-flutter”

【讨论】:

【参考方案2】:

在不按回车的情况下更新高度:

onChanged: (String e) 
    int sizeIncreaseConstant = 30; //the fontSize 20 + buffer
    int widthOfCharacter = 17; // 85% of fontsize
    int newNumLines = ((e.length * widthOfCharacter)/widthOfContainer).truncate();
    if( newNumLines != numLines) 
        setState(() 
            if(newNumLines > numLines) 
                heightOfContainer = heightOfContainer + sizeIncreaseConstant;
            else
                heightOfContainer = heightOfContainer - sizeIncreaseConstant;
            numLines = newNumLines;
        );
    
,

初始值:

int numLines = 0;
double widthOfContainer = 120;
double heightOfContainer = 50;
//fontSize = 20;

为此,您必须为所有字符使用宽度相等的字体,例如 Monospace。您还需要根据 fontSize 确定字符的宽度。它应该是字体大小的 50-60%,但 85% 对我有用。

【讨论】:

我还想检测文本何时换行到下一行而不按回车。

以上是关于在 TextFormField 中检测新行 - Flutter的主要内容,如果未能解决你的问题,请参考以下文章

为啥 sys_read 系统调用在检测到新行时结束?

在 PHP 中附加文件...无法使用新行 (\n) 来处理变量

javafx tableview 检测任何行的任何更改,包括添加新行

如何在 TextFormField 中显示/隐藏密码?

在颤动中从 TextFormField 添加多个值

在颤动中单击 TextFormField 后键盘正在关闭