【发布时间】:2021-08-15 14:15:59
【问题描述】:
我有一个Card 小部件,小时候有TextFormField。每次用户进入新行时,我都想增加卡片的高度。卡片包裹在Container 中,我有一个高度变量来确定高度。
如何检测TextFormField 中的新行?每当文本换行到下一行时也是如此。
【问题讨论】:
-
看看IntrinsicHeight小部件
-
谢谢!效果很好!
我有一个Card 小部件,小时候有TextFormField。每次用户进入新行时,我都想增加卡片的高度。卡片包裹在Container 中,我有一个高度变量来确定高度。
如何检测TextFormField 中的新行?每当文本换行到下一行时也是如此。
【问题讨论】:
我认为您需要创建一个函数来检查 TextFormField 特定行。
我认为这对你有用“https://stackoverflow.com/questions/45900387/multi-line-textfield-in-flutter”
【讨论】:
在不按回车的情况下更新高度:
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% 对我有用。
【讨论】: