Flutter TextEditingController stackoverflow键入时出错

Flutter TextEditingController stackoverflow键入时出错,flutter,dart,Flutter,Dart,以下是最小可复制代码: final _controller = TextEditingController(); @override void initState() { super.initState(); _controller.addListener(() { var input = _controller.text; _controller.text = input; // A _controller.selection = TextSelection

以下是最小可复制代码:

final _controller = TextEditingController();

@override
void initState() {
  super.initState();

  _controller.addListener(() {
    var input = _controller.text;
    _controller.text = input; // A
    _controller.selection = TextSelection.fromPosition(TextPosition(offset: 0)); // B
  });
}

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(child: TextField(controller: _controller)),
  );
}
一旦您开始在
TextField
中键入任何内容,就会出现堆栈溢出错误。如果将
A
B
这两行中的任何一行注释掉,它都可以工作。不知道我做错了什么

错误:

[VERBOSE-2:ui_dart_state.cc(166)] Unhandled Exception: Stack Overflow
#0      _HashVMBase._data (dart:collection-patch/compact_hash.dart:61:3)
#1      _LinkedHashMapMixin.keys (dart:collection-patch/compact_hash.dart:382:37)
#2      _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:373:14)
#3      _JsonStringifier.writeMap (dart:convert/json.dart:753:9)
#4      _JsonStringifier.writeJsonValue (dart:convert/json.dart:723:21)
#5      _JsonStringifier.writeObject (dart:convert/json.dart:678:9)
#6      _JsonStringifier.writeMap (dart:convert/json.dart:768:7)
#7      _JsonStringifier.writeJsonValue (dart:convert/json.dart:723:21)
#8      _JsonStringifier.writeObject (dart:convert/json.dart:678:9)
#9      _JsonStringStringifier.printOn (dart:convert/json.dart:876:17)
#10     _JsonStringStringifier.stringify (dart:convert/json.dart:861:5)
#11     JsonEncoder.convert (dart:convert/json.dart:261:30)
#12     JsonCodec.encode (dart:convert/json.dart:171:45)
#13     JSONMessageCodec.encodeMess<…>
[VERBOSE-2:ui\u dart\u state.cc(166)]未处理的异常:堆栈溢出
#0\u HashVMBase.\u数据(dart:collection patch/compact\u hash.dart:61:3)
#1_LinkedHashMapMixin.keys(dart:collection patch/compact_hash.dart:382:37)
#2_LinkedHashMapMixin.forEach(dart:collection patch/compact_hash.dart:373:14)
#3_jsonstringfier.writeMap(dart:convert/json.dart:753:9)
#4_jsonstringfier.writeJsonValue(dart:convert/json.dart:723:21)
#5_jsonString.writeObject(dart:convert/json.dart:678:9)
#6_jsonstringfier.writeMap(dart:convert/json.dart:768:7)
#7_JsonStringifier.writeJsonValue(dart:convert/json.dart:723:21)
#8_jsonString.writeObject(dart:convert/json.dart:678:9)
#9_jsonstringstringgiier.printOn(dart:convert/json.dart:876:17)
#10_jsonstringstringgiier.stringify(dart:convert/json.dart:861:5)
#11 JsonEncoder.convert(dart:convert/json.dart:261:30)
#12 JsonCodec.encode(dart:convert/json.dart:171:45)
#13 JSONMessageCodec.encodeMess
编辑

问题是当文本更改时创建循环, 例如:

  • 文本更改为“z”
  • 将使用值“z”通知侦听器
  • 将控制器文本设置为“z”
  • 再次使用值“z”通知侦听器
按如下方式更改代码:

final_controller=TextEditingController();
@凌驾
void initState(){
super.initState();
_controller.addListener(){
_控制器选择=
TextSelection.fromPosition(TextPosition(偏移量:0));//B
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中心(子项:文本字段(控制器:_控制器)),
);
}

我在问题中已经提到,如果我删除行号
A
,它就会开始工作,添加此答案有什么意义?