如何在TextformField中更改用户输入的文本颜色

时间:2020-04-07 10:56:37

标签: flutter flutter-layout

我想在用户输入内容时更改文本的颜色。但是只有当用户输入内容时。否则,应保持为灰色。为此,我正在组件内部创建一个Focus节点,并将其分配给textformfield focusNode属性。在initState中,我要添加一个侦听器,以便每当我的textformfield获得焦点时,我都可以更改提示文本的颜色以及边框颜色。但这给了我一个错误,我无法更改用户输入文本的颜色。

FocusNode _focusNode = FocusNode();
 @override
 void initState() {
    _focusNode.addListener(() {
      setState(() => color = _focusNode.hasFocus ? Colors.blue : Colors.grey);
    });
    super.initState();
  }

  @override
  void dispose() {
    _focusNode.dispose();
    super.dispose();
  }

我的组件如下:

return Container(
  height: MediaQuery.of(context).size.height * 0.06,
  child: Material(
    elevation: 5.0,
    borderRadius: BorderRadius.all(
      Radius.circular(30.0),
    ),
    child: TextFormField(
      controller: textController,
      focusNode: _focusNode,
      onTap: _requestFocus,
      keyboardType: this.widget.type,
      textAlignVertical: TextAlignVertical.bottom,
      onChanged: (value) => {
        setState(() {
          _color = Colors.blue;
        })
      },
      style: TextStyle(
        color: color,
        fontWeight: FontWeight.w400,
        fontSize: 15.0,
      ),
      obscureText: widget.obscureText,
      decoration: InputDecoration(
        filled: true,
        fillColor: Color(0xFFFCFCFC),
        hintText: this.widget.hintText,
        isDense: true,
        contentPadding: EdgeInsets.all(40.0),
        hintStyle: TextStyle(
          color: _focusNode.hasFocus ? Colors.blue : Colors.grey,
        ),
        enabledBorder: OutlineInputBorder(
          borderRadius: BorderRadius.all(
            Radius.circular(50.0),
          ),
          borderSide: const BorderSide(color: Colors.white, width: 0.0),
        ),
        prefixIcon: Icon(
          this.widget.icon,
          color: Colors.grey,
        ),
        border: OutlineInputBorder(
          borderRadius: BorderRadius.all(Radius.circular(50.0)),
          borderSide: BorderSide(
            color: Colors.blue,
          ),
        ),
      ),
      validator: (String value) {
        return;
      },
    ),
  ),
);

我无法确定我在做什么错。

编辑:我已经在initSate中移动了焦点节点的初始化,并且在onChanged属性中将setState中的颜色设置为灰色。但仍然给出错误Failed assertion: line 742 pos 12: 'attached': is not true.

1 个答案:

答案 0 :(得分:0)

我通过以下更改解决了该问题:

void _requestFocus() {
   setState(() {
              FocusScope.of(context).unfocus();
              FocusScope.of(context).requestFocus(_focusNode);
            });
          }

删除onChanged回调,并将蓝色赋予文本字段。 就是这样。