我有一个带有TextField的小部件,我正在从StreamBuilder
初始化,尝试使用bloc模式。联系模型正在通过流进入。这样做最初填充TextField。我的问题是在用户更新TextField后读取值,然后按“保存”按钮。如何从TextField中读取值。我已经包含了一个我正在尝试做的简单示例。
void getTextValues() {
//???
}
@override
Widget build(BuildContext context) {
return StreamBuilder<Contact>(
stream: bloc.getContact,
builder: (context, contact) {
return Column(
children: <Widget>[
TextField(
controller: TextEditingController(text: contact.data.name),
),
new RaisedButton(
padding: const EdgeInsets.all(8.0),
textColor: Colors.white,
color: Colors.blue,
onPressed: getTextValues,
child: new Text("Save"),
),
],
);
},
);
}
我想我可以声明一个TextEditingController并将其分配给控制器属性,但我没有看到从StreamBuilder给出初始值的方法。我错过了什么吗?
TextEditingController nameController = TextEditingController();
....
controller: nameController,
我想我可以声明一个TextEditingController并将其分配给控制器属性,但我没有看到从StreamBuilder给出初始值的方法。
有一种方法。将构建器代码更改为:
builder: (context, contact) {
nameController.value = TextEditingValue(text: contact.data.name);
return Column(
children: <Widget>[
TextField(
controller: nameController,
),
new RaisedButton(
padding: const EdgeInsets.all(8.0),
textColor: Colors.white,
color: Colors.blue,
onPressed: getTextValues,
child: new Text("Save"),
),
],
);
},
要为TextEditingController
指定默认值,请使用
TextEditingController _controller = TextEditingController(text: "Default value");
并从您可以使用的控制器中检索值
_controller.value