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
相关产品推荐
相关产品推荐

