Flutter TextField的onSubmitted触发无限循环如何实现仅调用一次?
Flutter TextField onSubmitted 无限调用解决方案
问题根因
你在TextField的onSubmitted属性中直接写了_search(),属于立即执行函数,而不是将函数本身作为回调传递给onSubmitted。如果你的_search方法内部存在触发页面重绘的逻辑(比如调用setState),页面重绘时又会再次执行_search(),最终形成无限循环。
修复方案
方案1:直接传递函数引用
去掉_search后面的括号,仅传递函数本身即可:
TextField( controller: searchController, maxLines: 1, autofocus: true, onSubmitted: _search, ),
如果需要获取输入框提交的内容,可以调整_search的定义接收参数:
_search(String inputValue){ print('提交的内容:$inputValue'); }
方案2:用匿名函数包裹(适合需要自定义传参的场景)
如果你需要在调用_search时传递自定义参数,可以用匿名函数回调的写法:
TextField( controller: searchController, maxLines: 1, autofocus: true, onSubmitted: (value) { // 可在此处添加自定义逻辑,或者传递参数给_search _search(); }, ),
内容的提问来源于stack exchange,提问作者user16829612
相关产品推荐
相关产品推荐

