我有这个将来的生成器,它返回一个TextFormField:
new FutureBuilder(
future: _controller.load(),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
String content;
if (snapshot.hasData) {
Map data = _controller.decode(snapshot.data);
content = data['x'];
}
return TextFormField(controller:
textController = new TextEditingController(text: content == null ? "" : content),
因此,一开始,如果快照不为空,我希望在字段中显示一个初始值。但是我以后如何更改此文本? (因为,如果用户更改此字段,然后在键盘上按“确定”,则旧值将替换新值) 我尝试过类似的事情:
onFieldSubmitted: (val){
setState(() {
content = val;
});
但不起作用,当我按“确定”时,旧值将再次出现
答案 0 :(得分:0)
这是一种方法。
StreamController<String> someStream = StreamController<String>();
new StreamBuilder<String>(
stream: someStream.stream,
builder: (BuildContext context, AsyncSnapshot<String> result) {
// you get notified here about updates on someStream
return new Text(currentData,
style: new TextStyle(
color: new Color(0xFF05164D), fontSize: 36.0));
})
new FlatButton(
onPressed: () {
someStream.add("ok");
})
答案 1 :(得分:0)
在类级别定义TextEditingController,然后使用Future的值将其设置为initialValue
。
class MyWidgetOrState {
final controller = TextEditingController();
...
if (content != null) controller.initialValue = content;