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
,它就会开始工作,添加此答案有什么意义?