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

如何为Widget列表中的每个元素包裹Flexible组件

解决方法

你只需要在构建Row的children时,对传入的widgets列表做遍历映射,给每个子组件都包裹一层Flexible即可,修改后的代码如下:

class FlexElement extends StatelessWidget {
  final List<Widget> widgets;
  final bool isVisible;

  const FlexElement({
    Key? key,
    required this.widgets,
    required this.isVisible,
  }) : super(key: key);
  
  @override
  Widget build(BuildContext context) {
    return Visibility(
      visible: isVisible,
      child: Container(
        child: Row(
          // 遍历列表,给每个widget包裹Flexible
          children: widgets.map((widget) => Flexible(child: widget)).toList(),
        ),
      ),
    );
  }
}

补充说明

如果后续需要给不同子组件设置不同的flex权重,可以给FlexElement新增一个可选的权重列表参数,示例如下:

class FlexElement extends StatelessWidget {
  final List<Widget> widgets;
  final bool isVisible;
  final List<int>? flexValues; // 新增可选权重列表参数

  const FlexElement({
    Key? key,
    required this.widgets,
    required this.isVisible,
    this.flexValues,
  }) : super(key: key);
  
  @override
  Widget build(BuildContext context) {
    return Visibility(
      visible: isVisible,
      child: Container(
        child: Row(
          children: List.generate(widgets.length, (index) {
            // 优先使用传入的权重值,默认权重为1
            final flex = flexValues?[index] ?? 1;
            return Flexible(
              flex: flex,
              child: widgets[index],
            );
          }),
        ),
      ),
    );
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:31:34