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

使用Flutter DropdownMenu遇Stack Overflow错误,请求排查帮助

Flutter DropdownMenu 栈溢出问题排查与修复

问题原因

你遇到的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等)
)

额外说明

  1. 回调类型匹配:
    • SearchCallback<T> 接收条目列表和查询字符串,返回过滤后的条目列表
    • FilterCallback<T> 接收单个条目和过滤字符串,返回bool值表示是否匹配
  2. 空查询时返回全部条目,避免下拉菜单无内容
  3. 统一大小写转换,确保搜索/筛选不区分大小写

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:40:57