从Flutter TextField读取值

问题描述 投票:0回答:2

我有一个带有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,
dart flutter
2个回答
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"),
            ),
          ],
        );
      },

0
投票

要为TextEditingController指定默认值,请使用

TextEditingController _controller = TextEditingController(text: "Default value");

并从您可以使用的控制器中检索值

_controller.value
© www.soinside.com 2019 - 2024. All rights reserved.