好吧,这可能是一个非常简单的问题,但是我正在开始,而且我找不到太多有关 flutter 的文档...

import 'package:flutter/material.dart';

class AutoChangeField extends StatefulWidget {
  @override
  _AutoChangeFieldState createState() => _AutoChangeFieldState();
}

class _AutoChangeFieldState extends State<AutoChangeField> {

  Color _color = Colors.black;
  String _newValue = 'write something';

  @override
  Widget build(BuildContext context) {
    return TextFormField(
      initialValue: _newValue,
      cursorColor: _color,
      onChanged: (val){
        setState(() {
          _newValue = "It changed!";
          _color = Colors.red;
        });
      },
    );
  }
}

当您在TextFormField上写一些内容时,只是cursorColor会正确地交换为红色,但是它的值却不会。值(value)始终是“写点东西+(你写的东西)”,而不是“它变了!”。 :(

非常感谢。

最佳答案

您应该使用TextEditingController并将TextEditingController的initialValue设置为“写点东西”

像这样

class AutoChangeField extends StatefulWidget {
  @override
  _AutoChangeFieldState createState() => _AutoChangeFieldState();
}

class _AutoChangeFieldState extends State<AutoChangeField> {

  Color _color = Colors.black;
  TextEditingController controller = TextEditingController(text: "Write something");

  @override
  Widget build(BuildContext context) {
    return TextFormField(
      controller: controller,
      cursorColor: _color,
      onChanged: (val){
        print(val);
        controller.text = "It changed!";
        setState(() {
          _color = Colors.red;
        });
      },
    );
  }
}

注意:您不能同时使用 Controller 和initialValue。

09-27 18:09