根据用户在 ListVIew 容器内 TextFormField() 中的输入更新 Text()
Update Text() based on user input in a TextFormField() within a container in a ListVIew
我是 flutter 的新手,对上述内容有...挑战。
我从 FireStore 中检索有关几个对象/文档的数据并创建一个 ListView。
逻辑或缺乏逻辑如下所示:
Container
StreamBuilder
ListView
Container
Rows, Columns, Text and whatever to display each document from StreamBuilder.
此 ListView 包含多个容器,每个容器显示来自一个对象的数据。在每个 Container 中都有一个 TextFormField,它采用双精度值。基于此值,我想更改同一容器内的 Text() - 计算。
这可能吗?如果是这样 - 怎么样?我知道我可以以某种方式使用 TextEditController,但是计算结果将是可编辑的。或者?
return new ListView(//
children: getMedicationItem(asyncSnapshot
shrinkWrap: true,
children: asyncSnapshot.data.documents.map((DocumentSnapshot document) {
MyObject object = new MyObject(document, integerValue);
backgroundColor = !backgroundColor;
return new Container(
color: backgroundColor? Colors.black26: Colors.white,
child: new Row(
children: <Widget>[
new Flexible(
child: TextFormField(
onChanged: (text) {
double calculation = 0.0;
if (text.length > 0)
calculation = double.tryParse(text) * 23;
**UPDATE "$calculation" in Text() below**
},
keyboardType: TextInputType.number,
inputFormatters: [_decimal_validator],
)
),
new Flexible(
child: Text("$calculation"),
)
]
),
);
}
).toList(),
)
);
您需要做的就是使用 setState
告诉 Flutter 变量已更改并且您想要重建使用它的任何 Widgets:
if (text.length > 0){
setState((){
calculation = double.tryParse(text) * 23;
});
}
我是 flutter 的新手,对上述内容有...挑战。
我从 FireStore 中检索有关几个对象/文档的数据并创建一个 ListView。
逻辑或缺乏逻辑如下所示:
Container
StreamBuilder
ListView
Container
Rows, Columns, Text and whatever to display each document from StreamBuilder.
此 ListView 包含多个容器,每个容器显示来自一个对象的数据。在每个 Container 中都有一个 TextFormField,它采用双精度值。基于此值,我想更改同一容器内的 Text() - 计算。
这可能吗?如果是这样 - 怎么样?我知道我可以以某种方式使用 TextEditController,但是计算结果将是可编辑的。或者?
return new ListView(//
children: getMedicationItem(asyncSnapshot
shrinkWrap: true,
children: asyncSnapshot.data.documents.map((DocumentSnapshot document) {
MyObject object = new MyObject(document, integerValue);
backgroundColor = !backgroundColor;
return new Container(
color: backgroundColor? Colors.black26: Colors.white,
child: new Row(
children: <Widget>[
new Flexible(
child: TextFormField(
onChanged: (text) {
double calculation = 0.0;
if (text.length > 0)
calculation = double.tryParse(text) * 23;
**UPDATE "$calculation" in Text() below**
},
keyboardType: TextInputType.number,
inputFormatters: [_decimal_validator],
)
),
new Flexible(
child: Text("$calculation"),
)
]
),
);
}
).toList(),
)
);
您需要做的就是使用 setState
告诉 Flutter 变量已更改并且您想要重建使用它的任何 Widgets:
if (text.length > 0){
setState((){
calculation = double.tryParse(text) * 23;
});
}