英文:
Flutter : How to set height for my TextField without make my screen bug?
问题
I want to add a textfield inside my row.....
我想在我的行内添加一个文本字段.....
Here, the display is good
在这里,显示效果很好
But here
但是在这里
The display is bugged just because I added a TextField, but.. why ?
显示效果出错仅仅是因为我添加了一个TextField,但是...为什么?
I want the textfield can be added without bug my display instead of having a white screen when I add my textfield.....
我希望可以添加文本字段而不会导致显示错误,而不是在添加文本字段时出现白屏.....
I really don't understand why
我真的不明白为什么
英文:
I want to add a textfield inside my row.....
Widget build(BuildContext context) {
return
SingleChildScrollView(
child: Column(
children: [
Row(
children: [
Image.asset("assets/cross.png"),
Text("Nouveau contact"),
]
),
Row(
children: [
Radio(value: "Homme", groupValue: gender, onChanged: (value) { setState(() { gender = value; }); }),
Text("Homme"),
Divider(indent: 10.0,),
Radio(value: "Femme", groupValue: gender, onChanged: (value) { setState(() { gender = value; }); }),
Text("Femme"),
],
),
Row(
children: [
//NOTHING HERE
],
),
Row(),
],
),
);
}
Here, the display is good
But here
Widget build(BuildContext context) {
return
SingleChildScrollView(
child: Column(
children: [
Row(
children: [
Image.asset("assets/cross.png"),
Text("Nouveau contact"),
]
),
Row(
children: [
Radio(value: "Homme", groupValue: gender, onChanged: (value) { setState(() { gender = value; }); }),
Text("Homme"),
Divider(indent: 10.0,),
Radio(value: "Femme", groupValue: gender, onChanged: (value) { setState(() { gender = value; }); }),
Text("Femme"),
],
),
Row(
children: [
TextField(
maxLines: 1,
controller: TextEditingController(
text: firstname
),
decoration: InputDecoration(
hintText: "Prénom"
),
),
],
),
Row(),
],
),
);
}
The display is bugged just because I added a TextField, but.. why ?
I want the textfield can be added without bug my display instead of having a white screen when I add my textfield.....
I really don't understand why
答案1
得分: 1
如果您查看控制台,您应该能够看到为什么出错。应该会显示类似以下内容:
"输入装饰器,通常由TextField创建,不能具有无界宽度。\n这是在父部件没有提供有限宽度约束时发生的。例如,如果InputDecorator包含在Row中,那么它的宽度必须受到约束。可以使用Expanded部件或SizedBox来约束InputDecorator或包含它的TextField的宽度。"
要解决这个问题,您可以按照建议的方式进行编写:
Row(
children: [
Expanded(
child: TextField(
maxLines: 1,
controller: TextEditingController(
text: firstname
),
decoration: InputDecoration(
hintText: "Prénom"
),
),
),
],
),
简化解释一下,Row
告诉其子部件:“尽情占用所有可用空间,没有限制”。而默认情况下,TextField
希望占用所有可用空间。这两者不兼容。Expanded
是一个部件,确保其子部件知道实际可用的空间有多大。
英文:
If you look in your console you should be able to see why it's wrong. It should say something like
> "An InputDecorator, which is typically created by a TextField, cannot
> have an unbounded width.\nThis happens when the parent widget does not
> provide a finite width constraint. For example, if the InputDecorator
> is contained by a Row, then its width must be constrained. An Expanded
> widget or a SizedBox can be used to constrain the width of the
> InputDecorator or the TextField that contains it."
So to solve it you can do what is suggested by writing
Row(
children: [
Expanded(
child: TextField(
maxLines: 1,
controller: TextEditingController(
text: firstname
),
decoration: InputDecoration(
hintText: "Prénom"
),
),
),
],
),
To try to explain it a bit simplified. A Row
tells their children: "Take all the space you want, there is no limit". And a TextField
by default wants all available space. This doesn't work together. An Expanded
is a widget that makes sure that its child knows how much space there really is.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论