输入文本字段后,Flutter文本将不再更新

时间:2019-07-18 14:36:04

标签: flutter dart

  

我有箭头按钮来增加或减少变量age,该变量可以很好地更新hintText,但是如果我使用TextField小部件输入新值,它只会更新可以,但是之后箭头按钮不再起作用以进一步更改hintText中的年龄值。

但是,该值仍在幕后进行更新,并且可以使用print函数进行查看。

这是所使用代码的简化版本:

TextField(
    onChanged: (val) {
          setState(() {
            age = int.parse(val);
          });,
    keyboardType: TextInputType.number,
    decoration: InputDecoration(
    border: InputBorder.none,
    hintText: age.toString(),
    hintStyle: TextStyle(
        color: Color(0xFF999999), fontWeight: FontWeight.bold),
  ),
)


Container(
      child: RawMaterialButton(
        onPressed: chngAge,
)


void chngAge() {
    setState(() {
      age++;
    });
  }

我想知道在将某些文本输入到文本字段后,它是否不再hintText,因此无法以这种方式更新?

1 个答案:

答案 0 :(得分:2)

您需要更改TextField而不是hint值的数据,因为当您在TextField中写入一些文本时,提示消失了。

这是我做的一个例子:

class SampleText extends StatefulWidget {
  @override
  _SampleTextState createState() => _SampleTextState();
}

class _SampleTextState extends State<SampleText> {
  TextEditingController _controller = TextEditingController();

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.plus_one),
        onPressed: chngAge,
      ),
      body: Center(
        child: TextField(
          controller: _controller,
          keyboardType: TextInputType.number,
          decoration: InputDecoration(
            border: InputBorder.none,
            hintStyle: TextStyle(
                color: Color(0xFF999999), fontWeight: FontWeight.bold),
          ),
        ),
      ),
    );
  }

  void chngAge() {
    _controller.text = (int.parse(_controller.text) + 1).toString();
  }
}

您可以在此处获取更多信息:https://flutter.dev/docs/cookbook/forms/retrieve-input