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

Wrap组件与ListView.builder配合失效,无法实现换行布局

问题分析与解决

你的问题出在错误地将每个单选选项单独放在ListView.builder的item里,每个item对应一个Wrap:每个Wrap仅包含单选框和文本两个元素,根本不会触发换行逻辑;再加上ListView默认垂直排列item,最终就呈现出列状布局。

修正方案

把所有单选选项统一放在同一个Wrap组件中,让Wrap管理所有子元素的换行逻辑。如果需要滚动能力,给Wrap套一层SingleChildScrollView即可。

带滚动的实现代码

SingleChildScrollView(
  child: Wrap(
    crossAxisAlignment: WrapCrossAlignment.center,
    spacing: 16, // 子组件水平间距(可选)
    runSpacing: 8, // 行之间的垂直间距(可选)
    children: List.generate(medDays.length, (index) {
      return Row(
        mainAxisSize: MainAxisSize.min, // 让Row仅占用必要宽度
        children: [
          Radio(
            value: index,
            groupValue: radioCondition,
            activeColor: cardColor,
            onChanged: (val) {
              setState(() {
                radioCondition = val;
                pageCondition = true;
              });
            },
          ),
          Text(
            medDays[index].toString(),
            style: const TextStyle(fontSize: 18),
          ),
        ],
      );
    }),
  ),
)

不带滚动的实现代码

如果内容不会超出屏幕,直接使用Wrap即可:

Wrap(
  crossAxisAlignment: WrapCrossAlignment.center,
  spacing: 16,
  runSpacing: 8,
  children: List.generate(medDays.length, (index) {
    return Row(
      mainAxisSize: MainAxisSize.min,
      children: [
        Radio(
          value: index,
          groupValue: radioCondition,
          activeColor: cardColor,
          onChanged: (val) {
            setState(() {
              radioCondition = val;
              pageCondition = true;
            });
          },
        ),
        Text(
          medDays[index].toString(),
          style: const TextStyle(fontSize: 18),
        ),
      ],
    );
  }),
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:27:16