我有一个小部件,它有一个textfield,我正在从aStreamBuilder初始化,试图使用bloc模式。一个接触模型正在通过流进入。这将开始填充文本字段。我的问题是,在用户更新文本字段,然后按下保存按钮后读取值。如何从文本字段读取值。我举了一个简单的例子来说明我想做什么。

  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"),
            ),
          ],
        );
      },
    );
  }

我认为我可以声明一个texteeditingController并将其分配给Controller属性,但我看不到一种方法可以从streambuilder中为其提供初始值。我是不是错过了什么?
  TextEditingController nameController = TextEditingController();

  ....

  controller: nameController,

最佳答案

我想我可以声明一个文本编辑控制器并将其分配给
控制器属性,但我看不出一种方法来给它一个初始值
来自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"),
            ),
          ],
        );
      },

关于dart - 从Flutter TextField读取值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55544254/

10-09 21:56