Flutter Autocomplete组件无法显示全部匹配列表项问题
问题原因及解决方案
问题出在大小写匹配逻辑上:你的代码仅将输入文本转为小写,但原列表中的选项(比如"Banana")保留了首字母大写的格式。直接执行option.contains(textEditingValue.text.toLowerCase())时,"Banana"字符串中并不包含小写的"ban",导致匹配失败。
修正后的核心代码
只需将选项也转为小写,再和转小写的输入文本做包含判断:
Autocomplete<String>( optionsBuilder: (TextEditingValue textEditingValue) { if (textEditingValue.text == '') { return const Iterable<String>.empty(); } final inputText = textEditingValue.text.toLowerCase(); return food.where((String option) { // 同时将选项转为小写,消除大小写差异 return option.toLowerCase().contains(inputText); }); }, onSelected: (String selection) { debugPrint('You just selected $selection'); }, ),
针对900+条数据的性能优化建议
每次输入都遍历全量数据并做字符串转小写,可能带来轻微性能损耗。可以提前生成小写缓存,减少重复计算:
// 提前初始化缓存:原字符串与对应小写字符串的映射 final Map<String, String> foodLowercaseMap = { for (var item in food) item: item.toLowerCase() }; // 在Autocomplete中使用缓存 Autocomplete<String>( optionsBuilder: (TextEditingValue textEditingValue) { if (textEditingValue.text == '') { return const Iterable<String>.empty(); } final inputText = textEditingValue.text.toLowerCase(); return food.where((option) { return foodLowercaseMap[option]!.contains(inputText); }); }, onSelected: (String selection) { debugPrint('You just selected $selection'); }, ),
内容的提问来源于stack exchange,提问作者Milie
相关产品推荐
相关产品推荐

