我有一个带有TextField的小部件,该小部件正在从StreamBuilder
进行初始化,尝试使用整块模式。联系人模型通过流进入。这是在最初填充TextField的工作。我的问题是关于在用户更新TextField然后按下Save按钮之后读取值。如何从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并将其分配给controller属性,但是我看不到从StreamBuilder中给该初始值的方法。我在那里缺少什么吗?
TextEditingController nameController = TextEditingController();
....
controller: nameController,
答案 0 :(得分:1)
我想我可以声明一个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"),
),
],
);
},
答案 1 :(得分:0)
要为TextEditingController
分配默认值,请使用
TextEditingController _controller = TextEditingController(text: "Default value");
要从控制器中检索值,可以使用
_controller.value