You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:36:06