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

Flutter中Autocomplete组件的optionsBuilder未调用原因排查

问题描述

以下是一段Flutter代码:

Widget returnAutoCompleteForTankLine(BuildContext context, MyAquariumManagerTanksModel tanksModel, TextEditingController textController, Tank? currentTank) {
    myPrint("in returnAutoCompleteForTankLine");
    return Autocomplete<String>(
      //initialValue: TextEditingValue(text: initialText),
      optionsBuilder: (TextEditingValue textEditingValue) {
        myPrint("in optionsbuilder");
        if (textEditingValue.text == '') {
          myPrint("in optionsbuilder, emptyee");
          return const Iterable<String>.empty();
        }
        myPrint("do we have tanklines, ${tanksModel.returnListOfTankLines()}");
        return tanksModel.returnListOfTankLines().where((String option) {
          return option.contains(textEditingValue.text.toLowerCase());
        });
      },
        fieldViewBuilder: (BuildContext context, TextEditingController textEditingController,
            FocusNode focusNode,
            VoidCallback onFieldSubmitted) {
          myPrint("in fieldViewBuilder");
          return TextField(
            controller: textController,
            focusNode: focusNode,
            onChanged: (String value) {
myPrint("do we come here?");
            },
          );
        }
    );
  }

这段代码中的TextField可正常工作,但optionsBuilder内部的代码从未被调用,请问这可能是什么原因?

原因分析与解决方案
  • 核心问题:替换了Autocomplete的内部控制器
    Autocomplete的optionsBuilder依赖自身内部的TextEditingController监听输入变化,但你在fieldViewBuilder里直接用了外部传入的textController,导致Autocomplete无法感知输入框的文本变化,自然不会触发optionsBuilder。
    解决办法:直接使用fieldViewBuilder参数提供的textEditingController;如果需要和外部控制器同步,可以给内部控制器添加监听,双向同步文本内容。

  • 焦点传递异常(次要可能)
    虽然你把focusNode传给了TextField,但如果焦点状态没有正确通知到Autocomplete组件,也可能导致选项面板不触发。可以检查焦点是否正确绑定,或者手动触发焦点测试。

  • 数据空值不影响调用(仅排查项)
    即便tanksModel.returnListOfTankLines()返回空列表,optionsBuilder也应该会被调用,只是不会显示选项。所以数据为空不是optionsBuilder不执行的原因,但可以后续验证数据是否正常。

内容的提问来源于stack exchange,提问作者user22100324

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:35:18