Flutter中如何在Column条件不满足时不添加任何Widget?
解决方案
要实现条件满足时才向Column添加Widget,且不使用空Widget替代,核心思路是控制Widget是否被加入Column的children列表,而非返回null的Widget。以下是几种可行方案:
方案一:直接在children列表中做条件判断
把条件判断移到Column的children里,仅在满足条件时添加目标Widget:
Column( children: [ // 仅当str为'M'时添加MyWidget if (str == 'M') MyWidget(str, db), ], ) // 修改MyWidget,仅处理满足条件的情况,无需返回null Widget MyWidget(String s, double d) { print(s); return Container( color: Colors.red, height: d, ); }
这种方式最直观,条件不满足时该元素不会被加入列表,完全符合需求。
方案二:让MyWidget返回可选Widget,再过滤null
如果需要保留MyWidget内部的条件判断逻辑,可以让它返回Widget?,然后通过whereType<Widget>()过滤列表中的null值:
Column( children: [ MyWidget(str, db), ].whereType<Widget>().toList(), // 自动过滤null,得到纯Widget列表 ) Widget? MyWidget(String s, double d) { print(s); switch(s){ case 'M': return Container( color: Colors.red, height: d, ); case 'T': return null; default: return null; } }
方案三:使用扩展运算符动态添加列表
通过扩展运算符...,根据条件决定是否将包含目标Widget的列表展开加入children:
Column( children: [ // 满足条件则展开包含MyWidget的列表,否则展开空列表 ...(str == 'M' ? [MyWidget(str, db)] : []), ], ) // 同样修改MyWidget为仅返回有效Widget Widget MyWidget(String s, double d) { print(s); return Container( color: Colors.red, height: d, ); }
内容的提问来源于stack exchange,提问作者tailor
相关产品推荐
相关产品推荐

