好吧,这可能是一个非常简单的问题,但是我正在开始,而且我找不到太多有关 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。