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

Flutter DropdownButton加载PHP MySQL分类数据仅显示第一条问题求助

问题原因
  • 逻辑嵌套错误:你将单个DropdownButton的生成逻辑放在了ListView.builder的itemBuilder回调中,相当于每遍历一条分类数据就生成一个仅包含当前分类的独立DropdownButton,而非把全部分类数据汇总到同一个DropdownButton的选项列表中。
  • 布局高度限制:外层SizedBox设置的固定高度为context.dynamicHeight(5),刚好只能容下第一个生成的DropdownButton,后续的其他DropdownButton全部被遮挡,最终呈现出「下拉列表只有第一条数据」的错觉。
修复方案

首先提前把全部分类名称提取为独立的列表,再直接渲染单个DropdownButton即可,参考代码如下:

// 提前提取全部分类名称(可放在build方法内、组件渲染逻辑之前)
List<String> categoryList = snap.map((item) => item['categoryName'].toString()).toList();

// 组件渲染部分,不需要嵌套ListView.builder
SizedBox(
  width: context.dynamicWidth(5),
  height: context.dynamicHeight(5),
  child: DropdownButton<String>(
    isExpanded: true, // 适配父容器宽度,避免文字溢出
    items: categoryList.map((String value) {
      return DropdownMenuItem<String>(
        value: value,
        child: Text(value),
      );
    }).toList(),
    onChanged: (selectedValue) {
      // 此处编写分类选中后的业务逻辑
    },
  ),
)
补充注意点

如果需要设置默认选中的分类,只需给DropdownButton添加value参数,绑定你定义的当前选中分类变量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:06