【问题标题】:Reading values from a Flutter TextField从 Flutter TextField 中读取值
【发布时间】:2019-08-27 21:08:23
【问题描述】:

我有一个带有 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


    【解决方案1】:

    要为TextEditingController 分配默认值,请使用

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

    并且要从控制器中检索值,您可以使用

    _controller.value
    

    【讨论】:

      【解决方案2】:

      我想我可以声明一个 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"),
                  ),
                ],
              );
            },
      

      【讨论】:

      • 啊!很简单!我不知道为什么我没有想到我可以将代码放在返回之上。谢谢@Ryosuke
      • 发生在我们最好的人身上:)
      猜你喜欢
      • 2021-07-22
      • 2021-08-28
      • 2021-03-08
      • 1970-01-01
      • 2019-01-18
      • 2021-09-15
      • 2021-03-09
      • 2020-04-02
      • 1970-01-01
      相关资源
      最近更新 更多