使用Flutter DropdownMenu遇Stack Overflow错误,请求排查帮助
问题原因
你遇到的Stack Overflow错误,核心是搜索/筛选函数的无限递归调用:
xp1和mg1函数执行完逻辑后,都直接递归调用自身,会不断占用栈内存直到耗尽- 同时DropdownMenu的回调参数传递错误:你直接调用了函数(
xp1(entries,query)),而非传递函数引用
修复后的代码
修正后的搜索与筛选函数
List<DropdownMenuEntry<Text>> myList = []; // 正确实现SearchCallback:返回过滤后的条目,移除递归 SearchCallback<Text> xp1 = (List<DropdownMenuEntry<Text>> entries, String query) { if (query.isNotEmpty) { myList = entries.where((entry) => entry.label.toLowerCase().contains(query.toLowerCase())).toList(); } else { // 空查询返回全部条目 myList = List.from(entries); } return myList; }; // 正确实现FilterCallback:返回单个条目是否匹配,移除递归 FilterCallback<Text> mg1 = (DropdownMenuEntry<Text> entry, String filterQuery) { final trimmedFilter = filterQuery.trim().toLowerCase(); return entry.label.toLowerCase().contains(trimmedFilter); };
修正后的DropdownMenu调用
DropdownMenu( enableFilter: true, // 传递函数引用,而非直接执行函数 filterCallback: mg1, searchCallback: xp1, // 补充其他必要参数(如entries、onSelected等) )
额外说明
- 回调类型匹配:
SearchCallback<T>接收条目列表和查询字符串,返回过滤后的条目列表FilterCallback<T>接收单个条目和过滤字符串,返回bool值表示是否匹配
- 空查询时返回全部条目,避免下拉菜单无内容
- 统一大小写转换,确保搜索/筛选不区分大小写
内容的提问来源于stack exchange,提问作者DktPhl2018
相关产品推荐
相关产品推荐

