离开焦点时更改 TextFormField 的值

Change Value of TextFormField when leaving focus

我有一个 TextFormField,如果用户离开它,它应该填充特定的文本。 因此,例如,如果用户编辑该字段并输入“Test”,而我不想允许字符串“Test”,那么一旦该字段失去焦点,它就应该用“Sike!”替换文本。所以类似于 onChanged,但事件是失去焦点,而不是价值的改变,这是我目前所拥有的:

TextFormField(
   controller: myController,
   onChanged: (value) {
     if (value == "Test"){
       myController.text = "Sike!";
     }
   },
.............
.............

您可以这样做的一种方法是这样。

class _DemoState extends State<Demo> {
  final node = FocusNode();
  final tc = TextEditingController();

  @override
  void initState() {
    node.addListener(() {
      if (!node.hasFocus && tc.text == 'Test') {
        tc.text = "Sike!";
      }
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return TextFormField(
      controller: tc,
      focusNode: node,
    );
  }
}