Ich erhalte eine Rendering-Ausnahme, deren Behebung ich nicht verstehe. Ich versuche eine Spalte mit 3 Zeilen zu erstellen.
Zeile [Bild]
Zeile [TextField]
Zeile [Schaltflächen]
Hier ist mein Code zum Erstellen des Containers:
Container buildEnterAppContainer(BuildContext context) {
var container = new Container(
padding: const EdgeInsets.all(8.0),
child: new Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
buildImageRow(context),
buildAppEntryRow(context),
buildButtonRow(context)
],
),
);
return container;
}
und mein buildAppEntryRow-Code für den Textcontainer
Widget buildAppEntryRow(BuildContext context) {
return new Row(
children: <Widget>[
new TextField(
decoration: const InputDecoration(helperText: "Enter App ID"),
style: Theme.of(context).textTheme.body1,
)
],
);
}
Wenn ich laufe, erhalte ich die folgende Ausnahme:
I/flutter ( 7674): BoxConstraints forces an infinite width.
I/flutter ( 7674): These invalid constraints were provided to RenderStack's layout() function by the following
I/flutter ( 7674): function, which probably computed the invalid constraints in question:
I/flutter ( 7674): RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:256:13)
I/flutter ( 7674): The offending constraints were:
I/flutter ( 7674): BoxConstraints(w=Infinity, 0.0<=h<=Infinity)
Wenn ich buildAppEntryRow stattdessen in ein TextField ändere
Widget buildAppEntryRow2(BuildContext context) {
return new TextField(
decoration: const InputDecoration(helperText: "Enter App ID"),
style: Theme.of(context).textTheme.body1,
);
}
Ich bekomme keine Ausnahme mehr. Was fehlt mir bei der Zeilenimplementierung, die dazu führt, dass die Größe dieser Zeile nicht berechnet werden kann?
mainAxisAlignment
das Zeilen-Widget. Bei zwei Text-Widgets gibt es kein Problem, aber bei einem Text-Widget und einem darin enthaltenen Textfeld-Widget wirdFlexible
es ohne Abstand nach links ausgerichtet.Sie erhalten diesen Fehler, weil er
TextField
sich in horizontaler Richtung ausdehnt, ebenso wie derRow
. Daher müssen wir die Breite des einschränken.TextField
Es gibt viele Möglichkeiten, dies zu tun.Verwenden
Expanded
Verwenden
Flexible
Wickeln Sie es in
Container
oderSizedBox
und sorgen Sie dafürwidth
quelle
TextField
in einer Reihe haben.Sie sollten Flexible verwenden, um ein Textfeld innerhalb einer Zeile zu verwenden.
quelle
Container
, du kannst dasFlexible
direkt benutzen .Die Lösung besteht darin,
Text()
eines der folgenden Widgets einzuschließen: EntwederExpanded
oderFlexible
. Ihr Code mit Expanded lautet also wie folgt:quelle
Wie @Asif Shiraz erwähnte, hatte ich das gleiche Problem und löste dieses Problem, indem ich Column in a Flexible einwickelte.
quelle
Eine einfache Lösung besteht darin, Ihr
Text()
Inneres einzuwickelnContainer()
. Ihr Code lautet also wie folgt:Hier erhalten Sie auch das Attribut width und height eines Containers, um das Erscheinungsbild Ihres Textfelds anzupassen. Keine Notwendigkeit zu verwenden,
Flexible
wenn Sie Ihr Textfeld in einen Container einschließen.quelle
width: n